[
  {
    "path": ".gitignore",
    "content": ".DS_Store \n\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\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Scott Sievert\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in 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": "README.md",
    "content": "## Swift Matrix and Machine Learning Library\n\n*Note: [tensorflow/swift][t4sw] and [apple/swift-numerics/issues/6][asn6] have\nor will have more complete support for NumPy-like ndarrays and autodiff. Fast AI\nhas a good overview: https://www.fast.ai/2019/01/10/swift-numerics/*\n\n*An alternate and much mature library is https://github.com/AlexanderTar/LASwift*\n\n[t4sw]:https://github.com/tensorflow/swift\n[asn6]:https://github.com/apple/swift-numerics/issues/6\n\nApple's Swift is a high level language that's *asking* for some numerical\nlibrary to perform computation *fast* or at the very least *easily*. This is a\nbare-bones wrapper for that library.\n\nA way to have iOS run high-level code similar to Python or Matlab is something\nI've been waiting for, and am incredibly excited to see the results. This will\nmake porting complex signal processing algorithms to C *much* easier. Porting\nfrom Python/MATLAB to C was (and is) a pain in the butt, and this library aims\nto make the conversion between a Python/Matlab algorithm and a mobile app\n*simple.*\n\nIn most cases, this library calls [Accelerate][accel] or [OpenCV][opencv]. If\nyou want to speed up some function or add add another feature in those\nlibraries, feel free to file an issue or submit a pull request (preferred!).\n\nCurrently, this library gives you\n\n* operators and various functions (sin, etc) that operate on entire arrays\n* helper function (reshape, reverse, delete, repeat, etc)\n* easy initializers for 1D and 2D arrays\n* complex math (dot product, matrix inversion, eigenvalues, etc)\n* machine learning algorithms (SVM, kNN, SVD/PCA, more to come)\n* one dimensional Fourier transforms\n* speed optimization using Accelerate and OpenCV\n\nWhen I was crafting this library, I primarily followed the footsteps and\nexample set by [NumPy][numpy]. For the more complex mathematical functions\n(e.g., SVD) I tested it against NumPy. Matlab, at least for the SVD, returns\nslightly different output.\n\nAdditionally, I followed NumPy's syntax whenever possible. For example, NumPy\nand Matlab differ in their initializer called `ones` by `ones((M,N))` and\n`ones(M, N)` respectively. If in doubt or getting weird compiler bugs, look at\n[NumPy for Matlab users][nfm] or the section on possible swix bugs that may pop\nup during the [*Install*][install] or other [*Bugs*][bugs] you may find.\n\n[bugs]:http://scottsievert.com/swix/bugs.html\n[nfm]:http://wiki.scipy.org/NumPy_for_Matlab_Users\n\n## [Documentation][swix-doc]\nDetails on how to install can be found in [*Install*][install]. The\n[swix documentation][swix-doc] includes details on each individual function and\npossible bugs.\n\n[install]:http://scottsievert.com/swix/installation.html\n[swix-doc]:http://scottsievert.com/swix/\n\n## Third Party Frameworks/Libraries\n* [Accelerate][accel]\n* [OpenCV][opencv]\n* ...and I used some of [SwiftAccelerate][ais] to avoid some BLAS/LAPACK agony.\n\n### To be integrated\n* [swix-complex][complex]\n* [ScalarArithmetic][scalar]\n\n## Uses\n* [EERegression](https://github.com/erkekin/EERegression/) -- General purpose\n  multivaritate and quadratic Regression library for Swift 2.1. This can be\n  used to fit a polynomial of different degrees to points you draw with your\n  finger! (and slick gif on readme!)\n* [Click - The Artificial Intelligence\n  Game](https://itunes.apple.com/ai/app/click-artificial-intelligence/id1032660757?mt=8)\n\n## FAQ\n> **Why does this library exist?**\n\nNot only should you be able to do simple math in arrays like in [Surge], Swift\nmakes it possible to call high level mathematical functions just like in\nPython/Matlab.\n\n> **How does this library compare to Python/Matlab?**\n\nComplete speed results can be found in *[Speed]*\n\n[Speed]:http://scottsievert.com/swix/speed.html\n[Surge]:https://github.com/mattt/Surge\n\n\n[ais]:https://github.com/haginile/SwiftAccelerate\n[so]:http://stackoverflow.com/q/24727674/1141256\n[opencv]:http://opencv.org\n[scalar]:https://github.com/seivan/ScalarArithmetic\n[complex]:https://github.com/dankogai/swift-complex\n[numpy]:http://www.numpy.org\n[accel]:https://developer.apple.com/library/prerelease/mac/documentation/Accelerate/Reference/AccelerateFWRef/_index.html#//apple_ref/doc/uid/TP40009465\n[@]:https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/AdvancedOperators.html#//apple_ref/doc/uid/TP40014097-CH27-XID_48\n[ones]:http://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html\n[zeros]:http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html#numpy.zeros\n[pep]:http://legacy.python.org/dev/peps/pep-0465/#implementation-details\n[st]:https://twitter.com/stsievert\n"
  },
  {
    "path": "python_testing/csvs/image.csv",
    "content": "0.0,2.0,4.0\n6.0,8.0,10.0\n12.0,14.0,16.0\n"
  },
  {
    "path": "python_testing/csvs/ndarray.csv",
    "content": "1.0,2.0,3.0,4.0,5.0,2.0,1.0\n"
  },
  {
    "path": "python_testing/csvs/x_test.csv",
    "content": "0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01\n0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n"
  },
  {
    "path": "python_testing/csvs/x_train.csv",
    "content": "0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01\n0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,2.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,6.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,4.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,3.000000000000000000e+00,1.400000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,7.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,1.300000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,2.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.100000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,8.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,1.500000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,3.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,1.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,8.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.100000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,7.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.200000000000000000e+01,1.300000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,2.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+01,1.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,9.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,6.000000000000000000e+00,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,4.000000000000000000e+00,3.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,8.000000000000000000e+00,1.100000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.300000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.500000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.100000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,9.000000000000000000e+00,1.200000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.500000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.400000000000000000e+01,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,7.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.500000000000000000e+01,8.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,2.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.500000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,1.100000000000000000e+01,1.500000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.400000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,1.200000000000000000e+01,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.000000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+01,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,8.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,1.200000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.200000000000000000e+01,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,7.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.300000000000000000e+01,6.000000000000000000e+00,3.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.400000000000000000e+01,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.300000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.600000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,1.500000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,1.400000000000000000e+01,7.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,1.000000000000000000e+01,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.300000000000000000e+01,1.100000000000000000e+01,3.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,3.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.600000000000000000e+01,5.000000000000000000e+00,8.000000000000000000e+00,1.400000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,1.300000000000000000e+01,1.000000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,1.200000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.400000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.500000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,6.000000000000000000e+00,1.400000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,9.000000000000000000e+00,1.600000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+01,1.500000000000000000e+01,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.100000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.600000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,4.000000000000000000e+00,1.500000000000000000e+01,1.600000000000000000e+01,6.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,1.600000000000000000e+01,8.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,1.400000000000000000e+01,8.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+01,1.300000000000000000e+01,8.000000000000000000e+00,1.600000000000000000e+01,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,1.600000000000000000e+01,4.000000000000000000e+00,1.000000000000000000e+01,1.100000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,1.500000000000000000e+01,6.000000000000000000e+00,1.400000000000000000e+01,1.600000000000000000e+01,1.300000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.600000000000000000e+01,1.600000000000000000e+01,1.500000000000000000e+01,9.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,3.000000000000000000e+00,1.100000000000000000e+01,9.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,4.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.200000000000000000e+01,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00\n"
  },
  {
    "path": "python_testing/csvs/y_test.csv",
    "content": "0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,"
  },
  {
    "path": "python_testing/csvs/y_train.csv",
    "content": "0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,3.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,0.000000000000000000e+00,5.000000000000000000e+00,3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00,6.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,5.000000000000000000e+00,7.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,4.000000000000000000e+00,8.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00,1.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,2.000000000000000000e+00,2.000000000000000000e+00,7.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,7.000000000000000000e+00,3.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,6.000000000000000000e+00,4.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,5.000000000000000000e+00,0.000000000000000000e+00,9.000000000000000000e+00,5.000000000000000000e+00,2.000000000000000000e+00,8.000000000000000000e+00,2.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,2.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,3.000000000000000000e+00,9.000000000000000000e+00,1.000000000000000000e+00,7.000000000000000000e+00,6.000000000000000000e+00,8.000000000000000000e+00,4.000000000000000000e+00,3.000000000000000000e+00,1.000000000000000000e+00,4.000000000000000000e+00,"
  },
  {
    "path": "python_testing/readme.md",
    "content": "\nThis directory is used to test swix's implementation of OpenCV against Python's\nimplementation.\n"
  },
  {
    "path": "python_testing/speed_tests/speed.py",
    "content": "\nfrom __future__ import division\nfrom pylab import *\nfrom time import time\n\nstart = time()\nN = 1000\nx1 = linspace(0, 1, num=N)\ny1 = linspace(0, 1, num=N)\nx, y = meshgrid(x1, y1)\nz = x**2 + y**2\nend = time()\n\"\"\"\nresults:\n    numpy             : 35.14ms\n    swift -Onone      : 1.8s\n    swift -O          : 99ms\n    swift -Ofastest   : 93ms\n    swift_min / numpy : 2.62\n\"\"\"\n\nprint (end - start) * 1000, \"ms\"\n\n"
  },
  {
    "path": "python_testing/testing.py",
    "content": "\nfrom __future__ import division\nfrom pylab import *\nfrom sklearn import datasets\nfrom sklearn import svm\n#import cv2\n\ndef svmTest():\n    def sk_learn():\n        data = datasets.load_digits()\n        N_test = int(1050)\n\n        x_train = data['data'][:-N_test]\n        y_train = data['target'][:-N_test]\n\n        x_test = data['data'][-N_test:]\n        y_test = data['target'][-N_test:]\n\n        np.savetxt(\"csvs/x_train.csv\", x_train, delimiter=\",\")#@asdjkk\n        np.savetxt(\"csvs/y_train.csv\", y_train, delimiter=\",\", newline=\",\")\n        np.savetxt(\"csvs/x_test.csv\", x_test, delimiter=\",\")\n        np.savetxt(\"csvs/y_test.csv\", y_test, delimiter=\",\", newline=\",\")\n\n        ml = svm.LinearSVC()\n        ml = ml.fit(x_train, y_train)\n        yhat_test = ml.predict(x_test)\n\n        print argwhere(abs(yhat_test - y_test) < 0.5).shape[0] / y_test.shape[0]\n    data = datasets.load_digits()\n    N_test = int(1050)\n    x_train = data['data'][:-N_test]\n    y_train = data['target'][:-N_test]\n\n    x_test = data['data'][-N_test:]\n    y_test = data['target'][-N_test:]\n\n    x_train = asarray(x_train, dtype=float32)\n    y_train = asarray(y_train, dtype=float32)\n    x_test = asarray(x_test, dtype=float32)\n\n    params = dict(kernel_type=cv2.SVM_SIGMOID, svm_type=cv2.SVM_C_SVC)\n    cv_svm = cv2.SVM()\n\n    cv_svm.train(x_train, y_train, params=params)\n    yhat = cv_svm.predict_all(x_test)\n\n    print \"Percent correct:\", argwhere(abs(yhat.flat[:] - y_test) < 0.5).shape[0] / yhat.shape[0]\n\ndef pinvTest():\n    M = 3\n    N = 4\n    x = arange(M*N).reshape(M,N)\n\n    y = pinv(x)\n\ndef kronTest():\n    A = array([1, 2, 3, 4, 5, 6]).reshape(2, 3)\n    B = array([3, 2, 5, 0, 1, 2]).reshape(3,2)\n    print kron(A, B)\n\n#def convolveTest():\nfrom scipy.signal import fftconvolve\n\nx = arange(10)\nk = ones(4) / 4\ny = fftconvolve(x, k, mode='same')\n\nprint np.around(y, decimals=3)\n"
  },
  {
    "path": "swix/.idea/.name",
    "content": "swix"
  },
  {
    "path": "swix/.idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\" useUTFGuessing=\"true\" native2AsciiForPropertiesFiles=\"false\" />\n</project>\n\n"
  },
  {
    "path": "swix/.idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectRootManager\" version=\"2\" />\n</project>\n\n"
  },
  {
    "path": "swix/.idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/.idea/swix.iml\" filepath=\"$PROJECT_DIR$/.idea/swix.iml\" />\n    </modules>\n  </component>\n</project>\n\n"
  },
  {
    "path": "swix/.idea/scopes/scope_settings.xml",
    "content": "<component name=\"DependencyValidationManager\">\n  <state>\n    <option name=\"SKIP_IMPORT_STATEMENTS\" value=\"false\" />\n  </state>\n</component>"
  },
  {
    "path": "swix/.idea/swix.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"CIDR_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\">\n    <content url=\"file://$MODULE_DIR$\" />\n    <orderEntry type=\"inheritedJdk\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n  </component>\n</module>\n\n"
  },
  {
    "path": "swix/.idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"\" vcs=\"\" />\n  </component>\n</project>\n\n"
  },
  {
    "path": "swix/.idea/workspace.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ChangeListManager\">\n    <list default=\"true\" id=\"4e21c62e-d6a5-4f6f-8af5-67e3b98dcd75\" name=\"Default\" comment=\"\" />\n    <ignored path=\"swix.iws\" />\n    <ignored path=\".idea/workspace.xml\" />\n    <option name=\"TRACKING_ENABLED\" value=\"true\" />\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\n  </component>\n  <component name=\"ChangesViewManager\" flattened_view=\"true\" show_ignored=\"false\" />\n  <component name=\"CreatePatchCommitExecutor\">\n    <option name=\"PATCH_PATH\" value=\"\" />\n  </component>\n  <component name=\"DaemonCodeAnalyzer\">\n    <disable_hints />\n  </component>\n  <component name=\"ExecutionTargetManager\" SELECTED_TARGET=\"macos_x86_64\" />\n  <component name=\"FavoritesManager\">\n    <favorites_list name=\"swix\" />\n  </component>\n  <component name=\"FileEditorManager\">\n    <leaf>\n      <file leaf-file-name=\"main.swift\" pinned=\"false\" current=\"true\" current-in-tab=\"true\">\n        <entry file=\"file://$PROJECT_DIR$/swix/main.swift\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.64784056\" vertical-offset=\"0\" max-vertical-offset=\"602\">\n              <caret line=\"30\" column=\"75\" selection-start-line=\"30\" selection-start-column=\"0\" selection-end-line=\"30\" selection-end-column=\"0\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n    </leaf>\n  </component>\n  <component name=\"FindManager\">\n    <FindUsagesManager>\n      <setting name=\"OPEN_NEW_TAB\" value=\"true\" />\n    </FindUsagesManager>\n  </component>\n  <component name=\"ProjectFrameBounds\">\n    <option name=\"y\" value=\"22\" />\n    <option name=\"width\" value=\"1440\" />\n    <option name=\"height\" value=\"878\" />\n  </component>\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"false\">\n    <OptionsSetting value=\"true\" id=\"Add\" />\n    <OptionsSetting value=\"true\" id=\"Remove\" />\n    <OptionsSetting value=\"true\" id=\"Checkout\" />\n    <OptionsSetting value=\"true\" id=\"Update\" />\n    <OptionsSetting value=\"true\" id=\"Status\" />\n    <OptionsSetting value=\"true\" id=\"Edit\" />\n    <ConfirmationsSetting value=\"0\" id=\"Add\" />\n    <ConfirmationsSetting value=\"0\" id=\"Remove\" />\n  </component>\n  <component name=\"ProjectReloadState\">\n    <option name=\"STATE\" value=\"0\" />\n  </component>\n  <component name=\"ProjectView\">\n    <navigator currentView=\"ProjectPane\" proportions=\"\" version=\"1\">\n      <flattenPackages />\n      <showMembers />\n      <showModules />\n      <showLibraryContents />\n      <hideEmptyPackages />\n      <abbreviatePackageNames />\n      <autoscrollToSource />\n      <autoscrollFromSource />\n      <sortByType />\n    </navigator>\n    <panes>\n      <pane id=\"ProjectPane\">\n        <subPane>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" />\n              <option name=\"myItemType\" value=\"com.jetbrains.cidr.projectView.XcodeRootNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"swix\" />\n              <option name=\"myItemType\" value=\"com.jetbrains.cidr.projectView.XcodeProjectNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" />\n              <option name=\"myItemType\" value=\"com.jetbrains.cidr.projectView.XcodeRootNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"swix\" />\n              <option name=\"myItemType\" value=\"com.jetbrains.cidr.projectView.XcodeProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"swix\" />\n              <option name=\"myItemType\" value=\"com.jetbrains.cidr.projectView.XcodeViewNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n        </subPane>\n      </pane>\n      <pane id=\"Cidr.FilesView\" />\n    </panes>\n  </component>\n  <component name=\"PropertiesComponent\">\n    <property name=\"recentsLimit\" value=\"5\" />\n    <property name=\"FullScreen\" value=\"false\" />\n  </component>\n  <component name=\"RunManager\" selected=\"Application.swix\">\n    <configuration default=\"true\" type=\"AppleRunConfiguration\" factoryName=\"Application\" PASS_PARENT_ENVS=\"FALSE\" PROJECT_NAME=\"swix\" TARGET_NAME=\"swix\" CONFIG_NAME=\"Debug\" RUN_TARGET_PROJECT_NAME=\"swix\" RUN_TARGET_NAME=\"swix\" MAKE_ACTIVE=\"TRUE\" WAIT_FOR=\"FALSE\">\n      <envs />\n      <EXTENSION ID=\"org.jetbrains.appcode.reveal.RevealRunConfigurationExtension\">\n        <REVEAL_SETTINGS autoInject=\"false\" autoInstall=\"true\" askToEnableAutoInstall=\"true\" />\n      </EXTENSION>\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"OCUnitRunConfiguration\" factoryName=\"XCTest/Kiwi\" PASS_PARENT_ENVS=\"FALSE\" TEST_MODE=\"SUITE_TEST\">\n      <envs />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"OCGoogleTestRunConfigurationType\" factoryName=\"Google Test\" PASS_PARENT_ENVS=\"FALSE\" PROJECT_NAME=\"swix\" TARGET_NAME=\"swix\" CONFIG_NAME=\"Debug\" TEST_MODE=\"SUITE_TEST\">\n      <envs />\n      <method />\n    </configuration>\n    <configuration default=\"false\" name=\"swix\" type=\"AppleRunConfiguration\" factoryName=\"Application\" WORKING_DIR=\"\" PASS_PARENT_ENVS=\"FALSE\" PROJECT_NAME=\"swix\" TARGET_NAME=\"swix\" CONFIG_NAME=\"Debug\" SCHEME_NAME=\"swix\" RUN_TARGET_PROJECT_NAME=\"swix\" RUN_TARGET_NAME=\"swix\" MAKE_ACTIVE=\"TRUE\" WAIT_FOR=\"FALSE\">\n      <envs />\n      <EXTENSION ID=\"org.jetbrains.appcode.reveal.RevealRunConfigurationExtension\">\n        <REVEAL_SETTINGS autoInject=\"false\" autoInstall=\"true\" askToEnableAutoInstall=\"true\" />\n      </EXTENSION>\n      <method />\n    </configuration>\n    <list size=\"1\">\n      <item index=\"0\" class=\"java.lang.String\" itemvalue=\"Application.swix\" />\n    </list>\n  </component>\n  <component name=\"ShelveChangesManager\" show_recycled=\"false\" />\n  <component name=\"SvnConfiguration\">\n    <configuration />\n  </component>\n  <component name=\"TaskManager\">\n    <task active=\"true\" id=\"Default\" summary=\"Default task\">\n      <changelist id=\"4e21c62e-d6a5-4f6f-8af5-67e3b98dcd75\" name=\"Default\" comment=\"\" />\n      <created>1408552877448</created>\n      <option name=\"number\" value=\"Default\" />\n      <updated>1408552877448</updated>\n    </task>\n    <servers />\n  </component>\n  <component name=\"ToolWindowManager\">\n    <frame x=\"0\" y=\"22\" width=\"1440\" height=\"878\" extended-state=\"6\" />\n    <editor active=\"false\" />\n    <layout>\n      <window_info id=\"Palette&#9;\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"3\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Changes\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"7\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Designer\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Terminal\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"true\" weight=\"0.22126082\" sideWeight=\"0.5\" order=\"7\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"TODO\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"6\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Structure\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.25\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Project\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"true\" weight=\"0.24305555\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"combo\" />\n      <window_info id=\"Debug\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.4\" sideWeight=\"0.5\" order=\"3\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Favorites\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"2\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Event Log\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"7\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Run\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Version Control\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"7\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Cvs\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.25\" sideWeight=\"0.5\" order=\"4\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Message\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Find\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Ant Build\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.25\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Commander\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"SLIDING\" type=\"SLIDING\" visible=\"false\" weight=\"0.4\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Inspection\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.4\" sideWeight=\"0.5\" order=\"5\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Hierarchy\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" weight=\"0.25\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"combo\" />\n    </layout>\n  </component>\n  <component name=\"Vcs.Log.UiProperties\">\n    <option name=\"RECENTLY_FILTERED_USER_GROUPS\">\n      <collection />\n    </option>\n    <option name=\"RECENTLY_FILTERED_BRANCH_GROUPS\">\n      <collection />\n    </option>\n  </component>\n  <component name=\"VcsContentAnnotationSettings\">\n    <option name=\"myLimit\" value=\"2678400000\" />\n  </component>\n  <component name=\"VcsManagerConfiguration\">\n    <option name=\"myTodoPanelSettings\">\n      <TodoPanelSettings />\n    </option>\n  </component>\n  <component name=\"XDebuggerManager\">\n    <breakpoint-manager />\n  </component>\n  <component name=\"editorHistoryManager\">\n    <entry file=\"file://$PROJECT_DIR$/swix/main.swift\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\" vertical-offset=\"0\" max-vertical-offset=\"468\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/swix/main.swift\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.64784056\" vertical-offset=\"0\" max-vertical-offset=\"602\">\n          <caret line=\"30\" column=\"75\" selection-start-line=\"30\" selection-start-column=\"0\" selection-end-line=\"30\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n  </component>\n</project>\n\n"
  },
  {
    "path": "swix/.idea/xcode.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"XcodeMetaData\" PROJECT_FILE=\"$PROJECT_DIR$/swix.xcodeproj\" />\n</project>\n\n"
  },
  {
    "path": "swix/speed/speed.jl",
    "content": "function ndgrid{T}(v1::AbstractVector{T}, v2::AbstractVector{T})\n    m, n = length(v1), length(v2)\n    v1 = reshape(v1, m, 1)\n    v2 = reshape(v2, 1, n)\n    (repmat(v1, 1, n), repmat(v2, m, 1))\nend\n\n\nfunction pe1()\n    N = 1e6\n    sum = 0\n    for i=1:N\n        if i % 3 == 0 || i % 5 == 0\n            sum += i\n        end\n    end\nend\n\nfunction pe10()\n    N = 2e6\n    primes = [1:N]\n    for i in 2:sqrt(N)\n        j = (2:N/i)*i\n        primes[j] = 0\n    end\nend\n\nfunction pe73()\n    N = 1e3\n    di = [1:N]\n    ni = [1:N]\n    (n, d) = ndgrid(ni, di)\n\n    f = n ./ d\n\n    f = unique(f)\n    f = sort(f)\n    f = f[f .< 1/2]\n    f = f[f .> 1/3]\nend\n\nfunction soft_threshold()\n    N = 1e2\n    j = linspace(-1.0, 1.0, convert(Int64, N))\n    x, y = ndgrid(j, j)\n    z = x.^2 + y.^2\n    i = abs(z) .< 0.5\n    z[i] = 0\n    z[!i] -= 0.5\nend\n\nfunction pi_approx()\n    N = 1e6\n    pie = 1.0\n    for k in 1:N\n        pie += (-1)^k / (2*k + 1)\n    end\nend\n\n# timing\npe1()\npe10()\npe73()\nsoft_threshold()\npi_approx()\n\nprint(\"pe1: \")\nprintln(@elapsed pe1())\nprint(\"pe10: \")\nprintln(@elapsed pe10())\nprint(\"pe73: \")\nprintln(@elapsed pe73())\nprint(\"st_time: \")\nprintln(@elapsed soft_threshold())\nprint(\"pi_approx: \")\nprintln(@elapsed pi_approx())\n\n"
  },
  {
    "path": "swix/speed/speed.m",
    "content": "clc; clear all; close all;\n\ntic;\n% project euler 1\n    N = 1e6;\n    x = 1:N;\n    i = find( abs(mod(x, 3)) < 1e-9 & (abs(mod(x,5)) < 1e-9));\n    pe1 = toc;\n\ntic;\n% project euler 10\n    N = 2e6;\n    primes = 1:N;\n    for i=2:sqrt(N)\n        j = (2:N/i) * i;\n        primes(j) = primes(j) * 0;\n    end\n    pe10 = toc;\n\ntic;\n% project euler 73\n    N = 1e3;\n    d = 1:N;\n    [n, d] = meshgrid(d, d);\n    f = n ./ d;\n    f = unique(f);\n    i = (f > 1/3) & (f < 1/2);\n    pe73 = toc;\n\ntic;\n% soft thresholding\n    N = 1e2;\n    j = linspace(-1, 1, N);\n    [x, y] = meshgrid(j, j);\n    z = x.^2 + y.^2;\n    i = abs(z) < 0.5;\n    z(find(i))   = z(find(i)) * 0;\n    z(find(1-i)) = z(find(1-i)) - 0.5;\n    st = toc;\n\ntic;\n% pi approx\n    N = 1e6;\n    k = 0:N;\n    pi_approx = (-1).^k ./ (2*k + 1);\n    pi = toc;\n\ndisplay(pe1)\ndisplay(pe10)\ndisplay(pe73)\ndisplay(st)\ndisplay(pi)\n\n% On my machine:\n%   pe1 =\n\n%       0.1415\n\n\n%   pe10 =\n\n%       0.5141\n\n\n%   st =\n\n%       0.0105\n\n\n%   pi =\n\n%       0.0236\n\n"
  },
  {
    "path": "swix/speed/speed.py",
    "content": "from __future__ import division\nfrom pylab import *\nfrom timeit import timeit\n\n\n\ndef pe1():\n    N = 1e6\n    x = arange(N)\n    i = argwhere((abs(x%3) < 1e-9) * (abs(x%5) < 1e-9))\ndef pe10():\n    N = 2e6\n    primes = arange(N)\n    for i in arange(2, sqrt(N)):\n        j = arange(2, N/i) * i\n        j = asarray(j, dtype=int)\n        primes[j] *= 0.0\ndef pe73():\n    N = 1e3\n    d = arange(N)+1\n    n = arange(N)+1\n    n, d = meshgrid(n, d)\n\n    # setting the upper triangular to 0\n    #il1 = triu_indices(n.shape[0])\n    #n[il1] = 0\n\n    f = n / d\n    f = unique(f)\n\n    i = (f > 1/3) & (f < 1/2)\ndef soft_threshold():\n    N = 1e2\n    j = linspace(-1, 1, num=N)\n    (x, y) = meshgrid(j, j)\n    z = pow(x, 2) + pow(y, 2)\n    i = abs(z) < 0.5\n    z[argwhere(i)] *= 0\n    z[argwhere(~i)] -= 0.5\ndef pi_approx():\n    N = 1e6\n    k = arange(N, dtype=int)\n    pi_approx = 1 / (2*k + 1)\n    pi_approx[2*k[:N/2]+1] *= -1\n\nprint \"pe1_time       : \", timeit(pe1 ,number=10)\nprint \"pe10_time      : \", timeit(pe10 ,number=3)\nprint \"pe73_time      : \", timeit(pe73 ,number=1)\nprint \"st_time        : \", timeit(soft_threshold ,number=3)\nprint \"pi_approx time : \", timeit(pi_approx ,number=10)\n\n"
  },
  {
    "path": "swix/speed/speed.swift",
    "content": "//\n//  speed.swift\n//  swix\n//\n//  Created by Scott Sievert on 8/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// should be run while optimized!\nclass SpeedTests {\n    init(){\n        time(pe1, name:\"Project Euler 1\")\n        time(pe10, name:\"Project Euler 10\")\n<<<<<<< HEAD\n        time(soft_thresholding, name:\"Soft thresholding\")\n        time(pi_approx, name:\"Pi approximation\")\n=======\n        time(pi_approx, name:\"Pi approximation\")\n        time(soft_thresholding, name:\"Soft thresholding\")\n>>>>>>> dev\n    }\n}\nfunc time(f:()->(), name:String=\"function\"){\n    var start = NSDate()\n    f()\n    println(NSString(format:\"\\(name) time (s): %.4f\", -1 * start.timeIntervalSinceNow))\n}\nfunc pe1(){\n    var N = 1e6\n    var x = arange(N)\n    // seeing where that modulo is 0\n    var i = argwhere((abs(x%3) < 1e-9) || (abs(x%5) < 1e-9))\n    // println(sum(x[i]))\n    // prints 233168.0, the correct answer\n}\nfunc pe10(){\n    // find all primes\n    var N = 2e6.int\n<<<<<<< HEAD\n    var primes = arange(N)\n    for i in 2..<sqrt(N).int{\n        var max:Int = (N/i)\n        var j = arange(2, max) * i.double\n=======\n    var primes = arange(Double(N))\n    var top = (sqrt(N.double)).int\n    for i in 2 ..< top{\n        var max:Int = (N/i)\n        var j = arange(2, max.double) * i.double\n>>>>>>> dev\n        primes[j] *= 0.0\n    }\n    // sum(primes) is the correct answer\n}\nfunc soft_thresholding(){\n    let N = 1e2.int\n    var j = linspace(-1, 1, num:N)\n    var (x, y) = meshgrid(j, j)\n    var z = pow(x, 2) + pow(y, 2)\n    var i = abs(z) < 0.5\n    z[argwhere(i)] *= 0\n    z[argwhere(1-i)] -= 0.5\n}\nfunc pi_approx(){\n    var N = 1e6\n    var k = arange(N)\n    var pi_approx = 1 / (2*k + 1)\n    pi_approx[2*k[0..<(N/2).int]+1] *= -1\n    // println(4 * pi_approx)\n    // prints 3.14059265383979\n}"
  },
  {
    "path": "swix/swix/main.swift",
    "content": "//\n//  main.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n\nimport Foundation\nimport Swift\n\n_ = swixTests(run_io_tests: true)\n\n_ = swixSpeedTests()\n\nvar x = eye(3);\nvar header = [\"1\", \"2\", \"3\"]\n\nvar csv = CSVFile(data:x, header:header)\n\nlet filename = \"/tmp/test_2016.csv\"\n\nwrite_csv(csv, filename:filename)\nvar y:CSVFile = read_csv(filename, header_present:true)\n\nprint(\"\\n\")\nprint(y.data)\nprint(y.header)\n\n//imshow(x)\n"
  },
  {
    "path": "swix/swix/swix/ScalarArithmetic-bleed.swift",
    "content": "\n// from https://github.com/seivan/ScalarArithmetic/\n// bleeding as of 2014-11-8. Commit on Aug. 15th\n// commented out because compile errors. not critical to this release.\n\nimport Darwin\nimport CoreGraphics\n\n\nprotocol FloatingPointMathType {\n//  var acos:Self  {get}\n//  var asin:Self  {get}\n//  var atan:Self  {get}\n//  func atan2(x:Self) -> Self\n//  var cos:Self   {get}\n//  var sin:Self   {get}\n//  var tan:Self   {get}\n//  var exp:Self   {get}\n//  var exp2:Self  {get}\n//  var log:Self   {get}\n//  var log10:Self {get}\n//  var log2:Self  {get}\n//  func pow(exponent:Self) -> Self\n//  var sqrt:Self  {get}\n}\n\n\nextension Double :  FloatingPointMathType {\n//  var abs:Double  { return Double.abs(self)   }\n//  var acos:Double { return Darwin.acos(self)  }\n//  var asin:Double { return Darwin.asin(self)  }\n//  var atan:Double { return Darwin.atan(self)  }\n//  func atan2(x:Double) -> Double { return Darwin.atan2(self,x) }\n//  var cos:Double  { return Darwin.cos(self)   }\n//  var sin:Double  { return Darwin.sin(self)   }\n//  var tan:Double  { return Darwin.tan(self)   }\n//  var exp:Double  { return Darwin.exp(self)   }\n//  var exp2:Double { return Darwin.exp2(self)  }\n//  var log:Double  { return Darwin.log(self)   }\n//  var log10:Double{ return Darwin.log10(self) }\n//  var log2:Double { return Darwin.log2(self)  }\n//  func pow(exponent:Double)-> Double { return Darwin.pow(self, exponent) }\n//  var sqrt:Double { return Darwin.sqrt(self)  }\n  func __conversion() -> CGFloat { return CGFloat(self) }\n}\n\n\n\nprotocol ScalarFloatingPointType {\n  var toDouble:Double { get }\n  init(_ value:Double)\n}\n\nextension CGFloat : ScalarFloatingPointType, FloatingPointMathType {\n  var toDouble:Double  { return Double(self)      }\n//  var abs:CGFloat      { return self.abs  }\n//  var acos:CGFloat     { return Darwin.acos(self) }\n//  var asin:CGFloat     { return Darwin.asin(self) }\n//  var atan:CGFloat     { return Darwin.atan(self) }\n//  func atan2(x:CGFloat) -> CGFloat { return Darwin.atan2(self, x) }\n//  var cos:CGFloat      { return Darwin.cos(self)  }\n//  var sin:CGFloat      { return Darwin.sin(self)  }\n//  var tan:CGFloat      { return Darwin.tan(self)  }\n//  var exp:CGFloat      { return Darwin.exp(self)  }\n//  var exp2:CGFloat     { return Darwin.exp2(self) }\n//  var log:CGFloat      { return Darwin.log(self)  }\n//  var log10:CGFloat    { return Darwin.log10(self)}\n//  var log2:CGFloat     { return Darwin.log2(self)}\n//  func pow(exponent:CGFloat)-> CGFloat { return Darwin.pow(self, exponent) }\n//  var sqrt:CGFloat     { return Darwin.sqrt(self) }\n  func __conversion() -> Double { return Double(self) }\n}\n\nextension Float : ScalarFloatingPointType { var toDouble:Double { return Double(self)      } }\n\nprotocol ScalarIntegerType : ScalarFloatingPointType {\n   var toInt:Int { get }\n}\n\nextension Int : ScalarIntegerType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n  var toInt:Int { return Int(self) }\n\n}\nextension Int16 : ScalarIntegerType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n  var toInt:Int { return Int(self) }\n\n}\nextension Int32 : ScalarIntegerType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n  var toInt:Int { return Int(self) }\n\n}\nextension Int64 : ScalarIntegerType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n  var toInt:Int { return Int(self) }\n\n}\nextension UInt : ScalarFloatingPointType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n\n}\nextension UInt16  : ScalarFloatingPointType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n\n}\nextension UInt32 : ScalarFloatingPointType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n}\nextension UInt64 : ScalarFloatingPointType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n\n}\n\n\n\n\n\nfunc + <T:ScalarIntegerType>(lhs:T, rhs:Int) -> Int { return lhs + rhs }\nfunc + <T:ScalarIntegerType>(lhs:Int, rhs:T) -> Int { return lhs + rhs.toInt }\n\nfunc - <T:ScalarIntegerType>(lhs:T, rhs:Int) -> Int { return lhs.toInt - rhs }\nfunc - <T:ScalarIntegerType>(lhs:Int, rhs:T) -> Int { return lhs - rhs.toInt }\n\nfunc * <T:ScalarIntegerType>(lhs:T, rhs:Int) -> Int { return lhs.toInt * rhs }\nfunc * <T:ScalarIntegerType>(lhs:Int, rhs:T) -> Int { return lhs * rhs.toInt }\n\nfunc / <T:ScalarIntegerType>(lhs:T, rhs:Int) -> Int { return lhs.toInt / rhs }\nfunc / <T:ScalarIntegerType>(lhs:Int, rhs:T) -> Int { return lhs / rhs.toInt }\n\n\n\n//Equality T<===>T\nfunc == <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:U,rhs:T) -> Bool { return (lhs.toDouble == rhs.toDouble) }\nfunc == <T:ScalarFloatingPointType> (lhs:Double,rhs:T) -> Bool { return (lhs == rhs.toDouble) }\nfunc == <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs.toDouble == rhs) }\n\nfunc != <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:U,rhs:T) -> Bool { return (lhs.toDouble == rhs.toDouble) == false }\nfunc != <T:ScalarFloatingPointType> (lhs:Double,rhs:T) -> Bool { return (lhs == rhs.toDouble) == false }\nfunc != <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs.toDouble == rhs) == false }\n\nfunc <= <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:T,rhs:U) -> Bool { return (lhs.toDouble <= rhs.toDouble) }\nfunc <= <T:ScalarFloatingPointType> (lhs:Double, rhs:T) -> Bool { return (lhs <= rhs.toDouble) }\nfunc <= <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs.toDouble <= rhs) }\n\nfunc < <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:T,rhs:U) -> Bool { return (lhs.toDouble <  rhs.toDouble) }\nfunc < <T:ScalarFloatingPointType> (lhs:Double, rhs:T) -> Bool { return (lhs <  rhs.toDouble) }\nfunc < <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs.toDouble <  rhs) }\n\nfunc >  <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:T,rhs:U) -> Bool { return (lhs <= rhs) == false }\nfunc >  <T:ScalarFloatingPointType> (lhs:Double, rhs:T) -> Bool { return (lhs <= rhs) == false}\nfunc >  <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs <= rhs) == false }\n\nfunc >= <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:T,rhs:U) -> Bool { return (lhs < rhs) == false }\nfunc >= <T:ScalarFloatingPointType> (lhs:Double, rhs:T) -> Bool { return (lhs < rhs) == false }\nfunc >= <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs < rhs) == false }\n\n\n\n//SUBTRACTION\nfunc - <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:U, rhs:T) -> Double  {return (lhs.toDouble - rhs.toDouble) }\nfunc - <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> T  { return T(lhs - rhs.toDouble) }\nfunc - <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> T  { return T(lhs.toDouble - rhs) }\nfunc - <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> Double  { return (lhs - rhs.toDouble) }\nfunc - <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> Double  { return (lhs.toDouble - rhs) }\nfunc -= <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:inout T, rhs:U) { lhs = T(lhs.toDouble - rhs.toDouble) }\nfunc -= <T:ScalarFloatingPointType>(lhs:inout Double, rhs:T)  { lhs = lhs - rhs.toDouble }\n\n//ADDITION\nfunc + <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:U, rhs:T) -> Double  {return (lhs.toDouble + rhs.toDouble) }\nfunc + <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> T  { return T(lhs + rhs.toDouble) }\nfunc + <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> T  { return T(lhs.toDouble + rhs) }\nfunc + <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> Double  { return (lhs + rhs.toDouble) }\nfunc + <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> Double  { return (lhs.toDouble + rhs) }\nfunc += <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:inout T, rhs:U) { lhs = T(lhs.toDouble + rhs.toDouble) }\nfunc += <T:ScalarFloatingPointType>(lhs:inout Double, rhs:T)  { lhs = lhs + rhs.toDouble }\n\n//MULTIPLICATION\nfunc * <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:U, rhs:T) -> Double  {return (lhs.toDouble * rhs.toDouble) }\nfunc * <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> T  { return T(lhs * rhs.toDouble) }\nfunc * <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> T  { return T(lhs.toDouble * rhs) }\nfunc * <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> Double  { return (lhs * rhs.toDouble) }\nfunc * <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> Double  { return (lhs.toDouble * rhs) }\nfunc *= <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:inout T, rhs:U) { lhs = T(lhs.toDouble * rhs.toDouble) }\nfunc *= <T:ScalarFloatingPointType>(lhs:inout Double, rhs:T)  { lhs = lhs * rhs.toDouble }\n\n//DIVISION\nfunc / <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:U, rhs:T) -> Double  {return (lhs.toDouble / rhs.toDouble) }\nfunc / <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> T  { return T(lhs / rhs.toDouble) }\nfunc / <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> T  { return T(lhs.toDouble / rhs) }\nfunc / <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> Double  { return (lhs / rhs.toDouble) }\nfunc / <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> Double  { return (lhs.toDouble / rhs) }\nfunc /= <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:inout T, rhs:U) { lhs = T(lhs.toDouble / rhs.toDouble) }\nfunc /= <T:ScalarFloatingPointType>(lhs:inout Double, rhs:T)  { lhs = lhs / rhs.toDouble }\n\n\n"
  },
  {
    "path": "swix/swix/swix/imshow.py",
    "content": "from __future__ import division\nimport pylab as p\nfrom pandas import read_csv\nimport sys\n\n\"\"\"\nUsage: python imshow.py filename.png shouldSave shouldShow\n\"\"\"\n\ndef str2bool(string):\n    \"\"\" \n    Only true if string is one of \"yes\", \"true\", \"t\", \"1\". Returns false\n    otherwise.\n    \"\"\"\n    return string.lower() in (\"yes\", \"true\", \"t\", \"1\")\n\nfilename = sys.argv[1]\nshouldSave = str2bool(sys.argv[2])\nshouldShow = str2bool(sys.argv[3])\n\nx = read_csv(\"temp.csv\", header=None)\nx = p.asarray(x)\n\np.figure()\np.imshow(x, interpolation='nearest')\np.tight_layout()\np.colorbar()\n\nif shouldShow: p.show()\nif shouldSave: p.savefig('../'+filename, dpi=300)\n"
  },
  {
    "path": "swix/swix/swix/io.swift",
    "content": "//\n//  io.swift\n//  swix\n//\n//  Created by Scott Sievert on 11/7/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// vector binary\nfunc write_binary(_ x:vector, filename:String){\n    let N = x.n\n    let data = Data(bytes: x.grid, count:N*MemoryLayout<Double>.size)\n    try? data.write(to: URL(fileURLWithPath: filename), options: [])\n}\nfunc read_binary(_ filename:String) -> vector{\n    let read = try? Data(contentsOf: URL(fileURLWithPath: filename))\n    try? read?.write(to:URL(fileURLWithPath:filename+\"x\"), options:[])\n    let l:Int! = read?.count\n    let sD:Int = MemoryLayout<Double>.size\n    let count = (l.double / sD.double)\n    \n    let y = zeros(count.int)\n    (read as NSData?)?.getBytes(!y, length: count.int*MemoryLayout<Double>.size)\n    return y\n}\n\n// matrix binary\nfunc write_binary(_ x:matrix, filename:String){\n    let y = concat(array(x.shape.0.double, x.shape.1.double), y: x.flat)\n    write_binary(y, filename:filename)\n}\nfunc read_binary(_ filename:String)->matrix{\n    var a:vector = read_binary(filename)\n    let (w, h) = (a[0], a[1])\n    return reshape(a[2..<a.n], shape: (w.int,h.int))\n}\n\n// vector csv\nfunc write_csv(_ x:vector, filename:String){\n    // write the array to CSV\n    var seperator=\",\"\n    var str = \"\"\n    for i in 0..<x.n{\n        seperator = i == x.n-1 ? \"\" : \",\"\n        str += String(format: \"\\(x[i])\"+seperator)\n    }\n    str += \"\\n\"\n    do {\n        try str.write(toFile: filename, atomically: false, encoding: String.Encoding.utf8)\n    } catch {\n        Swift.print(\"File probably wasn't recognized\")\n    }\n    \n}\nfunc read_csv(_ filename:String) -> vector{\n    var x: String?\n    do {\n        x = try String(contentsOfFile: filename, encoding: String.Encoding.utf8)\n    } catch _ {\n        x = nil\n    }\n    var array:[Double] = []\n    var columns:Int = 0\n    var z = x!.components(separatedBy: \",\")\n    columns = 0\n    for i in 0..<z.count{\n        let num = z[i]\n        array.append(num.doubleValue)\n        columns += 1\n    }\n    var done = zeros(1 * columns)\n    done.grid = array\n    return done\n}\n\nclass CSVFile{\n    var data: matrix\n    var header: [String]\n    init(data: matrix, header: [String]){\n        self.data = data\n        self.header = header\n    }\n}\n\n// for matrix csv\nfunc read_csv(_ filename:String, header_present:Bool=true, _ rowWithoutMissingValues: Int=1) -> CSVFile{\n    var x: String?\n    do {\n        x = try String(contentsOfFile: filename, encoding: String.Encoding.utf8)\n    } catch _ {\n        x = nil\n    }\n    //There are three types of line breaks: \\r, \\n and \\r\\n. All change to \\n.\n    x=x!.replacingOccurrences(of: \"\\r\\n\",with: \"\\n\")  //Remove \\r if \\r\\n\n    x=x!.replacingOccurrences(of: \"\\r\",with: \"\\n\")  //Change \\r if there is any\n    var y = x!.components(separatedBy: \"\\n\")\n    let rows = y.count-1\n    var array:[Double] = []\n    var columns:Int = 0\n    var startrow:Int = 0    //The first row of the data\n    if (header_present) { startrow = 1 }\n    \n    var categorical_col:[Int]=[]    //Record the columns which are categorical variables\n\n    let test = y[rowWithoutMissingValues + startrow - 1].components(separatedBy: \",\") //Use first row to detect which columns are categorical\n    categorical_col = Array(repeating: -1, count: test.count)\n    columns=0\n    for testtext in test{\n        if(Double(testtext) == nil){\n        categorical_col[columns]=0    //If column j is categorical, then categorical_col[j] = 0; otherwise -1.\n        }\n        columns=columns+1\n    }\n    var factor = [String:Int]() //Dictionary to map categorical levels -> integer\n    var levels = Set<String>()  //Set to store all categorical levels\n    for i in startrow..<rows{\n        let z = y[i].components(separatedBy: \",\")\n        columns = 0\n        for text in z{\n            if(Double(text) != nil)\n            {\n                array.append(Double(text)!)\n            }\n            else\n            {\n                let name=String(columns)+text   //In case two columns have same categorical levels, we add prefix\n                if(levels.contains(name))\n                {\n                    array.append(Double(factor[name]!)) //If in this column we have already seen this level, then use it\n                }\n                else{   //Otherwise, we add a level to this column\n                    factor[name]=categorical_col[columns]\n                    levels.insert(name)\n                    categorical_col[columns]=categorical_col[columns]+1 //Each column will record how many levels it has already encountered.\n                    array.append(Double(factor[name]!))\n                }\n            }\n            columns += 1\n        }\n    }\n    \n    var done = zeros((rows - startrow, columns))\n    \n    done.flat.grid = array\n    \n    if (header_present==true){\n        return CSVFile(data: done, header: y[0].components(separatedBy: \",\"))\n    }\n    else{\n         return CSVFile(data: done, header: [\"\"])\n    }\n}\n\nfunc write_csv(_ csv:CSVFile, filename:String){\n    write_csv(csv.data, filename:filename, header:csv.header)\n}\n\nfunc write_csv(_ x:matrix, filename:String, header:[String] = [\"\"]){\n    var seperator=\",\"\n    var str = \"\"\n    var i:Int=1\n    if (header != [\"\"]){\n        for vname in header{\n            if(i<header.count){\n                str=str+vname+\",\"\n                i=i+1\n            }\n            else{\n                str=str+vname+\"\\n\"\n            }\n        }\n    }\n    for i in 0..<x.shape.0{\n        for j in 0..<x.shape.1{\n            seperator = j == x.shape.1-1 ? \"\" : \",\"\n            str += String(format: \"\\(x[i, j])\"+seperator)\n        }\n        str += \"\\n\"\n    }\n    do {\n        try str.write(toFile: filename, atomically: false, encoding: String.Encoding.utf8)\n    } catch {\n        Swift.print(\"Error writing to CSV: filename probably wasn't recognized.\")\n    }\n}\n\n"
  },
  {
    "path": "swix/swix/swix/machine_learning/machine_learning.swift",
    "content": "//\n//  svm.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/16/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\nclass SVM {\n    // swift --> objc --> objc++ --> c++\n    var cvsvm:cvSVM;\n    var svm_type:String\n    var kernel_type:String\n    var N:Int\n    var M:Int\n    init(){\n        self.cvsvm = cvSVM()\n        \n        \n        self.N = -1\n        self.M = -1\n        \n        // with linear svc results, we closely match (and do slightly better than) sk-learn\n        self.svm_type = \"C_SVC\"\n        self.kernel_type = \"LINEAR\"\n        setParams(svm_type, kernel_type:kernel_type)\n    }\n    func setParams(_ svm_type:String, kernel_type:String, nu:Float=0.5){\n        // kernel: LINEAR, SIGMOID\n        // svm_type: C_SVC, ONE_CLASS, NU_SVC, NU_SVR\n        \n        // careful: NU_SVR and SIGMOID throws an exception error\n        self.cvsvm.setParams(svm_type.nsstring as String, kernel:kernel_type.nsstring as String, nu:nu.cfloat)\n    }\n    func train(_ responses: matrix, _ targets: vector){\n        // convert matrix2d to NSArray\n        self.M = responses.shape.0\n        self.N = responses.shape.1\n        self.cvsvm.train(!responses, targets:!targets, m:self.M.cint, n:self.N.cint)\n    }\n    func predict(_ response: vector) -> Double{\n        assert(self.N == response.count, \"Sizes of input arguments do not match: predict.count != trained.count. The varianbles you're trying to predict a result from must match variables you trained off of.\")\n        let tp = self.cvsvm.predict(!response, n:self.N.cint)\n        return tp.double\n    }\n    func predict(_ responses: matrix) -> vector{\n        let y = zeros(responses.shape.0)\n        assert(self.N == responses.shape.1, \"Sizes must match\")\n        self.cvsvm.predict(!responses, into:!y, m:responses.shape.0.cint, n:responses.shape.1.cint);\n        return y\n    }\n}\nclass kNearestNeighbors{\n    // finds the nearest neighbor over all points. if want to change, dive into knn.mm and change `int k = cvknn.get_max_k();` in `predict(...)`\n    var T:Double\n    var knn:kNN;\n    var N:Int; // variables\n    var M:Int; // responses\n    init(){\n        assert(false, \"Careful! My simple tests failed but it looks like it should work.\")\n        self.T = 1\n        self.knn = kNN()\n        self.N = -1\n        self.M = -1\n    }\n    func train(_ responses: matrix, targets: vector){\n        self.M = responses.shape.0\n        self.N = responses.shape.1\n        \n        self.knn.train(!responses, targets: !targets, m:self.M.cint, n:self.N.cint)\n        \n    }\n    func predict(_ x: vector, k: Int) -> Double{\n        assert(self.N == x.count, \"Sizes of input arguments do not match: predict.count != trained.count. The varianbles you're trying to predict a result from must match variables you trained off of.\")\n        assert(k <= 32, \"k <= 32 for performance reasons enforced by OpenCV.\")\n        let result = self.knn.predict(!x, n:x.n.cint, k:k.cint)\n        return result.double;\n    }\n}\n\n"
  },
  {
    "path": "swix/swix/swix/matrix/m-complex-math.swift",
    "content": "//\n//  twoD-complex-math.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/15/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Swift\nimport Accelerate\n\nfunc rank(_ x:matrix)->Double{\n    let (_, S, _) = svd(x, compute_uv:false)\n    let m:Double = (x.shape.0 < x.shape.1 ? x.shape.1 : x.shape.0).double\n    let tol = S.max() * m * DOUBLE_EPSILON\n    return sum(S > tol)\n}\nfunc dot(_ x: matrix, y: matrix) -> matrix{\n    return x.dot(y)\n}\nfunc dot(_ A: matrix, x: vector) -> vector{\n    return A.dot(x)\n}\nfunc svd(_ x: matrix, compute_uv:Bool=true) -> (matrix, vector, matrix){\n    let (m, n) = x.shape\n    let nS = m < n ? m : n // number singular values\n    let sigma = zeros(nS)\n    let vt = zeros((n,n))\n    var u = zeros((m,m))\n\n    var xx = zeros_like(x)\n    xx.flat = x.flat\n    xx = xx.T\n    let c_uv:CInt = compute_uv==true ? 1 : 0\n    svd_objc(!xx, m.cint, n.cint, !sigma, !vt, !u, c_uv)\n    \n    // to get the svd result to match Python\n    let v = transpose(vt)\n    u = transpose(u)\n\n    return (u, sigma, v)\n}\nfunc pinv(_ x:matrix)->matrix{\n    var (u, s, v) = svd(x)\n    let m = u.shape.0\n    let n = v.shape.1\n    let ma = m < n ? n : m\n    let cutoff = DOUBLE_EPSILON * ma.double * max(s)\n    let i = s > cutoff\n    let ipos = argwhere(i)\n    s[ipos] = 1 / s[ipos]\n    let ineg = argwhere(1-i)\n    s[ineg] = zeros_like(ineg)\n    var z = zeros((n, m))\n    z[\"diag\"] = s\n    let res = v.T.dot(z).dot(u.T)\n    return res\n}\nfunc inv(_ x: matrix) -> matrix{\n    assert(x.shape.0 == x.shape.1, \"To take an inverse of a matrix, the matrix must be square. If you want the inverse of a rectangular matrix, use psuedoinverse.\")\n    let y = x.copy()\n    let (M, N) = x.shape\n    \n    var ipiv:Array<__CLPK_integer> = Array(repeating: 0, count: M*M)\n    var lwork:__CLPK_integer = __CLPK_integer(N*N)\n//    var work:[CDouble] = [CDouble](count:lwork, repeatedValue:0)\n    var work = [CDouble](repeating: 0.0, count: Int(lwork))\n    var info:__CLPK_integer=0\n    var nc = __CLPK_integer(N)\n    dgetrf_(&nc, &nc, !y, &nc, &ipiv, &info)\n    dgetri_(&nc, !y, &nc, &ipiv, &work, &lwork, &info)\n    return y\n}\nfunc solve(_ A: matrix, b: vector) -> vector{\n    let (m, n) = A.shape\n    assert(b.n == m, \"Ax = b, A.rows == b.n. Sizes must match which makes sense mathematically\")\n    assert(n == m, \"Matrix must be square -- dictated by OpenCV\")\n    let x = zeros(n)\n    CVWrapper.solve(!A, b:!b, x:!x, m:m.cint, n:n.cint)\n    return x\n}\nfunc eig(_ x: matrix)->vector{\n    // matrix, value, vectors\n    let (m, n) = x.shape\n    assert(m == n, \"Input must be square\")\n    \n    let value_real = zeros(m)\n    let value_imag = zeros(n)\n    var vector = zeros((n,n))\n    \n    var work:[Double] = Array(repeating: 0.0, count: n*n)\n    var lwork = __CLPK_integer(4 * n)\n    var info = __CLPK_integer(1)\n    \n    // don't compute right or left eigenvectors\n    let job = \"N\"\n    var jobvl = (job.cString(using: String.Encoding.utf8)?[0])!\n    var jobvr = (job.cString(using: String.Encoding.utf8)?[0])!\n    \n    work[0] = Double(lwork)\n    var nc = __CLPK_integer(n)\n    dgeev_(&jobvl, &jobvr, &nc, !x, &nc,\n        !value_real, !value_imag, !vector, &nc, !vector, &nc,\n        &work, &lwork, &info)\n    \n    vector = vector.T\n    \n    return value_real\n}\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/matrix/m-helper-functions.swift",
    "content": "//\n//  helper-functions.swift\n//  swix\n//\n//  Created by Scott Sievert on 8/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// NORMs\nfunc norm(_ x:matrix, ord:String=\"assumed to be 'fro' for Frobenius\")->Double{\n    if ord == \"fro\" {return norm(x.flat, ord:2)}\n    assert(false, \"Norm type assumed to be \\\"fro\\\" for Forbenius norm!\")\n    return -1\n}\nfunc norm(_ x:matrix, ord:Double=2)->Double{\n    if      ord ==  inf {return max(sum(abs(x), axis:1))}\n    else if ord == -inf {return min(sum(abs(x), axis:1))}\n    else if ord ==  1   {return max(sum(abs(x), axis:0))}\n    else if ord == -1   {return min(sum(abs(x), axis:0))}\n    else if ord ==  2 {\n        // compute only the largest singular value?\n        let (_, s, _) = svd(x, compute_uv:false)\n        return s[0]\n    }\n    else if ord == -2 {\n        // compute only the smallest singular value?\n        let (_, s, _) = svd(x, compute_uv:false)\n        return s[-1]\n    }\n    \n    assert(false, \"Invalid norm for matrices\")\n    return -1\n}\n\nfunc det(_ x:matrix)->Double{\n    var result:CDouble = 0.0\n    CVWrapper.det(!x, n:x.shape.0.cint, m:x.shape.1.cint, result:&result)\n    return result\n}\n\n// basics\nfunc argwhere(_ idx: matrix) -> vector{\n    return argwhere(idx.flat)\n}\nfunc flipud(_ x:matrix)->matrix{\n    let y = x.copy()\n    CVWrapper.flip(!x, into:!y, how:\"ud\", m:x.shape.0.cint, n:x.shape.1.cint)\n    return y\n}\nfunc fliplr(_ x:matrix)->matrix{\n    let y = x.copy()\n    CVWrapper.flip(!x, into:!y, how:\"lr\", m:x.shape.0.cint, n:x.shape.1.cint)\n    return y\n}\nfunc rot90(_ x:matrix, k:Int=1)->matrix{\n    // k is assumed to be less than or equal to 3\n    let y = x.copy()\n    if k == 1 {return fliplr(x).T}\n    if k == 2 {return flipud(fliplr(y))}\n    if k == 3 {return flipud(x).T}\n    assert(false, \"k is assumed to satisfy 1 <= k <= 3\")\n    return y\n}\n\n// modifying matrices, modifying equations\nfunc transpose (_ x: matrix) -> matrix{\n    let m = x.shape.1\n    let n = x.shape.0\n    let y = zeros((m, n))\n    vDSP_mtransD(!x, 1.stride, !y, 1.stride, m.length, n.length)\n    return y\n}\nfunc kron(_ A:matrix, B:matrix)->matrix{\n    // an O(n^4) operation!\n    func assign_kron_row(_ A:matrix, B:matrix,C:inout matrix, p:Int, m:Int, m_max:Int){\n        var row = (m+0)*(p+0) + p-0\n        row = m_max*m + 1*p\n        \n        let i = arange(B.shape.1 * A.shape.1)\n        let n1 = arange(A.shape.1)\n        let q1 = arange(B.shape.1)\n        let (n, q) = meshgrid(n1, y: q1)\n        C[row, i] = A[m, n.flat] * B[p, q.flat]\n    }\n    var C = zeros((A.shape.0*B.shape.0, A.shape.1*B.shape.1))\n    for p in 0..<A.shape.1{\n        for m in 0..<B.shape.1{\n            assign_kron_row(A, B: B, C: &C, p: p, m: m, m_max: A.shape.1)\n        }\n    }\n    \n    return C\n}\n\nfunc tril(_ x: matrix) -> vector{\n    let (m, n) = x.shape\n    let (mm, nn) = meshgrid(arange(m), y: arange(n))\n    var i = mm - nn\n    let j = (i < 0+S2_THRESHOLD)\n    i[argwhere(j)] <- 0\n    i[argwhere(1-j)] <- 1\n    return argwhere(i)\n}\nfunc triu(_ x: matrix)->vector{\n    let (m, n) = x.shape\n    let (mm, nn) = meshgrid(arange(m), y: arange(n))\n    var i = mm - nn\n    let j = (i > 0-S2_THRESHOLD)\n    i[argwhere(j)] <- 0\n    i[argwhere(1-j)] <- 1\n    return argwhere(i)\n}\n\n// PRINTING\nfunc println(_ x: matrix, prefix:String=\"matrix([\", postfix:String=\"])\", newline:String=\"\\n\", format:String=\"%.3f\", printWholeMatrix:Bool=false){\n    print(prefix, terminator: \"\")\n    var pre:String\n    var post:String\n    var printedSpacer = false\n    for i in 0..<x.shape.0{\n        // pre and post nice -- internal variables\n        if i==0 {pre = \"\"}\n        else {pre = \"        \"}\n        if i==x.shape.0-1 {post=postfix}\n        else {post = \"],\"}\n        \n        if printWholeMatrix || x.shape.0 < 16 || i<4-1 || i>x.shape.0-4{\n            print(x[i, 0..<x.shape.1], prefix:pre, postfix:post, format: format, printWholeMatrix:printWholeMatrix)\n        }\n        else if printedSpacer==false{\n            printedSpacer=true\n            Swift.print(\"        ...,\")\n        }\n    }\n    print(newline, terminator: \"\")\n}\nfunc max(_ x: matrix, axis:Int = -1)->Double{\n    return x.max()\n}\nfunc min(_ x: matrix, axis:Int = -1)->Double{\n    return x.min()\n}\nfunc print(_ x: matrix, prefix:String=\"matrix([\", postfix:String=\"])\", newline:String=\"\\n\", format:String=\"%.3f\", printWholeMatrix:Bool=false){\n    println(x, prefix:prefix, postfix:postfix, newline:\"\", format:format, printWholeMatrix:printWholeMatrix)\n}\n"
  },
  {
    "path": "swix/swix/swix/matrix/m-image.swift",
    "content": "//\n//  twoD-image.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/30/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n/* \n *   some other useful tips that need an iOS app to use:\n *    1. UIImage to raw array[0]:\n *    2. raw array to UIImage[1]:\n *  \n *   for a working implementation, see[2] (to be published shortly)\n *  \n *   [0]:http://stackoverflow.com/a/1262893/1141256\n *   [1]:http://stackoverflow.com/a/12868860/1141256\n *   [2]:https://github.com/scottsievert/saliency/blob/master/AVCam/AVCam/saliency/imageToRawArray.m\n *\n *\n */\n\nimport Foundation\n//import UIKit // for iOS use\n//import CoreGraphics // possibly needed for iOS use\n\nfunc rgb2hsv_pixel(_ R:Double, G:Double, B:Double)->(Double, Double, Double){\n    // tested against wikipedia/HSL_and_HSV. returns (H, S_hsv, V)\n    let M = max(array(R, G, B))\n    let m = min(array(R, G, B))\n    let C = M - m\n    var Hp:Double = 0\n    if      M==R {Hp = ((G-B)/C).truncatingRemainder(dividingBy: 6)}\n    else if M==G {Hp = ((B-R)/C) + 2}\n    else if M==B {Hp = ((R-G)/C) + 4}\n    let H = 60 * Hp\n    let V = M\n    var S = 0.0\n    if !(V==0) {S = C/V}\n    \n    return (H, S, V)\n}\n\n\nfunc rgb2hsv(_ r:matrix, g:matrix, b:matrix)->(matrix, matrix, matrix){\n    assert(r.shape.0 == g.shape.0)\n    assert(b.shape.0 == g.shape.0)\n    assert(r.shape.1 == g.shape.1)\n    assert(b.shape.1 == g.shape.1)\n    var h = zeros_like(r)\n    var s = zeros_like(g)\n    var v = zeros_like(b)\n    for i in 0..<r.shape.0{\n        for j in 0..<r.shape.1{\n            let (h_p, s_p, v_p) = rgb2hsv_pixel(r[i,j], G: g[i,j], B: b[i,j])\n            h[i,j] = h_p\n            s[i,j] = s_p\n            v[i,j] = v_p\n        }\n    }\n    return (h, s, v)\n}\nfunc rgb2_hsv_vplane(_ r:matrix, g:matrix, b:matrix)->matrix{\n    return max(max(r, y: g), y: b)\n}\n\n\nfunc savefig(_ x:matrix, filename:String, save:Bool=true, show:Bool=false){\n    // assumes Python is on your $PATH and pylab/etc are installed\n    // prefix should point to the swix folder!\n    // prefix is defined in numbers.swift\n    // assumes python is on your path\n    print(\"savefig: Saving CSV file to \" + S2_PREFIX + \"temp.csv\")\n    write_csv(x, filename:S2_PREFIX + \"temp.csv\")\n    Process.launchedProcess(launchPath: \"cd\", arguments: [S2_PREFIX+\";\",  PYTHON_PATH,  \"imshow.py\", filename, \"\\(save)\", \"\\(show)\"])\n    print(\"savefig: Removing CSV FILE \" + S2_PREFIX + \"temp.csv\")\n  Process.launchedProcess(launchPath: \"rm\", arguments: [S2_PREFIX+\"temp.csv\"])\n}\nfunc imshow(_ x: matrix){\n    savefig(x, filename: \"junk\", save:false, show:true)\n}\n\n//func UIImageToRGBA(image:UIImage)->(matrix, matrix, matrix, matrix){\n//    // returns red, green, blue and alpha channels\n//    \n//    // init'ing\n//    var imageRef = image.CGImage\n//    var width = CGImageGetWidth(imageRef)\n//    var height = CGImageGetHeight(imageRef)\n//    var colorSpace = CGColorSpaceCreateDeviceRGB()\n//    var bytesPerPixel = 4\n//    var bytesPerRow:UInt = UInt(bytesPerPixel) * UInt(width)\n//    var bitsPerComponent:UInt = 8\n//    var pix = Int(width) * Int(height)\n//    var count:Int = 4*Int(pix)\n//    \n//    // pulling the color out of the image\n//    var rawData = UnsafeMutablePointer<UInt8>.alloc(4 * width * height)\n//    var temp = CGImageAlphaInfo.PremultipliedLast.rawValue\n//    var bitmapInfo = CGBitmapInfo(rawValue:temp)\n//    var context = CGBitmapContextCreate(rawData, Int(width), Int(height), Int(bitsPerComponent), Int(bytesPerRow), colorSpace, temp)\n//    CGContextDrawImage(context, CGRectMake(0,0,CGFloat(width), CGFloat(height)), imageRef)\n//    \n//    \n//    // unsigned char to double conversion\n//    var rawDataArray = zeros(count)-1\n//    vDSP_vfltu8D(rawData, 1.stride, !(rawDataArray), 1, count.length)\n//    \n//    // pulling the RGBA channels out of the color\n//    var i = arange(pix)\n//    var r = zeros((Int(height), Int(width)))-1;\n//    r.flat = rawDataArray[4*i+0]\n//    \n//    var g = zeros((Int(height), Int(width)));\n//    g.flat = rawDataArray[4*i+1]\n//    \n//    var b = zeros((Int(height), Int(width)));\n//    b.flat = rawDataArray[4*i+2]\n//    \n//    var a = zeros((Int(height), Int(width)));\n//    a.flat = rawDataArray[4*i+3]\n//    return (r, g, b, a)\n//}\n//func RGBAToUIImage(r:matrix, g:matrix, b:matrix, a:matrix)->UIImage{\n//    // might be useful! [1]\n//    // [1]:http://stackoverflow.com/questions/30958427/pixel-array-to-uiimage-in-swift\n//    // setup\n//    var height = r.shape.0\n//    var width = r.shape.1\n//    var area = height * width\n//    var componentsPerPixel = 4 // rgba\n//    var compressedPixelData = zeros(4*area)\n//    var N = width * height\n//    \n//    // double to unsigned int\n//    var i = arange(N)\n//    compressedPixelData[4*i+0] = r.flat\n//    compressedPixelData[4*i+1] = g.flat\n//    compressedPixelData[4*i+2] = b.flat\n//    compressedPixelData[4*i+3] = a.flat\n//    var pixelData:[CUnsignedChar] = Array(count:area*componentsPerPixel, repeatedValue:0)\n//    vDSP_vfixu8D(&compressedPixelData.grid, 1, &pixelData, 1, vDSP_Length(componentsPerPixel*area))\n//    \n//    // creating the bitmap context\n//    var colorSpace = CGColorSpaceCreateDeviceRGB()\n//    var bitsPerComponent = 8\n//    var bytesPerRow = ((bitsPerComponent * width) / 8) * componentsPerPixel\n//    var temp = CGImageAlphaInfo.PremultipliedLast.rawValue\n//    var bitmapInfo = CGBitmapInfo(rawValue:temp)\n//    var context = CGBitmapContextCreate(&pixelData, Int(width), Int(height), Int(bitsPerComponent), Int(bytesPerRow), colorSpace, temp)\n//    \n//    // creating the image\n//    var toCGImage = CGBitmapContextCreateImage(context)!\n//    var image:UIImage = UIImage.init(CGImage:toCGImage)\n//    return image\n//}\n//func resizeImage(image:UIImage, shape:(Int, Int)) -> UIImage{\n//    // nice variables\n//    var (height, width) = shape\n//    var cgSize = CGSizeMake(CGFloat(width), CGFloat(height))\n//    \n//    // draw on new CGSize\n//    UIGraphicsBeginImageContextWithOptions(cgSize, false, 0.0)\n//    image.drawInRect(CGRectMake(CGFloat(0), CGFloat(0), CGFloat(width), CGFloat(height)))\n//    var newImage = UIGraphicsGetImageFromCurrentImageContext()\n//    UIGraphicsEndImageContext()\n//    return newImage\n//}\n"
  },
  {
    "path": "swix/swix/swix/matrix/m-initing.swift",
    "content": "//\n//  twoD-initing.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\n\nfunc zeros(_ shape: (Int, Int)) -> matrix{\n    return matrix(columns: shape.1, rows: shape.0)\n}\nfunc zeros_like(_ x: matrix) -> matrix{\n    let y:matrix = zeros((x.shape.0, x.shape.1))\n    return y\n}\nfunc ones_like(_ x: matrix) -> matrix{\n    return zeros_like(x) + 1\n}\nfunc ones(_ shape: (Int, Int)) -> matrix{\n    return zeros(shape)+1\n}\nfunc eye(_ N: Int) -> matrix{\n    return diag(ones(N))\n}\nfunc diag(_ x:vector)->matrix{\n    var y = zeros((x.n, x.n))\n    y[\"diag\"] = x\n    return y\n}\nfunc randn(_ N: (Int, Int), mean: Double=0, sigma: Double=1) -> matrix{\n    var x = zeros(N)\n    let y = randn(N.0 * N.1, mean:mean, sigma:sigma)\n    x.flat = y\n    return x\n}\nfunc rand(_ N: (Int, Int)) -> matrix{\n    var x = zeros(N)\n    let y = rand(N.0 * N.1)\n    x.flat = y\n    return x\n}\nfunc reshape(_ x: vector, shape:(Int, Int))->matrix{\n    return x.reshape(shape)\n}\nfunc meshgrid(_ x: vector, y:vector) -> (matrix, matrix){\n    assert(x.n > 0 && y.n > 0, \"If these matrices are empty meshgrid fails\")\n    let z1 = reshape(`repeat`(y, N: x.n), shape: (x.n, y.n))\n    let z2 = reshape(`repeat`(x, N: y.n, axis: 1), shape: (x.n, y.n))\n    return (z2, z1)\n}\n\n\n/// array(\"1 2 3; 4 5 6; 7 8 9\") works like matlab. note that string format has to be followed to the dot. String parsing has bugs; I'd use arange(9).reshape((3,3)) or something similar\nfunc array(_ matlab_like_string: String)->matrix{\n    let mls = matlab_like_string\n    var rows = mls.components(separatedBy: \";\")\n    let r = rows.count\n    var c = 0\n    for char in rows[0].characters{\n        if char == \" \" {}\n        else {c += 1}\n    }\n    var x = zeros((r, c))\n    var start:Int\n    var i:Int=0, j:Int=0\n    for row in rows{\n        var nums = row.components(separatedBy: CharacterSet.whitespaces)\n        if nums[0] == \"\"{start=1}\n        else {start=0}\n        j = 0\n        for n in start..<nums.count{\n            x[i, j] = nums[n].floatValue.double\n            j += 1\n        }\n        i += 1\n    }\n    return x\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/matrix/m-matrix.swift",
    "content": "//\n//  matrix2d.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\nstruct matrix {\n    let n: Int\n    var rows: Int\n    var columns: Int\n    var count: Int\n    var shape: (Int, Int)\n    var flat:vector\n    var T:matrix {return transpose(self)}\n    var I:matrix {return inv(self)}\n    var pI:matrix {return pinv(self)}\n    init(columns: Int, rows: Int) {\n        self.n = rows * columns\n        self.rows = rows\n        self.columns = columns\n        self.shape = (rows, columns)\n        self.count = n\n        self.flat = zeros(rows * columns)\n        \n    }\n    func copy()->matrix{\n        var y = zeros_like(self)\n        y.flat = self.flat.copy()\n        return y\n    }\n    subscript(i: String) -> vector {\n        get {\n            assert(i == \"diag\", \"Currently the only support x[string] is x[\\\"diag\\\"]\")\n            let size = rows < columns ? rows : columns\n            let i = arange(size)\n            return self[i*columns.double + i]\n        }\n        set {\n            assert(i == \"diag\", \"Currently the only support x[string] is x[\\\"diag\\\"]\")\n            let m = shape.0\n            let n = shape.1\n            let min_mn = m < n ? m : n\n            let j = n.double * arange(min_mn)\n            self[j + j/n.double] = newValue\n        }\n    }\n    func indexIsValidForRow(_ r: Int, c: Int) -> Bool {\n        return r >= 0 && r < rows && c>=0 && c < columns\n    }\n    func dot(_ y: matrix) -> matrix{\n        let (Mx, Nx) = self.shape\n        let (My, Ny) = y.shape\n        assert(Nx == My, \"Matrix sizes not compatible for dot product\")\n        let z = zeros((Mx, Ny))\n        cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,\n            Mx.cint, Ny.cint, Nx.cint, 1.0,\n            !self, Nx.cint,\n            !y, Ny.cint, 1.0,\n            !z, Ny.cint)\n        return z\n    }\n    func dot(_ x: vector) -> vector{\n        var y = zeros((x.n, 1))\n        y.flat = x\n        let z = self.dot(y)\n        return z.flat\n    }\n    func min(_ axis:Int = -1) -> Double{\n        if axis == -1{\n            return self.flat.min()\n        }\n        assert(axis==0 || axis==1, \"Axis must be 0 or 1 as matrix only has two dimensions\")\n        assert(false, \"max(x, axis:Int) for maximum of each row is not implemented yet. Use max(A.flat) or A.flat.max() to get the global maximum\")\n\n    }\n    func max(_ axis:Int = -1) -> Double{\n        if axis == -1 {\n            return self.flat.max()\n        }\n        assert(axis==0 || axis==1, \"Axis must be 0 or 1 as matrix only has two dimensions\")\n        assert(false, \"max(x, axis:Int) for maximum of each row is not implemented yet. Use max(A.flat) or A.flat.max() to get the global maximum\")\n    }\n    subscript(i: Int, j: Int) -> Double {\n        // x[0,0]\n        get {\n            var nI = i\n            var nJ = j\n            if nI < 0 {nI = rows + i}\n            if nJ < 0 {nJ = rows + j}\n            assert(indexIsValidForRow(nI, c:nJ), \"Index out of range\")\n            return flat[nI * columns + nJ]\n        }\n        set {\n            var nI = i\n            var nJ = j\n            if nI < 0 {nI = rows + i}\n            if nJ < 0 {nJ = rows + j}\n            assert(indexIsValidForRow(nI, c:nJ), \"Index out of range\")\n            flat[nI * columns + nJ] = newValue\n        }\n    }\n    subscript(i: Range<Int>, k: Int) -> vector {\n        // x[0..<2, 0]\n        get {\n            let idx = asarray(i)\n            return self[idx, k]\n        }\n        set {\n            let idx = asarray(i)\n            self[idx, k] = newValue\n        }\n    }\n    subscript(r: Range<Int>, c: Range<Int>) -> matrix {\n        // x[0..<2, 0..<2]\n        get {\n            let rr = asarray(r)\n            let cc = asarray(c)\n            return self[rr, cc]\n        }\n        set {\n            let rr = asarray(r)\n            let cc = asarray(c)\n            self[rr, cc] = newValue\n        }\n    }\n    subscript(i: Int, k: Range<Int>) -> vector {\n        // x[0, 0..<2]\n        get {\n            let idx = asarray(k)\n            return self[i, idx]\n        }\n        set {\n            let idx = asarray(k)\n            self[i, idx] = newValue\n        }\n    }\n    subscript(or: vector, oc: vector) -> matrix {\n        // the main method.\n        // x[array(1,2), array(3,4)]\n        get {\n            var r = or.copy()\n            var c = oc.copy()\n            if r.max() < 0.0 {r += 1.0 * rows.double}\n            if c.max() < 0.0 {c += 1.0 * columns.double}\n            \n            let (j, i) = meshgrid(r, y: c)\n            let idx = (j.flat*columns.double + i.flat)\n            let z = flat[idx]\n            let zz = reshape(z, shape: (r.n, c.n))\n            return zz\n        }\n        set {\n            var r = or.copy()\n            var c = oc.copy()\n            if r.max() < 0.0 {r += 1.0 * rows.double}\n            if c.max() < 0.0 {c += 1.0 * columns.double}\n            if r.n > 0 && c.n > 0{\n                let (j, i) = meshgrid(r, y: c)\n                let idx = j.flat*columns.double + i.flat\n                flat[idx] = newValue.flat\n            }\n        }\n    }\n    subscript(r: vector) -> vector {\n        // flat indexing\n        get {return self.flat[r]}\n        set {self.flat[r] = newValue }\n    }\n    subscript(i: String, k:Int) -> vector {\n        // x[\"all\", 0]\n        get {\n            let idx = arange(shape.0)\n            let x:vector = self.flat[idx * self.columns.double + k.double]\n            return x\n        }\n        set {\n            let idx = arange(shape.0)\n            self.flat[idx * self.columns.double + k.double] = newValue\n        }\n    }\n    subscript(i: Int, k: String) -> vector {\n        // x[0, \"all\"]\n        get {\n            assert(k == \"all\", \"Only 'all' supported\")\n            let idx = arange(shape.1)\n            let x:vector = self.flat[i.double * self.columns.double + idx]\n            return x\n        }\n        set {\n            assert(k == \"all\", \"Only 'all' supported\")\n            let idx = arange(shape.1)\n            self.flat[i.double * self.columns.double + idx] = newValue\n        }\n    }\n    subscript(i: vector, k: Int) -> vector {\n        // x[array(1,2), 0]\n        get {\n            let idx = i.copy()\n            let x:vector = self.flat[idx * self.columns.double + k.double]\n            return x\n        }\n        set {\n            let idx = i.copy()\n            self.flat[idx * self.columns.double + k.double] = newValue\n        }\n    }\n    subscript(i: matrix) -> vector {\n        // x[x < 5]\n        get {\n            return self.flat[i.flat]\n        }\n        set {\n            self.flat[i.flat] = newValue\n        }\n    }\n    subscript(i: Int, k: vector) -> vector {\n        // x[0, array(1,2)]\n        get {\n            let x:vector = self.flat[i.double * self.columns.double + k]\n            return x\n        }\n        set {\n            self.flat[i.double * self.columns.double + k] = newValue\n        }\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/matrix/m-operators.swift",
    "content": "//\n//  twoD-operators.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\nfunc make_operator(_ lhs: matrix, operation: String, rhs: matrix)->matrix{\n    assert(lhs.shape.0 == rhs.shape.0, \"Sizes must match!\")\n    assert(lhs.shape.1 == rhs.shape.1, \"Sizes must match!\")\n    \n    var result = zeros_like(lhs) // real result\n    let lhsM = lhs.flat\n    let rhsM = rhs.flat\n    var resM:vector = zeros_like(lhsM) // flat vector\n    if operation==\"+\" {resM = lhsM + rhsM}\n    else if operation==\"-\" {resM = lhsM - rhsM}\n    else if operation==\"*\" {resM = lhsM * rhsM}\n    else if operation==\"/\" {resM = lhsM / rhsM}\n    else if operation==\"<\" {resM = lhsM < rhsM}\n    else if operation==\">\" {resM = lhsM > rhsM}\n    else if operation==\">=\" {resM = lhsM >= rhsM}\n    else if operation==\"<=\" {resM = lhsM <= rhsM}\n    result.flat.grid = resM.grid\n    return result\n}\nfunc make_operator(_ lhs: matrix, operation: String, rhs: Double)->matrix{\n    var result = zeros_like(lhs) // real result\n//    var lhsM = asmatrix(lhs.grid) // flat\n    let lhsM = lhs.flat\n    var resM:vector = zeros_like(lhsM) // flat matrix\n    if operation==\"+\" {resM = lhsM + rhs}\n    else if operation==\"-\" {resM = lhsM - rhs}\n    else if operation==\"*\" {resM = lhsM * rhs}\n    else if operation==\"/\" {resM = lhsM / rhs}\n    else if operation==\"<\" {resM = lhsM < rhs}\n    else if operation==\">\" {resM = lhsM > rhs}\n    else if operation==\">=\" {resM = lhsM >= rhs}\n    else if operation==\"<=\" {resM = lhsM <= rhs}\n    result.flat.grid = resM.grid\n    return result\n}\nfunc make_operator(_ lhs: Double, operation: String, rhs: matrix)->matrix{\n    var result = zeros_like(rhs) // real result\n//    var rhsM = asmatrix(rhs.grid) // flat\n    let rhsM = rhs.flat\n    var resM:vector = zeros_like(rhsM) // flat matrix\n    if operation==\"+\" {resM = lhs + rhsM}\n    else if operation==\"-\" {resM = lhs - rhsM}\n    else if operation==\"*\" {resM = lhs * rhsM}\n    else if operation==\"/\" {resM = lhs / rhsM}\n    else if operation==\"<\" {resM = lhs < rhsM}\n    else if operation==\">\" {resM = lhs > rhsM}\n    else if operation==\">=\" {resM = lhs >= rhsM}\n    else if operation==\"<=\" {resM = lhs <= rhsM}\n    result.flat.grid = resM.grid\n    return result\n}\n\n// DOUBLE ASSIGNMENT\nfunc <- (lhs:inout matrix, rhs:Double){\n    let assign = ones((lhs.shape)) * rhs\n    lhs = assign\n}\n\n// SOLVE\ninfix operator !/ : Multiplicative\nfunc !/ (lhs: matrix, rhs: vector) -> vector{\n    return solve(lhs, b: rhs)}\n// EQUALITY\nfunc ~== (lhs: matrix, rhs: matrix) -> Bool{\n    return (rhs.flat ~== lhs.flat)}\n\ninfix operator == : ComparisonPrecedence\nfunc == (lhs: matrix, rhs: matrix)->matrix{\n    return (lhs.flat == rhs.flat).reshape(lhs.shape)\n}\ninfix operator !== : ComparisonPrecedence\nfunc !== (lhs: matrix, rhs: matrix)->matrix{\n    return (lhs.flat !== rhs.flat).reshape(lhs.shape)\n}\n\n/// ELEMENT WISE OPERATORS\n// PLUS\ninfix operator + : Additive\nfunc + (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\nfunc + (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\nfunc + (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\n// MINUS\ninfix operator - : Additive\nfunc - (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\nfunc - (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\nfunc - (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\n// TIMES\ninfix operator * : Multiplicative\nfunc * (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\nfunc * (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\nfunc * (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\n// DIVIDE\ninfix operator / : Multiplicative\nfunc / (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)\n}\nfunc / (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)}\nfunc / (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)}\n// LESS THAN\ninfix operator < : ComparisonPrecedence\nfunc < (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\nfunc < (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\nfunc < (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\n// GREATER THAN\ninfix operator > : ComparisonPrecedence\nfunc > (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\nfunc > (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\nfunc > (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\n// GREATER THAN OR EQUAL\ninfix operator >= : ComparisonPrecedence\nfunc >= (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\nfunc >= (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\nfunc >= (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\n// LESS THAN OR EQUAL\ninfix operator <= : ComparisonPrecedence\nfunc <= (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\nfunc <= (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\nfunc <= (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\n"
  },
  {
    "path": "swix/swix/swix/matrix/m-simple-math.swift",
    "content": "//\n//  twoD-math.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/10/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\nfunc apply_function(_ function: (vector)->vector, x: matrix)->matrix{\n    let y = function(x.flat)\n    var z = zeros_like(x)\n    z.flat = y\n    return z\n}\n\n// TRIG\nfunc sin(_ x: matrix) -> matrix{\n    return apply_function(sin, x: x)\n}\nfunc cos(_ x: matrix) -> matrix{\n    return apply_function(cos, x: x)\n}\nfunc tan(_ x: matrix) -> matrix{\n    return apply_function(tan, x: x)\n}\nfunc tanh(_ x: matrix) -> matrix {\n    return apply_function(tanh, x: x)\n}\n\n// BASIC INFO\nfunc abs(_ x: matrix) -> matrix{\n    return apply_function(abs, x: x)\n}\nfunc sign(_ x: matrix) -> matrix{\n    return apply_function(sign, x: x)\n}\n\n// POWER FUNCTION\nfunc pow(_ x: matrix, power: Double) -> matrix{\n    let y = pow(x.flat, power: power)\n    var z = zeros_like(x)\n    z.flat = y\n    return z\n}\nfunc sqrt(_ x: matrix) -> matrix{\n    return apply_function(sqrt, x: x)\n}\n\n// ROUND\nfunc floor(_ x: matrix) -> matrix{\n    return apply_function(floor, x: x)\n}\nfunc ceil(_ x: matrix) -> matrix{\n    return apply_function(ceil, x: x)\n}\nfunc round(_ x: matrix) -> matrix{\n    return apply_function(round, x: x)\n}\n\n// LOG\nfunc log(_ x: matrix) -> matrix{\n    return apply_function(log, x: x)\n}\n\n// BASIC STATS\nfunc min(_ x:matrix, y:matrix)->matrix{\n    var z = zeros_like(x)\n    z.flat = min(x.flat, y: y.flat)\n    return z\n}\nfunc max(_ x:matrix, y:matrix)->matrix{\n    var z = zeros_like(x)\n    z.flat = max(x.flat, y: y.flat)\n    return z\n}\n\n\n// AXIS\nfunc sum(_ x: matrix, axis:Int = -1) -> vector{\n    // arg dim: indicating what dimension you want to sum over. For example, if dim==0, then it'll sum over dimension 0 -- it will add all the numbers in the 0th dimension, x[0..<x.shape.0, i]\n    assert(axis==0 || axis==1, \"if you want to sum over the entire matrix, call `sum(x.flat)`.\")\n    if axis==1{\n        let n = x.shape.1\n        let m = ones((n,1))\n        return (x.dot(m)).flat\n    }\n    else if axis==0 {\n        let n = x.shape.0\n        let m = ones((1,n))\n        return (m.dot(x)).flat\n    }\n    \n    // the program will never get below this line\n    assert(false)\n    return zeros(1)\n}\nfunc prod(_ x: matrix, axis:Int = -1) -> vector{\n    assert(axis==0 || axis==1, \"if you want to sum over the entire matrix, call `sum(x.flat)`.\")\n    let y = log(x)\n    let z = sum(y, axis:axis)\n    return exp(z)\n}\nfunc mean(_ x:matrix, axis:Int = -1) -> vector{\n    assert(axis==0 || axis==1, \"If you want to find the average of the whole matrix call `mean(x.flat)`\")\n    let div = axis==0 ? x.shape.0 : x.shape.1\n    return sum(x, axis:axis) / div.double\n}\n"
  },
  {
    "path": "swix/swix/swix/numbers.swift",
    "content": "//\n//  constants.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\n// should point to the swift folder\nlet PYTHON_PATH = \"~/anaconda/bin/ipython\"\n\n// only used in `imshow` and `savefig`\nlet S2_PREFIX = \"\\(NSHomeDirectory())/Developer/swix/swix/swix/swix/\"\n\n\n// how close is close?\nlet S2_THRESHOLD = 1e-9\n\n// The random seed\nvar SWIX_SEED:__CLPK_integer = 42\n\n// various important constants\nvar pi = 3.1415926535897932384626433832795028841971693993751058\nvar π = pi\nvar tau = 2 * pi\nvar τ = tau\nvar phi = (1.0 + sqrt(5))/2\nvar φ = phi\nvar e = exp(1.double)\nvar euler = 0.57721566490153286060651209008240243104215933593992\n\n// largest possible value\nvar inf = Double.infinity\nvar nan = Double.nan\n\n// smallest possible difference\nvar DOUBLE_EPSILON = DBL_EPSILON\nvar FLOAT_EPSILON = FLT_EPSILON\n\nfunc close(_ x: Double, y: Double)->Bool{\n    return abs(x-y) < S2_THRESHOLD\n}\nfunc ~= (x:Double, y:Double)->Bool{\n    return close(x, y: y)\n}\nfunc rad2deg(_ x:Double)->Double{\n    return (x * 180.0) / pi\n}\nfunc deg2rad(_ x:Double)->Double{\n    return (x * pi) / 180.0\n}\nfunc max(_ x:Double, y:Double)->Double{\n    return x < y ? y : x\n}\nfunc min(_ x:Double, y:Double)->Double{\n    return x < y ? x : y\n}\nfunc factorial(_ n:Double)->Double{\n    let y = arange(n)+1\n    return prod(y)\n}\nfunc binom(_ n:Double, k:Double)->Double{\n    // similar to scipy.special.binom\n    let i = arange(k)+1\n    let result = (n+1-i) / i\n    return prod(result)\n}\n\n// use 3.double or 3.14.int or N.int\nextension Int{\n    var stride:vDSP_Stride {return vDSP_Stride(self)}\n    var length:vDSP_Length {return vDSP_Length(self)}\n    var int:Int {return Int(self)}\n    var cint:CInt {return CInt(self)}\n    var float:Float {return Float(self)}\n    var double:Double {return Double(self)}\n}\nextension Double{\n    var int:Int {return Int(self)}\n    var float:Float {return Float(self)}\n    var double:Double {return Double(self)}\n    var cdouble:CDouble {return CDouble(self)}\n}\nextension CInt{\n    var int:Int {return Int(self)}\n    var float:Float {return Float(self)}\n    var double:Double {return Double(self)}\n}\nextension Float{\n    var int:Int {return Int(self)}\n    var cfloat:CFloat {return CFloat(self)}\n    var float:Float {return Float(self)}\n    var double:Double {return Double(self)}\n\n}\nextension String {\n    var floatValue: Float {\n        return (self as NSString).floatValue\n    }\n    var doubleValue: Double {\n        return (self as NSString).doubleValue\n    }\n    var nsstring:NSString {return NSString(string:self)}\n}\n\n// damn integer division causes headaches\nprecedencegroup ComparisonPrecedence {\n  associativity: left\n  higherThan: LogicalConjunctionPrecedence\n}\nprecedencegroup Additive { higherThan: ComparisonPrecedence }\nprecedencegroup Multiplicative { higherThan: Additive }\ninfix operator  / : Multiplicative\nfunc / (lhs: Int, rhs: Int) -> Double{\n    return lhs.double / rhs.double}\nfunc / (lhs: Double, rhs: Int) -> Double{\n    return lhs / rhs.double}\n\n// a quick hack to get what I want\nfunc isNumber(_ x: Double)   ->Bool{return true}\nfunc isNumber(_ x: Float)    ->Bool{return true}\nfunc isNumber(_ x: Int)      ->Bool{return true}\nfunc isNumber(_ x: CInt)     ->Bool{return true}\nfunc isNumber(_ x: vector)   ->Bool{return false}\nfunc isNumber(_ x: matrix) ->Bool{return false}\nfunc isNumber(_ x: AnyObject)->Bool{return false}\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/objc/OpenCV.h",
    "content": "//\n//  fft.m\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Accelerate/Accelerate.h>\n\n#import <opencv2/opencv.hpp>\n#import <opencv2/core/core.hpp>\n#import <opencv2/highgui/highgui.hpp>\n#import <opencv2/ml/ml.hpp>\n\n@interface CVWrapper : NSObject\n+ (void) pointerTest;\n+ (void) repeat:(double *)x to:(double*)y n_x:(int)Nx n_repeat:(int)Nrepeat;\n+ (void) solve:(double *)A b:(double*)b x:(double*)x m:(int)m n:(int)n;\n+ (void) compare:(double*)x with:(double*)y using:(NSString*)op into:(double*)z ofLength:(int)N;\n+ (void) compare:(double*)x withDouble:(double)y\n           using:(NSString*)op into:(double*)z ofLength:(int)N;\n+ (void) flip:(double*)x into:(double*)y how:(NSString*)how M:(int)M N:(int)N;\n+ (void) argmax:(double*)x N:(int)N max:(int*)max;\n+ (void) argmin:(double*)x N:(int)N min:(int*)min;\n+ (void) argsort:(double*)x N:(int)N into:(int*)y;\n+ (void) pow:(double*)x N:(int)N power:(double)power into:(double*)y;\n+ (void) shuffle:(double*)x n:(int)n;\n+ (void) det:(double*)x n:(int)N m:(int)M result:(double*)result;\n\n@end\n\n// #### SVM (svm.mm)\n@interface cvSVM : NSObject{\n}\n- (void) train:(double *)x targets:(double *)targets m:(int)M n:(int)N;\n- (float) predict:(double *)x n:(int)N;\n- (double*) predict:(double*)x into:(double*)y m:(int)M n:(int)N;\n-(void)setParams:(NSString*)svm_type kernel:(NSString*)kernel nu:(float)nu;\n@end\n\n// #### k nearest neighbors (knn.mm)\n@interface kNN : NSObject{\n}\n- (void) train:(double *)x targets:(double *)tar m:(int)M n:(int)N;\n- (double) predict:(double *)x n:(int)N k:(int)k;\n@end\n"
  },
  {
    "path": "swix/swix/swix/objc/conversion.swift",
    "content": "//\n//  conversion.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/11/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\nfunc matrixToPointer(_ x: vector)->UnsafeMutablePointer<Double>{\n    // sustains since objc rewrites raw memory!\n    return UnsafeMutablePointer<Double>(mutating: x.grid)\n}\nfunc matrixToPointer(_ x: [Int])->UnsafeMutablePointer<Int>{\n    return UnsafeMutablePointer<Int>(mutating: x)\n}\n\n/// use !x to get the address. I tried &x but that doesn't work in beta3.\nprefix func ! (x: vector) -> UnsafeMutablePointer<Double> {\n    return matrixToPointer(x)\n}\nprefix func ! (x: matrix) -> UnsafeMutablePointer<Double> {\n    return matrixToPointer(x.flat)\n}\n\n"
  },
  {
    "path": "swix/swix/swix/objc/machine_learning.mm",
    "content": "//\n//  svm.m\n//  swix\n//\n//  Created by Scott Sievert on 7/16/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"OpenCV.h\"\n#import \"swix-Bridging-Header.h\"\nusing namespace cv;\n\nvoid doubleToFloat(double * x, float * y, int N){\n    vDSP_vdpsp(x, 1, y, 1, N);\n}\n\n// #### STATE VECTOR MACHINE\n@implementation cvSVM : NSObject\nCvSVM ocvSVM;\nCvSVMParams params;\nint N; // number of variables\nint M; // number of responses\nvoid copy_float_to_double(float* x, double* y, int N){\n    vDSP_vspdp(x, 1, y, 1, N);\n}\nvoid copy_float(float* x, float * y, int N){\n    cblas_scopy(N, x, 1, y, 1);\n}\n-(void)setParams:(NSString*)svm_type kernel:(NSString*)kernel nu:(float)nu{\n    if ([svm_type isEqualToString:@\"C_SVC\"])\n        { params.svm_type = CvSVM::C_SVC; }\n    else if ([svm_type isEqualToString:@\"ONE_CLASS\"])\n        { params.svm_type = CvSVM::ONE_CLASS;}\n    else if ([svm_type isEqualToString:@\"NU_SVC\"])\n        { params.svm_type = CvSVM::NU_SVC;}\n    else if ([svm_type isEqualToString:@\"NU_SVR\"])\n        { params.svm_type = CvSVM::NU_SVR;}\n    \n    if ([kernel isEqualToString:@\"LINEAR\"])\n        { params.kernel_type = CvSVM::LINEAR;}\n    else if ([kernel isEqualToString:@\"SIGMOID\"])\n        { params.kernel_type = CvSVM::SIGMOID;}\n    \n    params.nu = nu;\n}\n-(NSObject*)init{\n    params.svm_type    = CvSVM::C_SVC;\n    params.kernel_type = CvSVM::LINEAR;\n    params.term_crit   = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);\n    return self;\n}\n-(void) train:(double *)x targets:(double *)targets m:(int)M n:(int)N{\n    // M is the number of responses or rows; N is columns or variables\n    float * x2 = (float *)malloc(sizeof(float) * M * N);\n    float * t2 = (float *)malloc(sizeof(float) * M);\n    doubleToFloat(x, x2, M*N);\n    doubleToFloat(targets, t2, M*1);\n    Mat xMat(M, N, CV_32FC1, x2);\n    Mat tMat(M, 1, CV_32FC1, t2);\n    Mat x3 = Mat();\n    ocvSVM.train(xMat, tMat, x3, x3, params);\n}\n- (float) predict:(double *)x n:(int)N{\n    float * x2 = (float *)malloc(sizeof(float) * 1 * N);\n    doubleToFloat(x, x2, N);\n    Mat xMat(1, N, CV_32FC1, x2);\n    float targetPredict = ocvSVM.predict(xMat);\n    return targetPredict;\n}\n- (double*) predict:(double*)x into:(double*)y m:(int)M n:(int)N{\n    float * x2 = (float *)malloc(sizeof(float) * M * N);\n    doubleToFloat(x, x2, M*N);\n    float* y2 = (float *)malloc(sizeof(float) * M);\n    Mat xMat(M, N, CV_32FC1, x2);\n    Mat yMat(M, 1, CV_32FC1, y2);\n    \n    ocvSVM.predict(xMat, yMat);\n    copy_float_to_double(y2, y, M);\n    return y;\n}\n@end\n\n// #### STATE VECTOR MACHINE\n@implementation kNN : NSObject\nint kN;\nint kM;\n\nCvKNearest cvknn;\n\n-(NSObject*)init{\n    return self;\n}\n\n- (void) train:(double *)x targets:(double *)tar m:(int)M n:(int)N{\n    float * x2 = (float *)malloc(sizeof(float) * M * N);\n    float * t2 = (float *)malloc(sizeof(float) * M * 1);\n    Mat x3(M, N, CV_32FC1, x2);\n    Mat t3(M, 1, CV_32FC1, t2);\n    \n    cvknn.train(x3, t3);\n}\n- (double) predict:(double *)x n:(int)N k:(int)k{\n    float * x2 = (float *)malloc(sizeof(float) * N * 1);\n    Mat x3(1, N, CV_32FC1, x2);\n    Mat results(1, 1, CV_32FC1);\n    float targetPredict = -3.14;\n    targetPredict = cvknn.find_nearest(x3, k, &results);\n    \n    std::cout << results << std::endl;\n    std::cout << results.at<double>(0,0) << std::endl;\n    return results.at<double>(0,0);\n}\n@end\n\n\n"
  },
  {
    "path": "swix/swix/swix/objc/math.m",
    "content": "//\n//  fft.m\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Accelerate/Accelerate.h>\n\nvoid svd_objc(double * xx, int m, int n, double* s, double* vt, double* u, int compute_uv){\n    // adapted from the buggy code at http://stackoverflow.com/questions/5047503/lapack-svd-singular-value-decomposition\n    \n    char job;\n    if      (compute_uv == 0) job = 'N';\n    else if (compute_uv == 1) job = 'A';\n    \n    __CLPK_integer lda = (__CLPK_integer)m;\n    long numberOfSingularValues = m < n ? m : n;\n    \n    // Workspace and status variables:\n    __CLPK_integer _n = n;\n    __CLPK_integer _m = m;\n    double* work = (double*)malloc(sizeof(double) * 2);\n    __CLPK_integer lwork = -1;\n    __CLPK_integer * iwork = (__CLPK_integer *)malloc(sizeof(__CLPK_integer) * 8 * numberOfSingularValues);\n    __CLPK_integer info = 0;\n    \n    // Call dgesdd_ with lwork = -1 to query optimal workspace size:\n    dgesdd_(&job, &_m, &_n, xx, &lda, s, u, &_m, vt, &_n, work, &lwork, iwork, &info);\n    \n    // Optimal workspace size is returned in work[0].\n    lwork = work[0];\n    free(work);\n    work = (double *)malloc(lwork * sizeof(double));\n    \n    // Call dgesdd_ to do the actual computation:\n    dgesdd_(&job, &_m, &_n, xx, &lda, s, u, &_m, vt, &_n, work, &lwork, iwork, &info);\n    \n    free(work);\n    free(iwork);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv.mm",
    "content": "//\n//  knn.m\n//  swix\n//\n//  Created by Scott Sievert on 7/1/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Accelerate/Accelerate.h>\n\n#import <opencv2/core/core.hpp>\n#import <opencv2/highgui/highgui.hpp>\n#import <opencv2/ml/ml.hpp>\n\n#import \"OpenCV.h\"\nusing namespace cv;\n\nvoid copy(Mat x, double * y, int N);\n@implementation CVWrapper\n+ (void) pointerTest{\n    // to test whether a matrix copies to the pointer\n    // makes sense; the raw values have to be stored somewhere\n    // it does not make sense that repeat( , 1, r, ) vs repeat( , r , 1) has a difference in shared data\n    int N = 3;\n    int r = 2;\n    double * x = (double *)malloc(sizeof(double)* N);\n    double * y = (double *)malloc(sizeof(double)* N * r);\n    for (int i=0; i<N; i++) x[i] = i;\n    Mat xMat(N, 1, CV_64F, x);\n    Mat yMat(N * r, 1, CV_64F, y);\n\n    repeat(xMat, r, 1, yMat);\n    \n    std::cout << yMat << std::endl;\n    for (int i=0; i<N * r; i++) printf(\"%f, \", y[i]);\n    printf(\"\\n\");\n}\n+ (void) flip:(double*)x into:(double*)y how:(NSString*)how M:(int)M N:(int)N{\n    Mat xMat(M, N, CV_64F, x);\n    Mat yMat(M, N, CV_64F, y);\n    int direction=0;\n    if ([how isEqualToString:@\"ud\"]) direction=0;\n    if ([how isEqualToString:@\"lr\"]) direction=1;\n    \n    flip(xMat, yMat, direction);\n}\n+ (void) repeat:(double *)x to:(double *)y\n            n_x:(int)n_x n_repeat:(int)n_repeat{\n    Mat xMat(n_x, 1, CV_64F, x);\n    Mat yMat(n_x * n_repeat, 1, CV_64F, y);\n    \n    repeat(xMat, n_repeat, 1, yMat);\n}\n+ (void) solve:(double *)A b:(double*)b x:(double*)x m:(int)m n:(int)n{\n    Mat Amat(m, n, CV_64F, A);\n    Mat bMat(m, 1, CV_64F, b);\n    Mat xMat(n, 1, CV_64F, x);\n    solve(Amat, bMat, xMat);\n}\n+ (void) compare:(double*)x with:(double*)y\n           using:(NSString*)op into:(double*)z ofLength:(int)N{\n    // this isn't working.\n    // instead, I can do threshold(abs(x - y), 1e-9)\n    \n    // threshold: vDSP_vthrscD\n    // abs can be vectorized, - vectorized\n    Mat xMat(1, N, CV_64F, x);\n    Mat yMat(1, N, CV_64F, y);\n    Mat zMat;\n    if      ([op isEqualToString:@\"<\"  ]) {zMat = xMat < yMat;}\n    else if ([op isEqualToString:@\">\"  ]) {zMat = xMat > yMat;}\n    else if ([op isEqualToString:@\"<=\" ]) {zMat = xMat <= yMat;}\n    else if ([op isEqualToString:@\">=\" ]) {zMat = xMat >= yMat;}\n    else if ([op isEqualToString:@\"==\" ]) {zMat = xMat == yMat;}\n    else if ([op isEqualToString:@\"!==\"]) {compare(xMat, yMat, zMat, CMP_NE);}\n    else printf(\"*** Careful! Your operation isn't recognized!\\n\");\n    matArgWhereConvert(zMat, z, N);\n}\n+ (void) compare:(double*)x withDouble:(double)y\n           using:(NSString*)op into:(double*)z ofLength:(int)N{\n    \n    // this isn't working.\n    // instead, I can do threshold(abs(x - y), 1e-9)\n    \n    // threshold: vDSP_vthrscD\n    Mat xMat(1, N, CV_64F, x);\n    Mat zMat;\n    if      ([op isEqualToString:@\"<\"  ]) {zMat = xMat < y;}\n    else if ([op isEqualToString:@\">\"  ]) {zMat = xMat > y;}\n    else if ([op isEqualToString:@\"<=\" ]) {zMat = xMat <= y;}\n    else if ([op isEqualToString:@\">=\" ]) {zMat = xMat >= y;}\n    else if ([op isEqualToString:@\"==\" ]) {zMat = xMat == y;}\n    else if ([op isEqualToString:@\"!==\"]) {compare(xMat, y, zMat, CMP_NE);}\n    else printf(\"*** Careful! Your operation isn't recognized!\\n\");\n    matArgWhereConvert(zMat, z, N);\n}\n\n+ (void) argmax:(double*)x N:(int)N max:(int *)max{\n    Mat xMat(N, 1, CV_64F, x);\n    minMaxIdx(xMat, NULL, NULL, NULL, max);\n}\n+ (void) argmin:(double*)x N:(int)N min:(int *)min{\n    Mat xMat(N, 1, CV_64F, x);\n    minMaxIdx(xMat, NULL, NULL, min, NULL);\n}\n+ (void) argsort:(double*)x N:(int)N into:(int*)y{\n    Mat xMat(N, 1, CV_64F, x);\n    Mat yMat(N, 1, CV_32S, y);\n    sortIdx(xMat, yMat, CV_SORT_ASCENDING + CV_SORT_EVERY_COLUMN);\n}\n+ (void) pow:(double*)x N:(int)N power:(double)power into:(double*)y{\n    Mat xMat(N,1,CV_64F, x);\n    Mat yMat(N,1,CV_64F, y);\n    pow(xMat, power, yMat);\n}\n+ (void) shuffle:(double*)x n:(int)n{\n    Mat xMat(n, 1, CV_64F, x);\n    randShuffle(xMat);\n}\n+ (void) det:(double*)x n:(int)N m:(int)M result:(double*)result{\n    Mat xMat(N, M, CV_64F, x);\n    double r = determinant(xMat);\n    *result = r;\n}\n\nvoid matArgWhereConvert(Mat x, double * y, int N){\n    if  (!x.isContinuous()){\n        printf(\"Careful! The OpenCV::Mat-->double* conversion didn't go well as x is not continuous in memory! (message printed from swix/objc/opencv.mm:matArgWhereConvert)\\n\");\n    }\n    uchar* ptr = x.data;\n    // integer to double conversion\n    vDSP_vfltu8D(ptr, 1, y, 1, N);\n}\nvoid copy(double* x, double * y, int N){\n    cblas_dcopy(N, x, 1, y, 1);\n}\n@end\n\n\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/.!41639!opencv2",
    "content": ""
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/calib3d/calib3d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CALIB3D_HPP__\n#define __OPENCV_CALIB3D_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/****************************************************************************************\\\n*                      Camera Calibration, Pose Estimation and Stereo                    *\n\\****************************************************************************************/\n\ntypedef struct CvPOSITObject CvPOSITObject;\n\n/* Allocates and initializes CvPOSITObject structure before doing cvPOSIT */\nCVAPI(CvPOSITObject*)  cvCreatePOSITObject( CvPoint3D32f* points, int point_count );\n\n\n/* Runs POSIT (POSe from ITeration) algorithm for determining 3d position of\n   an object given its model and projection in a weak-perspective case */\nCVAPI(void)  cvPOSIT(  CvPOSITObject* posit_object, CvPoint2D32f* image_points,\n                       double focal_length, CvTermCriteria criteria,\n                       float* rotation_matrix, float* translation_vector);\n\n/* Releases CvPOSITObject structure */\nCVAPI(void)  cvReleasePOSITObject( CvPOSITObject**  posit_object );\n\n/* updates the number of RANSAC iterations */\nCVAPI(int) cvRANSACUpdateNumIters( double p, double err_prob,\n                                   int model_points, int max_iters );\n\nCVAPI(void) cvConvertPointsHomogeneous( const CvMat* src, CvMat* dst );\n\n/* Calculates fundamental matrix given a set of corresponding points */\n#define CV_FM_7POINT 1\n#define CV_FM_8POINT 2\n\n#define CV_LMEDS 4\n#define CV_RANSAC 8\n\n#define CV_FM_LMEDS_ONLY  CV_LMEDS\n#define CV_FM_RANSAC_ONLY CV_RANSAC\n#define CV_FM_LMEDS CV_LMEDS\n#define CV_FM_RANSAC CV_RANSAC\n\nenum\n{\n    CV_ITERATIVE = 0,\n    CV_EPNP = 1, // F.Moreno-Noguer, V.Lepetit and P.Fua \"EPnP: Efficient Perspective-n-Point Camera Pose Estimation\"\n    CV_P3P = 2 // X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; \"Complete Solution Classification for the Perspective-Three-Point Problem\"\n};\n\nCVAPI(int) cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,\n                                 CvMat* fundamental_matrix,\n                                 int method CV_DEFAULT(CV_FM_RANSAC),\n                                 double param1 CV_DEFAULT(3.), double param2 CV_DEFAULT(0.99),\n                                 CvMat* status CV_DEFAULT(NULL) );\n\n/* For each input point on one of images\n   computes parameters of the corresponding\n   epipolar line on the other image */\nCVAPI(void) cvComputeCorrespondEpilines( const CvMat* points,\n                                         int which_image,\n                                         const CvMat* fundamental_matrix,\n                                         CvMat* correspondent_lines );\n\n/* Triangulation functions */\n\nCVAPI(void) cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2,\n                                CvMat* projPoints1, CvMat* projPoints2,\n                                CvMat* points4D);\n\nCVAPI(void) cvCorrectMatches(CvMat* F, CvMat* points1, CvMat* points2,\n                             CvMat* new_points1, CvMat* new_points2);\n\n\n/* Computes the optimal new camera matrix according to the free scaling parameter alpha:\n   alpha=0 - only valid pixels will be retained in the undistorted image\n   alpha=1 - all the source image pixels will be retained in the undistorted image\n*/\nCVAPI(void) cvGetOptimalNewCameraMatrix( const CvMat* camera_matrix,\n                                         const CvMat* dist_coeffs,\n                                         CvSize image_size, double alpha,\n                                         CvMat* new_camera_matrix,\n                                         CvSize new_imag_size CV_DEFAULT(cvSize(0,0)),\n                                         CvRect* valid_pixel_ROI CV_DEFAULT(0),\n                                         int center_principal_point CV_DEFAULT(0));\n\n/* Converts rotation vector to rotation matrix or vice versa */\nCVAPI(int) cvRodrigues2( const CvMat* src, CvMat* dst,\n                         CvMat* jacobian CV_DEFAULT(0) );\n\n/* Finds perspective transformation between the object plane and image (view) plane */\nCVAPI(int) cvFindHomography( const CvMat* src_points,\n                             const CvMat* dst_points,\n                             CvMat* homography,\n                             int method CV_DEFAULT(0),\n                             double ransacReprojThreshold CV_DEFAULT(3),\n                             CvMat* mask CV_DEFAULT(0));\n\n/* Computes RQ decomposition for 3x3 matrices */\nCVAPI(void) cvRQDecomp3x3( const CvMat *matrixM, CvMat *matrixR, CvMat *matrixQ,\n                           CvMat *matrixQx CV_DEFAULT(NULL),\n                           CvMat *matrixQy CV_DEFAULT(NULL),\n                           CvMat *matrixQz CV_DEFAULT(NULL),\n                           CvPoint3D64f *eulerAngles CV_DEFAULT(NULL));\n\n/* Computes projection matrix decomposition */\nCVAPI(void) cvDecomposeProjectionMatrix( const CvMat *projMatr, CvMat *calibMatr,\n                                         CvMat *rotMatr, CvMat *posVect,\n                                         CvMat *rotMatrX CV_DEFAULT(NULL),\n                                         CvMat *rotMatrY CV_DEFAULT(NULL),\n                                         CvMat *rotMatrZ CV_DEFAULT(NULL),\n                                         CvPoint3D64f *eulerAngles CV_DEFAULT(NULL));\n\n/* Computes d(AB)/dA and d(AB)/dB */\nCVAPI(void) cvCalcMatMulDeriv( const CvMat* A, const CvMat* B, CvMat* dABdA, CvMat* dABdB );\n\n/* Computes r3 = rodrigues(rodrigues(r2)*rodrigues(r1)),\n   t3 = rodrigues(r2)*t1 + t2 and the respective derivatives */\nCVAPI(void) cvComposeRT( const CvMat* _rvec1, const CvMat* _tvec1,\n                         const CvMat* _rvec2, const CvMat* _tvec2,\n                         CvMat* _rvec3, CvMat* _tvec3,\n                         CvMat* dr3dr1 CV_DEFAULT(0), CvMat* dr3dt1 CV_DEFAULT(0),\n                         CvMat* dr3dr2 CV_DEFAULT(0), CvMat* dr3dt2 CV_DEFAULT(0),\n                         CvMat* dt3dr1 CV_DEFAULT(0), CvMat* dt3dt1 CV_DEFAULT(0),\n                         CvMat* dt3dr2 CV_DEFAULT(0), CvMat* dt3dt2 CV_DEFAULT(0) );\n\n/* Projects object points to the view plane using\n   the specified extrinsic and intrinsic camera parameters */\nCVAPI(void) cvProjectPoints2( const CvMat* object_points, const CvMat* rotation_vector,\n                              const CvMat* translation_vector, const CvMat* camera_matrix,\n                              const CvMat* distortion_coeffs, CvMat* image_points,\n                              CvMat* dpdrot CV_DEFAULT(NULL), CvMat* dpdt CV_DEFAULT(NULL),\n                              CvMat* dpdf CV_DEFAULT(NULL), CvMat* dpdc CV_DEFAULT(NULL),\n                              CvMat* dpddist CV_DEFAULT(NULL),\n                              double aspect_ratio CV_DEFAULT(0));\n\n/* Finds extrinsic camera parameters from\n   a few known corresponding point pairs and intrinsic parameters */\nCVAPI(void) cvFindExtrinsicCameraParams2( const CvMat* object_points,\n                                          const CvMat* image_points,\n                                          const CvMat* camera_matrix,\n                                          const CvMat* distortion_coeffs,\n                                          CvMat* rotation_vector,\n                                          CvMat* translation_vector,\n                                          int use_extrinsic_guess CV_DEFAULT(0) );\n\n/* Computes initial estimate of the intrinsic camera parameters\n   in case of planar calibration target (e.g. chessboard) */\nCVAPI(void) cvInitIntrinsicParams2D( const CvMat* object_points,\n                                     const CvMat* image_points,\n                                     const CvMat* npoints, CvSize image_size,\n                                     CvMat* camera_matrix,\n                                     double aspect_ratio CV_DEFAULT(1.) );\n\n#define CV_CALIB_CB_ADAPTIVE_THRESH  1\n#define CV_CALIB_CB_NORMALIZE_IMAGE  2\n#define CV_CALIB_CB_FILTER_QUADS     4\n#define CV_CALIB_CB_FAST_CHECK       8\n\n// Performs a fast check if a chessboard is in the input image. This is a workaround to\n// a problem of cvFindChessboardCorners being slow on images with no chessboard\n// - src: input image\n// - size: chessboard size\n// Returns 1 if a chessboard can be in this image and findChessboardCorners should be called,\n// 0 if there is no chessboard, -1 in case of error\nCVAPI(int) cvCheckChessboard(IplImage* src, CvSize size);\n\n    /* Detects corners on a chessboard calibration pattern */\nCVAPI(int) cvFindChessboardCorners( const void* image, CvSize pattern_size,\n                                    CvPoint2D32f* corners,\n                                    int* corner_count CV_DEFAULT(NULL),\n                                    int flags CV_DEFAULT(CV_CALIB_CB_ADAPTIVE_THRESH+CV_CALIB_CB_NORMALIZE_IMAGE) );\n\n/* Draws individual chessboard corners or the whole chessboard detected */\nCVAPI(void) cvDrawChessboardCorners( CvArr* image, CvSize pattern_size,\n                                     CvPoint2D32f* corners,\n                                     int count, int pattern_was_found );\n\n#define CV_CALIB_USE_INTRINSIC_GUESS  1\n#define CV_CALIB_FIX_ASPECT_RATIO     2\n#define CV_CALIB_FIX_PRINCIPAL_POINT  4\n#define CV_CALIB_ZERO_TANGENT_DIST    8\n#define CV_CALIB_FIX_FOCAL_LENGTH 16\n#define CV_CALIB_FIX_K1  32\n#define CV_CALIB_FIX_K2  64\n#define CV_CALIB_FIX_K3  128\n#define CV_CALIB_FIX_K4  2048\n#define CV_CALIB_FIX_K5  4096\n#define CV_CALIB_FIX_K6  8192\n#define CV_CALIB_RATIONAL_MODEL 16384\n\n/* Finds intrinsic and extrinsic camera parameters\n   from a few views of known calibration pattern */\nCVAPI(double) cvCalibrateCamera2( const CvMat* object_points,\n                                const CvMat* image_points,\n                                const CvMat* point_counts,\n                                CvSize image_size,\n                                CvMat* camera_matrix,\n                                CvMat* distortion_coeffs,\n                                CvMat* rotation_vectors CV_DEFAULT(NULL),\n                                CvMat* translation_vectors CV_DEFAULT(NULL),\n                                int flags CV_DEFAULT(0),\n                                CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria(\n                                    CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,DBL_EPSILON)) );\n\n/* Computes various useful characteristics of the camera from the data computed by\n   cvCalibrateCamera2 */\nCVAPI(void) cvCalibrationMatrixValues( const CvMat *camera_matrix,\n                                CvSize image_size,\n                                double aperture_width CV_DEFAULT(0),\n                                double aperture_height CV_DEFAULT(0),\n                                double *fovx CV_DEFAULT(NULL),\n                                double *fovy CV_DEFAULT(NULL),\n                                double *focal_length CV_DEFAULT(NULL),\n                                CvPoint2D64f *principal_point CV_DEFAULT(NULL),\n                                double *pixel_aspect_ratio CV_DEFAULT(NULL));\n\n#define CV_CALIB_FIX_INTRINSIC  256\n#define CV_CALIB_SAME_FOCAL_LENGTH 512\n\n/* Computes the transformation from one camera coordinate system to another one\n   from a few correspondent views of the same calibration target. Optionally, calibrates\n   both cameras */\nCVAPI(double) cvStereoCalibrate( const CvMat* object_points, const CvMat* image_points1,\n                               const CvMat* image_points2, const CvMat* npoints,\n                               CvMat* camera_matrix1, CvMat* dist_coeffs1,\n                               CvMat* camera_matrix2, CvMat* dist_coeffs2,\n                               CvSize image_size, CvMat* R, CvMat* T,\n                               CvMat* E CV_DEFAULT(0), CvMat* F CV_DEFAULT(0),\n                               CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria(\n                                   CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,1e-6)),\n                               int flags CV_DEFAULT(CV_CALIB_FIX_INTRINSIC));\n\n#define CV_CALIB_ZERO_DISPARITY 1024\n\n/* Computes 3D rotations (+ optional shift) for each camera coordinate system to make both\n   views parallel (=> to make all the epipolar lines horizontal or vertical) */\nCVAPI(void) cvStereoRectify( const CvMat* camera_matrix1, const CvMat* camera_matrix2,\n                             const CvMat* dist_coeffs1, const CvMat* dist_coeffs2,\n                             CvSize image_size, const CvMat* R, const CvMat* T,\n                             CvMat* R1, CvMat* R2, CvMat* P1, CvMat* P2,\n                             CvMat* Q CV_DEFAULT(0),\n                             int flags CV_DEFAULT(CV_CALIB_ZERO_DISPARITY),\n                             double alpha CV_DEFAULT(-1),\n                             CvSize new_image_size CV_DEFAULT(cvSize(0,0)),\n                             CvRect* valid_pix_ROI1 CV_DEFAULT(0),\n                             CvRect* valid_pix_ROI2 CV_DEFAULT(0));\n\n/* Computes rectification transformations for uncalibrated pair of images using a set\n   of point correspondences */\nCVAPI(int) cvStereoRectifyUncalibrated( const CvMat* points1, const CvMat* points2,\n                                        const CvMat* F, CvSize img_size,\n                                        CvMat* H1, CvMat* H2,\n                                        double threshold CV_DEFAULT(5));\n\n\n\n/* stereo correspondence parameters and functions */\n\n#define CV_STEREO_BM_NORMALIZED_RESPONSE  0\n#define CV_STEREO_BM_XSOBEL               1\n\n/* Block matching algorithm structure */\ntypedef struct CvStereoBMState\n{\n    // pre-filtering (normalization of input images)\n    int preFilterType; // =CV_STEREO_BM_NORMALIZED_RESPONSE now\n    int preFilterSize; // averaging window size: ~5x5..21x21\n    int preFilterCap; // the output of pre-filtering is clipped by [-preFilterCap,preFilterCap]\n\n    // correspondence using Sum of Absolute Difference (SAD)\n    int SADWindowSize; // ~5x5..21x21\n    int minDisparity;  // minimum disparity (can be negative)\n    int numberOfDisparities; // maximum disparity - minimum disparity (> 0)\n\n    // post-filtering\n    int textureThreshold;  // the disparity is only computed for pixels\n                           // with textured enough neighborhood\n    int uniquenessRatio;   // accept the computed disparity d* only if\n                           // SAD(d) >= SAD(d*)*(1 + uniquenessRatio/100.)\n                           // for any d != d*+/-1 within the search range.\n    int speckleWindowSize; // disparity variation window\n    int speckleRange; // acceptable range of variation in window\n\n    int trySmallerWindows; // if 1, the results may be more accurate,\n                           // at the expense of slower processing\n    CvRect roi1, roi2;\n    int disp12MaxDiff;\n\n    // temporary buffers\n    CvMat* preFilteredImg0;\n    CvMat* preFilteredImg1;\n    CvMat* slidingSumBuf;\n    CvMat* cost;\n    CvMat* disp;\n} CvStereoBMState;\n\n#define CV_STEREO_BM_BASIC 0\n#define CV_STEREO_BM_FISH_EYE 1\n#define CV_STEREO_BM_NARROW 2\n\nCVAPI(CvStereoBMState*) cvCreateStereoBMState(int preset CV_DEFAULT(CV_STEREO_BM_BASIC),\n                                              int numberOfDisparities CV_DEFAULT(0));\n\nCVAPI(void) cvReleaseStereoBMState( CvStereoBMState** state );\n\nCVAPI(void) cvFindStereoCorrespondenceBM( const CvArr* left, const CvArr* right,\n                                          CvArr* disparity, CvStereoBMState* state );\n\nCVAPI(CvRect) cvGetValidDisparityROI( CvRect roi1, CvRect roi2, int minDisparity,\n                                      int numberOfDisparities, int SADWindowSize );\n\nCVAPI(void) cvValidateDisparity( CvArr* disparity, const CvArr* cost,\n                                 int minDisparity, int numberOfDisparities,\n                                 int disp12MaxDiff CV_DEFAULT(1) );\n\n/* Reprojects the computed disparity image to the 3D space using the specified 4x4 matrix */\nCVAPI(void)  cvReprojectImageTo3D( const CvArr* disparityImage,\n                                   CvArr* _3dImage, const CvMat* Q,\n                                   int handleMissingValues CV_DEFAULT(0) );\n\n\n#ifdef __cplusplus\n}\n\n//////////////////////////////////////////////////////////////////////////////////////////\nclass CV_EXPORTS CvLevMarq\n{\npublic:\n    CvLevMarq();\n    CvLevMarq( int nparams, int nerrs, CvTermCriteria criteria=\n              cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),\n              bool completeSymmFlag=false );\n    ~CvLevMarq();\n    void init( int nparams, int nerrs, CvTermCriteria criteria=\n              cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),\n              bool completeSymmFlag=false );\n    bool update( const CvMat*& param, CvMat*& J, CvMat*& err );\n    bool updateAlt( const CvMat*& param, CvMat*& JtJ, CvMat*& JtErr, double*& errNorm );\n\n    void clear();\n    void step();\n    enum { DONE=0, STARTED=1, CALC_J=2, CHECK_ERR=3 };\n\n    cv::Ptr<CvMat> mask;\n    cv::Ptr<CvMat> prevParam;\n    cv::Ptr<CvMat> param;\n    cv::Ptr<CvMat> J;\n    cv::Ptr<CvMat> err;\n    cv::Ptr<CvMat> JtJ;\n    cv::Ptr<CvMat> JtJN;\n    cv::Ptr<CvMat> JtErr;\n    cv::Ptr<CvMat> JtJV;\n    cv::Ptr<CvMat> JtJW;\n    double prevErrNorm, errNorm;\n    int lambdaLg10;\n    CvTermCriteria criteria;\n    int state;\n    int iters;\n    bool completeSymmFlag;\n};\n\nnamespace cv\n{\n//! converts rotation vector to rotation matrix or vice versa using Rodrigues transformation\nCV_EXPORTS_W void Rodrigues(InputArray src, OutputArray dst, OutputArray jacobian=noArray());\n\n//! type of the robust estimation algorithm\nenum\n{\n    LMEDS=CV_LMEDS, //!< least-median algorithm\n    RANSAC=CV_RANSAC //!< RANSAC algorithm\n};\n\n//! computes the best-fit perspective transformation mapping srcPoints to dstPoints.\nCV_EXPORTS_W Mat findHomography( InputArray srcPoints, InputArray dstPoints,\n                                 int method=0, double ransacReprojThreshold=3,\n                                 OutputArray mask=noArray());\n\n//! variant of findHomography for backward compatibility\nCV_EXPORTS Mat findHomography( InputArray srcPoints, InputArray dstPoints,\n                               OutputArray mask, int method=0, double ransacReprojThreshold=3);\n\n//! Computes RQ decomposition of 3x3 matrix\nCV_EXPORTS_W Vec3d RQDecomp3x3( InputArray src, OutputArray mtxR, OutputArray mtxQ,\n                                OutputArray Qx=noArray(),\n                                OutputArray Qy=noArray(),\n                                OutputArray Qz=noArray());\n\n//! Decomposes the projection matrix into camera matrix and the rotation martix and the translation vector\nCV_EXPORTS_W void decomposeProjectionMatrix( InputArray projMatrix, OutputArray cameraMatrix,\n                                             OutputArray rotMatrix, OutputArray transVect,\n                                             OutputArray rotMatrixX=noArray(),\n                                             OutputArray rotMatrixY=noArray(),\n                                             OutputArray rotMatrixZ=noArray(),\n                                             OutputArray eulerAngles=noArray() );\n\n//! computes derivatives of the matrix product w.r.t each of the multiplied matrix coefficients\nCV_EXPORTS_W void matMulDeriv( InputArray A, InputArray B,\n                               OutputArray dABdA,\n                               OutputArray dABdB );\n\n//! composes 2 [R|t] transformations together. Also computes the derivatives of the result w.r.t the arguments\nCV_EXPORTS_W void composeRT( InputArray rvec1, InputArray tvec1,\n                             InputArray rvec2, InputArray tvec2,\n                             OutputArray rvec3, OutputArray tvec3,\n                             OutputArray dr3dr1=noArray(), OutputArray dr3dt1=noArray(),\n                             OutputArray dr3dr2=noArray(), OutputArray dr3dt2=noArray(),\n                             OutputArray dt3dr1=noArray(), OutputArray dt3dt1=noArray(),\n                             OutputArray dt3dr2=noArray(), OutputArray dt3dt2=noArray() );\n\n//! projects points from the model coordinate space to the image coordinates. Also computes derivatives of the image coordinates w.r.t the intrinsic and extrinsic camera parameters\nCV_EXPORTS_W void projectPoints( InputArray objectPoints,\n                                 InputArray rvec, InputArray tvec,\n                                 InputArray cameraMatrix, InputArray distCoeffs,\n                                 OutputArray imagePoints,\n                                 OutputArray jacobian=noArray(),\n                                 double aspectRatio=0 );\n\n//! computes the camera pose from a few 3D points and the corresponding projections. The outliers are not handled.\nenum\n{\n    ITERATIVE=CV_ITERATIVE,\n    EPNP=CV_EPNP,\n    P3P=CV_P3P\n};\nCV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints,\n                            InputArray cameraMatrix, InputArray distCoeffs,\n                            OutputArray rvec, OutputArray tvec,\n                            bool useExtrinsicGuess=false, int flags=ITERATIVE);\n\n//! computes the camera pose from a few 3D points and the corresponding projections. The outliers are possible.\nCV_EXPORTS_W void solvePnPRansac( InputArray objectPoints,\n                                  InputArray imagePoints,\n                                  InputArray cameraMatrix,\n                                  InputArray distCoeffs,\n                                  OutputArray rvec,\n                                  OutputArray tvec,\n                                  bool useExtrinsicGuess = false,\n                                  int iterationsCount = 100,\n                                  float reprojectionError = 8.0,\n                                  int minInliersCount = 100,\n                                  OutputArray inliers = noArray(),\n                                  int flags = ITERATIVE);\n\n//! initializes camera matrix from a few 3D points and the corresponding projections.\nCV_EXPORTS_W Mat initCameraMatrix2D( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints,\n                                     Size imageSize, double aspectRatio=1. );\n\nenum { CALIB_CB_ADAPTIVE_THRESH = 1, CALIB_CB_NORMALIZE_IMAGE = 2,\n       CALIB_CB_FILTER_QUADS = 4, CALIB_CB_FAST_CHECK = 8 };\n\n//! finds checkerboard pattern of the specified size in the image\nCV_EXPORTS_W bool findChessboardCorners( InputArray image, Size patternSize,\n                                         OutputArray corners,\n                                         int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE );\n\n//! finds subpixel-accurate positions of the chessboard corners\nCV_EXPORTS bool find4QuadCornerSubpix(InputArray img, InputOutputArray corners, Size region_size);\n\n//! draws the checkerboard pattern (found or partly found) in the image\nCV_EXPORTS_W void drawChessboardCorners( InputOutputArray image, Size patternSize,\n                                         InputArray corners, bool patternWasFound );\n\nenum { CALIB_CB_SYMMETRIC_GRID = 1, CALIB_CB_ASYMMETRIC_GRID = 2,\n       CALIB_CB_CLUSTERING = 4 };\n\n//! finds circles' grid pattern of the specified size in the image\nCV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize,\n                                 OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID,\n                                 const Ptr<FeatureDetector> &blobDetector = new SimpleBlobDetector());\n\n//! the deprecated function. Use findCirclesGrid() instead of it.\nCV_EXPORTS_W bool findCirclesGridDefault( InputArray image, Size patternSize,\n                                          OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID );\nenum\n{\n    CALIB_USE_INTRINSIC_GUESS = CV_CALIB_USE_INTRINSIC_GUESS,\n    CALIB_FIX_ASPECT_RATIO = CV_CALIB_FIX_ASPECT_RATIO,\n    CALIB_FIX_PRINCIPAL_POINT = CV_CALIB_FIX_PRINCIPAL_POINT,\n    CALIB_ZERO_TANGENT_DIST = CV_CALIB_ZERO_TANGENT_DIST,\n    CALIB_FIX_FOCAL_LENGTH = CV_CALIB_FIX_FOCAL_LENGTH,\n    CALIB_FIX_K1 = CV_CALIB_FIX_K1,\n    CALIB_FIX_K2 = CV_CALIB_FIX_K2,\n    CALIB_FIX_K3 = CV_CALIB_FIX_K3,\n    CALIB_FIX_K4 = CV_CALIB_FIX_K4,\n    CALIB_FIX_K5 = CV_CALIB_FIX_K5,\n    CALIB_FIX_K6 = CV_CALIB_FIX_K6,\n    CALIB_RATIONAL_MODEL = CV_CALIB_RATIONAL_MODEL,\n    // only for stereo\n    CALIB_FIX_INTRINSIC = CV_CALIB_FIX_INTRINSIC,\n    CALIB_SAME_FOCAL_LENGTH = CV_CALIB_SAME_FOCAL_LENGTH,\n    // for stereo rectification\n    CALIB_ZERO_DISPARITY = CV_CALIB_ZERO_DISPARITY\n};\n\n//! finds intrinsic and extrinsic camera parameters from several fews of a known calibration pattern.\nCV_EXPORTS_W double calibrateCamera( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints,\n                                     Size imageSize,\n                                     CV_OUT InputOutputArray cameraMatrix,\n                                     CV_OUT InputOutputArray distCoeffs,\n                                     OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs,\n                                     int flags=0, TermCriteria criteria = TermCriteria(\n                                         TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) );\n\n//! computes several useful camera characteristics from the camera matrix, camera frame resolution and the physical sensor size.\nCV_EXPORTS_W void calibrationMatrixValues( InputArray cameraMatrix,\n                                Size imageSize,\n                                double apertureWidth,\n                                double apertureHeight,\n                                CV_OUT double& fovx,\n                                CV_OUT double& fovy,\n                                CV_OUT double& focalLength,\n                                CV_OUT Point2d& principalPoint,\n                                CV_OUT double& aspectRatio );\n\n//! finds intrinsic and extrinsic parameters of a stereo camera\nCV_EXPORTS_W double stereoCalibrate( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints1,\n                                     InputArrayOfArrays imagePoints2,\n                                     CV_OUT InputOutputArray cameraMatrix1,\n                                     CV_OUT InputOutputArray distCoeffs1,\n                                     CV_OUT InputOutputArray cameraMatrix2,\n                                     CV_OUT InputOutputArray distCoeffs2,\n                                     Size imageSize, OutputArray R,\n                                     OutputArray T, OutputArray E, OutputArray F,\n                                     TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6),\n                                     int flags=CALIB_FIX_INTRINSIC );\n\n\n//! computes the rectification transformation for a stereo camera from its intrinsic and extrinsic parameters\nCV_EXPORTS_W void stereoRectify( InputArray cameraMatrix1, InputArray distCoeffs1,\n                               InputArray cameraMatrix2, InputArray distCoeffs2,\n                               Size imageSize, InputArray R, InputArray T,\n                               OutputArray R1, OutputArray R2,\n                               OutputArray P1, OutputArray P2,\n                               OutputArray Q, int flags=CALIB_ZERO_DISPARITY,\n                               double alpha=-1, Size newImageSize=Size(),\n                               CV_OUT Rect* validPixROI1=0, CV_OUT Rect* validPixROI2=0 );\n\n//! computes the rectification transformation for an uncalibrated stereo camera (zero distortion is assumed)\nCV_EXPORTS_W bool stereoRectifyUncalibrated( InputArray points1, InputArray points2,\n                                             InputArray F, Size imgSize,\n                                             OutputArray H1, OutputArray H2,\n                                             double threshold=5 );\n\n//! computes the rectification transformations for 3-head camera, where all the heads are on the same line.\nCV_EXPORTS_W float rectify3Collinear( InputArray cameraMatrix1, InputArray distCoeffs1,\n                                      InputArray cameraMatrix2, InputArray distCoeffs2,\n                                      InputArray cameraMatrix3, InputArray distCoeffs3,\n                                      InputArrayOfArrays imgpt1, InputArrayOfArrays imgpt3,\n                                      Size imageSize, InputArray R12, InputArray T12,\n                                      InputArray R13, InputArray T13,\n                                      OutputArray R1, OutputArray R2, OutputArray R3,\n                                      OutputArray P1, OutputArray P2, OutputArray P3,\n                                      OutputArray Q, double alpha, Size newImgSize,\n                                      CV_OUT Rect* roi1, CV_OUT Rect* roi2, int flags );\n\n//! returns the optimal new camera matrix\nCV_EXPORTS_W Mat getOptimalNewCameraMatrix( InputArray cameraMatrix, InputArray distCoeffs,\n                                            Size imageSize, double alpha, Size newImgSize=Size(),\n                                            CV_OUT Rect* validPixROI=0, bool centerPrincipalPoint=false);\n\n//! converts point coordinates from normal pixel coordinates to homogeneous coordinates ((x,y)->(x,y,1))\nCV_EXPORTS_W void convertPointsToHomogeneous( InputArray src, OutputArray dst );\n\n//! converts point coordinates from homogeneous to normal pixel coordinates ((x,y,z)->(x/z, y/z))\nCV_EXPORTS_W void convertPointsFromHomogeneous( InputArray src, OutputArray dst );\n\n//! for backward compatibility\nCV_EXPORTS void convertPointsHomogeneous( InputArray src, OutputArray dst );\n\n//! the algorithm for finding fundamental matrix\nenum\n{\n    FM_7POINT = CV_FM_7POINT, //!< 7-point algorithm\n    FM_8POINT = CV_FM_8POINT, //!< 8-point algorithm\n    FM_LMEDS = CV_FM_LMEDS,  //!< least-median algorithm\n    FM_RANSAC = CV_FM_RANSAC  //!< RANSAC algorithm\n};\n\n//! finds fundamental matrix from a set of corresponding 2D points\nCV_EXPORTS_W Mat findFundamentalMat( InputArray points1, InputArray points2,\n                                     int method=FM_RANSAC,\n                                     double param1=3., double param2=0.99,\n                                     OutputArray mask=noArray());\n\n//! variant of findFundamentalMat for backward compatibility\nCV_EXPORTS Mat findFundamentalMat( InputArray points1, InputArray points2,\n                                   OutputArray mask, int method=FM_RANSAC,\n                                   double param1=3., double param2=0.99);\n\n//! finds coordinates of epipolar lines corresponding the specified points\nCV_EXPORTS_W void computeCorrespondEpilines( InputArray points,\n                                             int whichImage, InputArray F,\n                                             OutputArray lines );\n\nCV_EXPORTS_W void triangulatePoints( InputArray projMatr1, InputArray projMatr2,\n                                     InputArray projPoints1, InputArray projPoints2,\n                                     OutputArray points4D );\n\nCV_EXPORTS_W void correctMatches( InputArray F, InputArray points1, InputArray points2,\n                                  OutputArray newPoints1, OutputArray newPoints2 );\n\ntemplate<> CV_EXPORTS void Ptr<CvStereoBMState>::delete_obj();\n\n/*!\n Block Matching Stereo Correspondence Algorithm\n\n The class implements BM stereo correspondence algorithm by K. Konolige.\n*/\nclass CV_EXPORTS_W StereoBM\n{\npublic:\n    enum { PREFILTER_NORMALIZED_RESPONSE = 0, PREFILTER_XSOBEL = 1,\n        BASIC_PRESET=0, FISH_EYE_PRESET=1, NARROW_PRESET=2 };\n\n    //! the default constructor\n    CV_WRAP StereoBM();\n    //! the full constructor taking the camera-specific preset, number of disparities and the SAD window size\n    CV_WRAP StereoBM(int preset, int ndisparities=0, int SADWindowSize=21);\n    //! the method that reinitializes the state. The previous content is destroyed\n    void init(int preset, int ndisparities=0, int SADWindowSize=21);\n    //! the stereo correspondence operator. Finds the disparity for the specified rectified stereo pair\n    CV_WRAP_AS(compute) void operator()( InputArray left, InputArray right,\n                                         OutputArray disparity, int disptype=CV_16S );\n\n    //! pointer to the underlying CvStereoBMState\n    Ptr<CvStereoBMState> state;\n};\n\n\n/*!\n Semi-Global Block Matching Stereo Correspondence Algorithm\n\n The class implements the original SGBM stereo correspondence algorithm by H. Hirschmuller and some its modification.\n */\nclass CV_EXPORTS_W StereoSGBM\n{\npublic:\n    enum { DISP_SHIFT=4, DISP_SCALE = (1<<DISP_SHIFT) };\n\n    //! the default constructor\n    CV_WRAP StereoSGBM();\n\n    //! the full constructor taking all the necessary algorithm parameters\n    CV_WRAP StereoSGBM(int minDisparity, int numDisparities, int SADWindowSize,\n               int P1=0, int P2=0, int disp12MaxDiff=0,\n               int preFilterCap=0, int uniquenessRatio=0,\n               int speckleWindowSize=0, int speckleRange=0,\n               bool fullDP=false);\n    //! the destructor\n    virtual ~StereoSGBM();\n\n    //! the stereo correspondence operator that computes disparity map for the specified rectified stereo pair\n    CV_WRAP_AS(compute) virtual void operator()(InputArray left, InputArray right,\n                                                OutputArray disp);\n\n    CV_PROP_RW int minDisparity;\n    CV_PROP_RW int numberOfDisparities;\n    CV_PROP_RW int SADWindowSize;\n    CV_PROP_RW int preFilterCap;\n    CV_PROP_RW int uniquenessRatio;\n    CV_PROP_RW int P1;\n    CV_PROP_RW int P2;\n    CV_PROP_RW int speckleWindowSize;\n    CV_PROP_RW int speckleRange;\n    CV_PROP_RW int disp12MaxDiff;\n    CV_PROP_RW bool fullDP;\n\nprotected:\n    Mat buffer;\n};\n\n//! filters off speckles (small regions of incorrectly computed disparity)\nCV_EXPORTS_W void filterSpeckles( InputOutputArray img, double newVal, int maxSpeckleSize, double maxDiff,\n                                  InputOutputArray buf=noArray() );\n\n//! computes valid disparity ROI from the valid ROIs of the rectified images (that are returned by cv::stereoRectify())\nCV_EXPORTS_W Rect getValidDisparityROI( Rect roi1, Rect roi2,\n                                        int minDisparity, int numberOfDisparities,\n                                        int SADWindowSize );\n\n//! validates disparity using the left-right check. The matrix \"cost\" should be computed by the stereo correspondence algorithm\nCV_EXPORTS_W void validateDisparity( InputOutputArray disparity, InputArray cost,\n                                     int minDisparity, int numberOfDisparities,\n                                     int disp12MaxDisp=1 );\n\n//! reprojects disparity image to 3D: (x,y,d)->(X,Y,Z) using the matrix Q returned by cv::stereoRectify\nCV_EXPORTS_W void reprojectImageTo3D( InputArray disparity,\n                                      OutputArray _3dImage, InputArray Q,\n                                      bool handleMissingValues=false,\n                                      int ddepth=-1 );\n\nCV_EXPORTS_W  int estimateAffine3D(InputArray src, InputArray dst,\n                                   OutputArray out, OutputArray inliers,\n                                   double ransacThreshold=3, double confidence=0.99);\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/contrib/contrib.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CONTRIB_HPP__\n#define __OPENCV_CONTRIB_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/objdetect/objdetect.hpp\"\n\n#ifdef __cplusplus\n\n/****************************************************************************************\\\n*                                   Adaptive Skin Detector                               *\n\\****************************************************************************************/\n\nclass CV_EXPORTS CvAdaptiveSkinDetector\n{\nprivate:\n    enum {\n        GSD_HUE_LT = 3,\n        GSD_HUE_UT = 33,\n        GSD_INTENSITY_LT = 15,\n        GSD_INTENSITY_UT = 250\n    };\n\n    class CV_EXPORTS Histogram\n    {\n    private:\n        enum {\n            HistogramSize = (GSD_HUE_UT - GSD_HUE_LT + 1)\n        };\n\n    protected:\n        int findCoverageIndex(double surfaceToCover, int defaultValue = 0);\n\n    public:\n        CvHistogram *fHistogram;\n        Histogram();\n        virtual ~Histogram();\n\n        void findCurveThresholds(int &x1, int &x2, double percent = 0.05);\n        void mergeWith(Histogram *source, double weight);\n    };\n\n    int nStartCounter, nFrameCount, nSkinHueLowerBound, nSkinHueUpperBound, nMorphingMethod, nSamplingDivider;\n    double fHistogramMergeFactor, fHuePercentCovered;\n    Histogram histogramHueMotion, skinHueHistogram;\n    IplImage *imgHueFrame, *imgSaturationFrame, *imgLastGrayFrame, *imgMotionFrame, *imgFilteredFrame;\n    IplImage *imgShrinked, *imgTemp, *imgGrayFrame, *imgHSVFrame;\n\nprotected:\n    void initData(IplImage *src, int widthDivider, int heightDivider);\n    void adaptiveFilter();\n\npublic:\n\n    enum {\n        MORPHING_METHOD_NONE = 0,\n        MORPHING_METHOD_ERODE = 1,\n        MORPHING_METHOD_ERODE_ERODE = 2,\n        MORPHING_METHOD_ERODE_DILATE = 3\n    };\n\n    CvAdaptiveSkinDetector(int samplingDivider = 1, int morphingMethod = MORPHING_METHOD_NONE);\n    virtual ~CvAdaptiveSkinDetector();\n\n    virtual void process(IplImage *inputBGRImage, IplImage *outputHueMask);\n};\n\n\n/****************************************************************************************\\\n *                                  Fuzzy MeanShift Tracker                               *\n \\****************************************************************************************/\n\nclass CV_EXPORTS CvFuzzyPoint {\npublic:\n    double x, y, value;\n\n    CvFuzzyPoint(double _x, double _y);\n};\n\nclass CV_EXPORTS CvFuzzyCurve {\nprivate:\n    std::vector<CvFuzzyPoint> points;\n    double value, centre;\n\n    bool between(double x, double x1, double x2);\n\npublic:\n    CvFuzzyCurve();\n    ~CvFuzzyCurve();\n\n    void setCentre(double _centre);\n    double getCentre();\n    void clear();\n    void addPoint(double x, double y);\n    double calcValue(double param);\n    double getValue();\n    void setValue(double _value);\n};\n\nclass CV_EXPORTS CvFuzzyFunction {\npublic:\n    std::vector<CvFuzzyCurve> curves;\n\n    CvFuzzyFunction();\n    ~CvFuzzyFunction();\n    void addCurve(CvFuzzyCurve *curve, double value = 0);\n    void resetValues();\n    double calcValue();\n    CvFuzzyCurve *newCurve();\n};\n\nclass CV_EXPORTS CvFuzzyRule {\nprivate:\n    CvFuzzyCurve *fuzzyInput1, *fuzzyInput2;\n    CvFuzzyCurve *fuzzyOutput;\npublic:\n    CvFuzzyRule();\n    ~CvFuzzyRule();\n    void setRule(CvFuzzyCurve *c1, CvFuzzyCurve *c2, CvFuzzyCurve *o1);\n    double calcValue(double param1, double param2);\n    CvFuzzyCurve *getOutputCurve();\n};\n\nclass CV_EXPORTS CvFuzzyController {\nprivate:\n    std::vector<CvFuzzyRule*> rules;\npublic:\n    CvFuzzyController();\n    ~CvFuzzyController();\n    void addRule(CvFuzzyCurve *c1, CvFuzzyCurve *c2, CvFuzzyCurve *o1);\n    double calcOutput(double param1, double param2);\n};\n\nclass CV_EXPORTS CvFuzzyMeanShiftTracker\n{\nprivate:\n    class FuzzyResizer\n    {\n    private:\n        CvFuzzyFunction iInput, iOutput;\n        CvFuzzyController fuzzyController;\n    public:\n        FuzzyResizer();\n        int calcOutput(double edgeDensity, double density);\n    };\n\n    class SearchWindow\n    {\n    public:\n        FuzzyResizer *fuzzyResizer;\n        int x, y;\n        int width, height, maxWidth, maxHeight, ellipseHeight, ellipseWidth;\n        int ldx, ldy, ldw, ldh, numShifts, numIters;\n        int xGc, yGc;\n        long m00, m01, m10, m11, m02, m20;\n        double ellipseAngle;\n        double density;\n        unsigned int depthLow, depthHigh;\n        int verticalEdgeLeft, verticalEdgeRight, horizontalEdgeTop, horizontalEdgeBottom;\n\n        SearchWindow();\n        ~SearchWindow();\n        void setSize(int _x, int _y, int _width, int _height);\n        void initDepthValues(IplImage *maskImage, IplImage *depthMap);\n        bool shift();\n        void extractInfo(IplImage *maskImage, IplImage *depthMap, bool initDepth);\n        void getResizeAttribsEdgeDensityLinear(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh);\n        void getResizeAttribsInnerDensity(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh);\n        void getResizeAttribsEdgeDensityFuzzy(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh);\n        bool meanShift(IplImage *maskImage, IplImage *depthMap, int maxIteration, bool initDepth);\n    };\n\npublic:\n    enum TrackingState\n    {\n        tsNone          = 0,\n        tsSearching     = 1,\n        tsTracking      = 2,\n        tsSetWindow     = 3,\n        tsDisabled      = 10\n    };\n\n    enum ResizeMethod {\n        rmEdgeDensityLinear     = 0,\n        rmEdgeDensityFuzzy      = 1,\n        rmInnerDensity          = 2\n    };\n\n    enum {\n        MinKernelMass           = 1000\n    };\n\n    SearchWindow kernel;\n    int searchMode;\n\nprivate:\n    enum\n    {\n        MaxMeanShiftIteration   = 5,\n        MaxSetSizeIteration     = 5\n    };\n\n    void findOptimumSearchWindow(SearchWindow &searchWindow, IplImage *maskImage, IplImage *depthMap, int maxIteration, int resizeMethod, bool initDepth);\n\npublic:\n    CvFuzzyMeanShiftTracker();\n    ~CvFuzzyMeanShiftTracker();\n\n    void track(IplImage *maskImage, IplImage *depthMap, int resizeMethod, bool resetSearch, int minKernelMass = MinKernelMass);\n};\n\n\nnamespace cv\n{\n\n    class CV_EXPORTS Octree\n    {\n    public:\n        struct Node\n        {\n            Node() {}\n            int begin, end;\n            float x_min, x_max, y_min, y_max, z_min, z_max;\n            int maxLevels;\n            bool isLeaf;\n            int children[8];\n        };\n\n        Octree();\n        Octree( const vector<Point3f>& points, int maxLevels = 10, int minPoints = 20 );\n        virtual ~Octree();\n\n        virtual void buildTree( const vector<Point3f>& points, int maxLevels = 10, int minPoints = 20 );\n        virtual void getPointsWithinSphere( const Point3f& center, float radius,\n                                           vector<Point3f>& points ) const;\n        const vector<Node>& getNodes() const { return nodes; }\n    private:\n        int minPoints;\n        vector<Point3f> points;\n        vector<Node> nodes;\n\n        virtual void buildNext(size_t node_ind);\n    };\n\n\n    class CV_EXPORTS Mesh3D\n    {\n    public:\n        struct EmptyMeshException {};\n\n        Mesh3D();\n        Mesh3D(const vector<Point3f>& vtx);\n        ~Mesh3D();\n\n        void buildOctree();\n        void clearOctree();\n        float estimateResolution(float tryRatio = 0.1f);\n        void computeNormals(float normalRadius, int minNeighbors = 20);\n        void computeNormals(const vector<int>& subset, float normalRadius, int minNeighbors = 20);\n\n        void writeAsVrml(const String& file, const vector<Scalar>& colors = vector<Scalar>()) const;\n\n        vector<Point3f> vtx;\n        vector<Point3f> normals;\n        float resolution;\n        Octree octree;\n\n        const static Point3f allzero;\n    };\n\n    class CV_EXPORTS SpinImageModel\n    {\n    public:\n\n        /* model parameters, leave unset for default or auto estimate */\n        float normalRadius;\n        int minNeighbors;\n\n        float binSize;\n        int imageWidth;\n\n        float lambda;\n        float gamma;\n\n        float T_GeometriccConsistency;\n        float T_GroupingCorespondances;\n\n        /* public interface */\n        SpinImageModel();\n        explicit SpinImageModel(const Mesh3D& mesh);\n        ~SpinImageModel();\n\n        void setLogger(std::ostream* log);\n        void selectRandomSubset(float ratio);\n        void setSubset(const vector<int>& subset);\n        void compute();\n\n        void match(const SpinImageModel& scene, vector< vector<Vec2i> >& result);\n\n        Mat packRandomScaledSpins(bool separateScale = false, size_t xCount = 10, size_t yCount = 10) const;\n\n        size_t getSpinCount() const { return spinImages.rows; }\n        Mat getSpinImage(size_t index) const { return spinImages.row((int)index); }\n        const Point3f& getSpinVertex(size_t index) const { return mesh.vtx[subset[index]]; }\n        const Point3f& getSpinNormal(size_t index) const { return mesh.normals[subset[index]]; }\n\n        const Mesh3D& getMesh() const { return mesh; }\n        Mesh3D& getMesh() { return mesh; }\n\n        /* static utility functions */\n        static bool spinCorrelation(const Mat& spin1, const Mat& spin2, float lambda, float& result);\n\n        static Point2f calcSpinMapCoo(const Point3f& point, const Point3f& vertex, const Point3f& normal);\n\n        static float geometricConsistency(const Point3f& pointScene1, const Point3f& normalScene1,\n                                          const Point3f& pointModel1, const Point3f& normalModel1,\n                                          const Point3f& pointScene2, const Point3f& normalScene2,\n                                          const Point3f& pointModel2, const Point3f& normalModel2);\n\n        static float groupingCreteria(const Point3f& pointScene1, const Point3f& normalScene1,\n                                      const Point3f& pointModel1, const Point3f& normalModel1,\n                                      const Point3f& pointScene2, const Point3f& normalScene2,\n                                      const Point3f& pointModel2, const Point3f& normalModel2,\n                                      float gamma);\n    protected:\n        void defaultParams();\n\n        void matchSpinToModel(const Mat& spin, vector<int>& indeces,\n                              vector<float>& corrCoeffs, bool useExtremeOutliers = true) const;\n\n        void repackSpinImages(const vector<uchar>& mask, Mat& spinImages, bool reAlloc = true) const;\n\n        vector<int> subset;\n        Mesh3D mesh;\n        Mat spinImages;\n        std::ostream* out;\n    };\n\n    class CV_EXPORTS TickMeter\n    {\n    public:\n        TickMeter();\n        void start();\n        void stop();\n\n        int64 getTimeTicks() const;\n        double getTimeMicro() const;\n        double getTimeMilli() const;\n        double getTimeSec()   const;\n        int64 getCounter() const;\n\n        void reset();\n    private:\n        int64 counter;\n        int64 sumTime;\n        int64 startTime;\n    };\n\n    CV_EXPORTS std::ostream& operator<<(std::ostream& out, const TickMeter& tm);\n\n    class CV_EXPORTS SelfSimDescriptor\n    {\n    public:\n        SelfSimDescriptor();\n        SelfSimDescriptor(int _ssize, int _lsize,\n                          int _startDistanceBucket=DEFAULT_START_DISTANCE_BUCKET,\n                          int _numberOfDistanceBuckets=DEFAULT_NUM_DISTANCE_BUCKETS,\n                          int _nangles=DEFAULT_NUM_ANGLES);\n        SelfSimDescriptor(const SelfSimDescriptor& ss);\n        virtual ~SelfSimDescriptor();\n        SelfSimDescriptor& operator = (const SelfSimDescriptor& ss);\n\n        size_t getDescriptorSize() const;\n        Size getGridSize( Size imgsize, Size winStride ) const;\n\n        virtual void compute(const Mat& img, vector<float>& descriptors, Size winStride=Size(),\n                             const vector<Point>& locations=vector<Point>()) const;\n        virtual void computeLogPolarMapping(Mat& mappingMask) const;\n        virtual void SSD(const Mat& img, Point pt, Mat& ssd) const;\n\n        int smallSize;\n        int largeSize;\n        int startDistanceBucket;\n        int numberOfDistanceBuckets;\n        int numberOfAngles;\n\n        enum { DEFAULT_SMALL_SIZE = 5, DEFAULT_LARGE_SIZE = 41,\n            DEFAULT_NUM_ANGLES = 20, DEFAULT_START_DISTANCE_BUCKET = 3,\n            DEFAULT_NUM_DISTANCE_BUCKETS = 7 };\n    };\n\n\n    typedef bool (*BundleAdjustCallback)(int iteration, double norm_error, void* user_data);\n\n    class CV_EXPORTS LevMarqSparse {\n    public:\n        LevMarqSparse();\n        LevMarqSparse(int npoints, // number of points\n                      int ncameras, // number of cameras\n                      int nPointParams, // number of params per one point  (3 in case of 3D points)\n                      int nCameraParams, // number of parameters per one camera\n                      int nErrParams, // number of parameters in measurement vector\n                      // for 1 point at one camera (2 in case of 2D projections)\n                      Mat& visibility, // visibility matrix. rows correspond to points, columns correspond to cameras\n                      // 1 - point is visible for the camera, 0 - invisible\n                      Mat& P0, // starting vector of parameters, first cameras then points\n                      Mat& X, // measurements, in order of visibility. non visible cases are skipped\n                      TermCriteria criteria, // termination criteria\n\n                      // callback for estimation of Jacobian matrices\n                      void (CV_CDECL * fjac)(int i, int j, Mat& point_params,\n                                             Mat& cam_params, Mat& A, Mat& B, void* data),\n                      // callback for estimation of backprojection errors\n                      void (CV_CDECL * func)(int i, int j, Mat& point_params,\n                                             Mat& cam_params, Mat& estim, void* data),\n                      void* data, // user-specific data passed to the callbacks\n                      BundleAdjustCallback cb, void* user_data\n                      );\n\n        virtual ~LevMarqSparse();\n\n        virtual void run( int npoints, // number of points\n                         int ncameras, // number of cameras\n                         int nPointParams, // number of params per one point  (3 in case of 3D points)\n                         int nCameraParams, // number of parameters per one camera\n                         int nErrParams, // number of parameters in measurement vector\n                         // for 1 point at one camera (2 in case of 2D projections)\n                         Mat& visibility, // visibility matrix. rows correspond to points, columns correspond to cameras\n                         // 1 - point is visible for the camera, 0 - invisible\n                         Mat& P0, // starting vector of parameters, first cameras then points\n                         Mat& X, // measurements, in order of visibility. non visible cases are skipped\n                         TermCriteria criteria, // termination criteria\n\n                         // callback for estimation of Jacobian matrices\n                         void (CV_CDECL * fjac)(int i, int j, Mat& point_params,\n                                                Mat& cam_params, Mat& A, Mat& B, void* data),\n                         // callback for estimation of backprojection errors\n                         void (CV_CDECL * func)(int i, int j, Mat& point_params,\n                                                Mat& cam_params, Mat& estim, void* data),\n                         void* data // user-specific data passed to the callbacks\n                         );\n\n        virtual void clear();\n\n        // useful function to do simple bundle adjustment tasks\n        static void bundleAdjust(vector<Point3d>& points, // positions of points in global coordinate system (input and output)\n                                 const vector<vector<Point2d> >& imagePoints, // projections of 3d points for every camera\n                                 const vector<vector<int> >& visibility, // visibility of 3d points for every camera\n                                 vector<Mat>& cameraMatrix, // intrinsic matrices of all cameras (input and output)\n                                 vector<Mat>& R, // rotation matrices of all cameras (input and output)\n                                 vector<Mat>& T, // translation vector of all cameras (input and output)\n                                 vector<Mat>& distCoeffs, // distortion coefficients of all cameras (input and output)\n                                 const TermCriteria& criteria=\n                                 TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON),\n                                 BundleAdjustCallback cb = 0, void* user_data = 0);\n\n    public:\n        virtual void optimize(CvMat &_vis); //main function that runs minimization\n\n        //iteratively asks for measurement for visible camera-point pairs\n        void ask_for_proj(CvMat &_vis,bool once=false);\n        //iteratively asks for Jacobians for every camera_point pair\n        void ask_for_projac(CvMat &_vis);\n\n        CvMat* err; //error X-hX\n        double prevErrNorm, errNorm;\n        double lambda;\n        CvTermCriteria criteria;\n        int iters;\n\n        CvMat** U; //size of array is equal to number of cameras\n        CvMat** V; //size of array is equal to number of points\n        CvMat** inv_V_star; //inverse of V*\n\n        CvMat** A;\n        CvMat** B;\n        CvMat** W;\n\n        CvMat* X; //measurement\n        CvMat* hX; //current measurement extimation given new parameter vector\n\n        CvMat* prevP; //current already accepted parameter.\n        CvMat* P; // parameters used to evaluate function with new params\n        // this parameters may be rejected\n\n        CvMat* deltaP; //computed increase of parameters (result of normal system solution )\n\n        CvMat** ea; // sum_i  AijT * e_ij , used as right part of normal equation\n        // length of array is j = number of cameras\n        CvMat** eb; // sum_j  BijT * e_ij , used as right part of normal equation\n        // length of array is i = number of points\n\n        CvMat** Yj; //length of array is i = num_points\n\n        CvMat* S; //big matrix of block Sjk  , each block has size num_cam_params x num_cam_params\n\n        CvMat* JtJ_diag; //diagonal of JtJ,  used to backup diagonal elements before augmentation\n\n        CvMat* Vis_index; // matrix which element is index of measurement for point i and camera j\n\n        int num_cams;\n        int num_points;\n        int num_err_param;\n        int num_cam_param;\n        int num_point_param;\n\n        //target function and jacobian pointers, which needs to be initialized\n        void (*fjac)(int i, int j, Mat& point_params, Mat& cam_params, Mat& A, Mat& B, void* data);\n        void (*func)(int i, int j, Mat& point_params, Mat& cam_params, Mat& estim, void* data);\n\n        void* data;\n\n        BundleAdjustCallback cb;\n        void* user_data;\n    };\n\n    CV_EXPORTS_W int chamerMatching( Mat& img, Mat& templ,\n                                  CV_OUT vector<vector<Point> >& results, CV_OUT vector<float>& cost,\n                                  double templScale=1, int maxMatches = 20,\n                                  double minMatchDistance = 1.0, int padX = 3,\n                                  int padY = 3, int scales = 5, double minScale = 0.6, double maxScale = 1.6,\n                                  double orientationWeight = 0.5, double truncate = 20);\n\n\n    class CV_EXPORTS_W StereoVar\n    {\n    public:\n        // Flags\n        enum {USE_INITIAL_DISPARITY = 1, USE_EQUALIZE_HIST = 2, USE_SMART_ID = 4, USE_AUTO_PARAMS = 8, USE_MEDIAN_FILTERING = 16};\n        enum {CYCLE_O, CYCLE_V};\n        enum {PENALIZATION_TICHONOV, PENALIZATION_CHARBONNIER, PENALIZATION_PERONA_MALIK};\n\n        //! the default constructor\n        CV_WRAP StereoVar();\n\n        //! the full constructor taking all the necessary algorithm parameters\n        CV_WRAP StereoVar(int levels, double pyrScale, int nIt, int minDisp, int maxDisp, int poly_n, double poly_sigma, float fi, float lambda, int penalization, int cycle, int flags);\n\n        //! the destructor\n        virtual ~StereoVar();\n\n        //! the stereo correspondence operator that computes disparity map for the specified rectified stereo pair\n        CV_WRAP_AS(compute) virtual void operator()(const Mat& left, const Mat& right, CV_OUT Mat& disp);\n\n        CV_PROP_RW int      levels;\n        CV_PROP_RW double   pyrScale;\n        CV_PROP_RW int      nIt;\n        CV_PROP_RW int      minDisp;\n        CV_PROP_RW int      maxDisp;\n        CV_PROP_RW int      poly_n;\n        CV_PROP_RW double   poly_sigma;\n        CV_PROP_RW float    fi;\n        CV_PROP_RW float    lambda;\n        CV_PROP_RW int      penalization;\n        CV_PROP_RW int      cycle;\n        CV_PROP_RW int      flags;\n\n    private:\n        void autoParams();\n        void FMG(Mat &I1, Mat &I2, Mat &I2x, Mat &u, int level);\n        void VCycle_MyFAS(Mat &I1_h, Mat &I2_h, Mat &I2x_h, Mat &u_h, int level);\n        void VariationalSolver(Mat &I1_h, Mat &I2_h, Mat &I2x_h, Mat &u_h, int level);\n    };\n\n    CV_EXPORTS void polyfit(const Mat& srcx, const Mat& srcy, Mat& dst, int order);\n\n    class CV_EXPORTS Directory\n    {\n        public:\n            static std::vector<std::string> GetListFiles  ( const std::string& path, const std::string & exten = \"*\", bool addPath = true );\n            static std::vector<std::string> GetListFilesR ( const std::string& path, const std::string & exten = \"*\", bool addPath = true );\n            static std::vector<std::string> GetListFolders( const std::string& path, const std::string & exten = \"*\", bool addPath = true );\n    };\n\n    /*\n     * Generation of a set of different colors by the following way:\n     * 1) generate more then need colors (in \"factor\" times) in RGB,\n     * 2) convert them to Lab,\n     * 3) choose the needed count of colors from the set that are more different from\n     *    each other,\n     * 4) convert the colors back to RGB\n     */\n    CV_EXPORTS void generateColors( std::vector<Scalar>& colors, size_t count, size_t factor=100 );\n\n\n    /*\n     *  Estimate the rigid body motion from frame0 to frame1. The method is based on the paper\n     *  \"Real-Time Visual Odometry from Dense RGB-D Images\", F. Steinbucker, J. Strum, D. Cremers, ICCV, 2011.\n     */\n    enum { ROTATION          = 1,\n           TRANSLATION       = 2,\n           RIGID_BODY_MOTION = 4\n         };\n    CV_EXPORTS bool RGBDOdometry( Mat& Rt, const Mat& initRt,\n                                  const Mat& image0, const Mat& depth0, const Mat& mask0,\n                                  const Mat& image1, const Mat& depth1, const Mat& mask1,\n                                  const Mat& cameraMatrix, float minDepth=0.f, float maxDepth=4.f, float maxDepthDiff=0.07f,\n                                  const std::vector<int>& iterCounts=std::vector<int>(),\n                                  const std::vector<float>& minGradientMagnitudes=std::vector<float>(),\n                                  int transformType=RIGID_BODY_MOTION );\n\n    /**\n    *Bilinear interpolation technique.\n    *\n    *The value of a desired cortical pixel is obtained through a bilinear interpolation of the values\n    *of the four nearest neighbouring Cartesian pixels to the center of the RF.\n    *The same principle is applied to the inverse transformation.\n    *\n    *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5\n    */\n    class CV_EXPORTS LogPolar_Interp\n    {\n    public:\n\n        LogPolar_Interp() {}\n\n        /**\n        *Constructor\n        *\\param w the width of the input image\n        *\\param h the height of the input image\n        *\\param center the transformation center: where the output precision is maximal\n        *\\param R the number of rings of the cortical image (default value 70 pixel)\n        *\\param ro0 the radius of the blind spot (default value 3 pixel)\n        *\\param full \\a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle.\n        *            \\a 0 means that the retinal image is computed within the inscribed circle.\n        *\\param S the number of sectors of the cortical image (default value 70 pixel).\n        *         Its value is usually internally computed to obtain a pixel aspect ratio equals to 1.\n        *\\param sp \\a 1 (default value) means that the parameter \\a S is internally computed.\n        *          \\a 0 means that the parameter \\a S is provided by the user.\n        */\n        LogPolar_Interp(int w, int h, Point2i center, int R=70, double ro0=3.0,\n                        int interp=INTER_LINEAR, int full=1, int S=117, int sp=1);\n        /**\n        *Transformation from Cartesian image to cortical (log-polar) image.\n        *\\param source the Cartesian image\n        *\\return the transformed image (cortical image)\n        */\n        const Mat to_cortical(const Mat &source);\n        /**\n        *Transformation from cortical image to retinal (inverse log-polar) image.\n        *\\param source the cortical image\n        *\\return the transformed image (retinal image)\n        */\n        const Mat to_cartesian(const Mat &source);\n        /**\n        *Destructor\n        */\n        ~LogPolar_Interp();\n\n    protected:\n\n        Mat Rsri;\n        Mat Csri;\n\n        int S, R, M, N;\n        int top, bottom,left,right;\n        double ro0, romax, a, q;\n        int interp;\n\n        Mat ETAyx;\n        Mat CSIyx;\n\n        void create_map(int M, int N, int R, int S, double ro0);\n    };\n\n    /**\n    *Overlapping circular receptive fields technique\n    *\n    *The Cartesian plane is divided in two regions: the fovea and the periphery.\n    *The fovea (oversampling) is handled by using the bilinear interpolation technique described above, whereas in\n    *the periphery we use the overlapping Gaussian circular RFs.\n    *\n    *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5\n    */\n    class CV_EXPORTS LogPolar_Overlapping\n    {\n    public:\n        LogPolar_Overlapping() {}\n\n        /**\n        *Constructor\n        *\\param w the width of the input image\n        *\\param h the height of the input image\n        *\\param center the transformation center: where the output precision is maximal\n        *\\param R the number of rings of the cortical image (default value 70 pixel)\n        *\\param ro0 the radius of the blind spot (default value 3 pixel)\n        *\\param full \\a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle.\n        *            \\a 0 means that the retinal image is computed within the inscribed circle.\n        *\\param S the number of sectors of the cortical image (default value 70 pixel).\n        *         Its value is usually internally computed to obtain a pixel aspect ratio equals to 1.\n        *\\param sp \\a 1 (default value) means that the parameter \\a S is internally computed.\n        *          \\a 0 means that the parameter \\a S is provided by the user.\n        */\n        LogPolar_Overlapping(int w, int h, Point2i center, int R=70,\n                             double ro0=3.0, int full=1, int S=117, int sp=1);\n        /**\n        *Transformation from Cartesian image to cortical (log-polar) image.\n        *\\param source the Cartesian image\n        *\\return the transformed image (cortical image)\n        */\n        const Mat to_cortical(const Mat &source);\n        /**\n        *Transformation from cortical image to retinal (inverse log-polar) image.\n        *\\param source the cortical image\n        *\\return the transformed image (retinal image)\n        */\n        const Mat to_cartesian(const Mat &source);\n        /**\n        *Destructor\n        */\n        ~LogPolar_Overlapping();\n\n    protected:\n\n        Mat Rsri;\n        Mat Csri;\n        vector<int> Rsr;\n        vector<int> Csr;\n        vector<double> Wsr;\n\n        int S, R, M, N, ind1;\n        int top, bottom,left,right;\n        double ro0, romax, a, q;\n\n        struct kernel\n        {\n            kernel() { w = 0; }\n            vector<double> weights;\n            int w;\n        };\n\n        Mat ETAyx;\n        Mat CSIyx;\n        vector<kernel> w_ker_2D;\n\n        void create_map(int M, int N, int R, int S, double ro0);\n    };\n\n    /**\n    * Adjacent receptive fields technique\n    *\n    *All the Cartesian pixels, whose coordinates in the cortical domain share the same integer part, are assigned to the same RF.\n    *The precision of the boundaries of the RF can be improved by breaking each pixel into subpixels and assigning each of them to the correct RF.\n    *This technique is implemented from: Traver, V., Pla, F.: Log-polar mapping template design: From task-level requirements\n    *to geometry parameters. Image Vision Comput. 26(10) (2008) 1354-1370\n    *\n    *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5\n    */\n    class CV_EXPORTS LogPolar_Adjacent\n    {\n    public:\n        LogPolar_Adjacent() {}\n\n        /**\n         *Constructor\n         *\\param w the width of the input image\n         *\\param h the height of the input image\n         *\\param center the transformation center: where the output precision is maximal\n         *\\param R the number of rings of the cortical image (default value 70 pixel)\n         *\\param ro0 the radius of the blind spot (default value 3 pixel)\n         *\\param smin the size of the subpixel (default value 0.25 pixel)\n         *\\param full \\a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle.\n         *            \\a 0 means that the retinal image is computed within the inscribed circle.\n         *\\param S the number of sectors of the cortical image (default value 70 pixel).\n         *         Its value is usually internally computed to obtain a pixel aspect ratio equals to 1.\n         *\\param sp \\a 1 (default value) means that the parameter \\a S is internally computed.\n         *          \\a 0 means that the parameter \\a S is provided by the user.\n         */\n        LogPolar_Adjacent(int w, int h, Point2i center, int R=70, double ro0=3.0, double smin=0.25, int full=1, int S=117, int sp=1);\n        /**\n         *Transformation from Cartesian image to cortical (log-polar) image.\n         *\\param source the Cartesian image\n         *\\return the transformed image (cortical image)\n         */\n        const Mat to_cortical(const Mat &source);\n        /**\n         *Transformation from cortical image to retinal (inverse log-polar) image.\n         *\\param source the cortical image\n         *\\return the transformed image (retinal image)\n         */\n        const Mat to_cartesian(const Mat &source);\n        /**\n         *Destructor\n         */\n        ~LogPolar_Adjacent();\n\n    protected:\n        struct pixel\n        {\n            pixel() { u = v = 0; a = 0.; }\n            int u;\n            int v;\n            double a;\n        };\n        int S, R, M, N;\n        int top, bottom,left,right;\n        double ro0, romax, a, q;\n        vector<vector<pixel> > L;\n        vector<double> A;\n\n        void subdivide_recursively(double x, double y, int i, int j, double length, double smin);\n        bool get_uv(double x, double y, int&u, int&v);\n        void create_map(int M, int N, int R, int S, double ro0, double smin);\n    };\n\n    CV_EXPORTS Mat subspaceProject(InputArray W, InputArray mean, InputArray src);\n    CV_EXPORTS Mat subspaceReconstruct(InputArray W, InputArray mean, InputArray src);\n\n    class CV_EXPORTS LDA\n    {\n    public:\n        // Initializes a LDA with num_components (default 0) and specifies how\n        // samples are aligned (default dataAsRow=true).\n        LDA(int num_components = 0) :\n            _num_components(num_components) {};\n\n        // Initializes and performs a Discriminant Analysis with Fisher's\n        // Optimization Criterion on given data in src and corresponding labels\n        // in labels. If 0 (or less) number of components are given, they are\n        // automatically determined for given data in computation.\n        LDA(const Mat& src, vector<int> labels,\n                int num_components = 0) :\n                    _num_components(num_components)\n        {\n            this->compute(src, labels); //! compute eigenvectors and eigenvalues\n        }\n\n        // Initializes and performs a Discriminant Analysis with Fisher's\n        // Optimization Criterion on given data in src and corresponding labels\n        // in labels. If 0 (or less) number of components are given, they are\n        // automatically determined for given data in computation.\n        LDA(InputArrayOfArrays src, InputArray labels,\n                int num_components = 0) :\n                    _num_components(num_components)\n        {\n            this->compute(src, labels); //! compute eigenvectors and eigenvalues\n        }\n\n        // Serializes this object to a given filename.\n        void save(const string& filename) const;\n\n        // Deserializes this object from a given filename.\n        void load(const string& filename);\n\n        // Serializes this object to a given cv::FileStorage.\n        void save(FileStorage& fs) const;\n\n            // Deserializes this object from a given cv::FileStorage.\n        void load(const FileStorage& node);\n\n        // Destructor.\n        ~LDA() {}\n\n        //! Compute the discriminants for data in src and labels.\n        void compute(InputArrayOfArrays src, InputArray labels);\n\n        // Projects samples into the LDA subspace.\n        Mat project(InputArray src);\n\n        // Reconstructs projections from the LDA subspace.\n        Mat reconstruct(InputArray src);\n\n        // Returns the eigenvectors of this LDA.\n        Mat eigenvectors() const { return _eigenvectors; };\n\n        // Returns the eigenvalues of this LDA.\n        Mat eigenvalues() const { return _eigenvalues; }\n\n    protected:\n        bool _dataAsRow;\n        int _num_components;\n        Mat _eigenvectors;\n        Mat _eigenvalues;\n\n        void lda(InputArrayOfArrays src, InputArray labels);\n    };\n\n    class CV_EXPORTS_W FaceRecognizer : public Algorithm\n    {\n    public:\n        //! virtual destructor\n        virtual ~FaceRecognizer() {}\n\n        // Trains a FaceRecognizer.\n        CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels) = 0;\n\n        // Updates a FaceRecognizer.\n        CV_WRAP void update(InputArrayOfArrays src, InputArray labels);\n\n        // Gets a prediction from a FaceRecognizer.\n        virtual int predict(InputArray src) const = 0;\n\n        // Predicts the label and confidence for a given sample.\n        CV_WRAP virtual void predict(InputArray src, CV_OUT int &label, CV_OUT double &confidence) const = 0;\n\n        // Serializes this object to a given filename.\n        CV_WRAP virtual void save(const string& filename) const;\n\n        // Deserializes this object from a given filename.\n        CV_WRAP virtual void load(const string& filename);\n\n        // Serializes this object to a given cv::FileStorage.\n        virtual void save(FileStorage& fs) const = 0;\n\n        // Deserializes this object from a given cv::FileStorage.\n        virtual void load(const FileStorage& fs) = 0;\n\n    };\n\n    CV_EXPORTS_W Ptr<FaceRecognizer> createEigenFaceRecognizer(int num_components = 0, double threshold = DBL_MAX);\n    CV_EXPORTS_W Ptr<FaceRecognizer> createFisherFaceRecognizer(int num_components = 0, double threshold = DBL_MAX);\n    CV_EXPORTS_W Ptr<FaceRecognizer> createLBPHFaceRecognizer(int radius=1, int neighbors=8,\n                                                            int grid_x=8, int grid_y=8, double threshold = DBL_MAX);\n\n    enum\n    {\n        COLORMAP_AUTUMN = 0,\n        COLORMAP_BONE = 1,\n        COLORMAP_JET = 2,\n        COLORMAP_WINTER = 3,\n        COLORMAP_RAINBOW = 4,\n        COLORMAP_OCEAN = 5,\n        COLORMAP_SUMMER = 6,\n        COLORMAP_SPRING = 7,\n        COLORMAP_COOL = 8,\n        COLORMAP_HSV = 9,\n        COLORMAP_PINK = 10,\n        COLORMAP_HOT = 11\n    };\n\n    CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap);\n\n    CV_EXPORTS bool initModule_contrib();\n}\n\n#include \"opencv2/contrib/retina.hpp\"\n\n#include \"opencv2/contrib/openfabmap.hpp\"\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/contrib/detection_based_tracker.hpp",
    "content": "#pragma once\n\n#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID)\n\n#include <opencv2/core/core.hpp>\n#include <opencv2/objdetect/objdetect.hpp>\n\n#include <vector>\n\nclass DetectionBasedTracker\n{\n    public:\n        struct Parameters\n        {\n            int minObjectSize;\n            int maxObjectSize;\n            double scaleFactor;\n            int maxTrackLifetime;\n            int minNeighbors;\n            int minDetectionPeriod; //the minimal time between run of the big object detector (on the whole frame) in ms (1000 mean 1 sec), default=0\n\n            Parameters();\n        };\n\n        DetectionBasedTracker(const std::string& cascadeFilename, const Parameters& params);\n        virtual ~DetectionBasedTracker();\n\n        virtual bool run();\n        virtual void stop();\n        virtual void resetTracking();\n\n        virtual void process(const cv::Mat& imageGray);\n\n        bool setParameters(const Parameters& params);\n        const Parameters& getParameters();\n\n\n        typedef std::pair<cv::Rect, int> Object;\n        virtual void getObjects(std::vector<cv::Rect>& result) const;\n        virtual void getObjects(std::vector<Object>& result) const;\n\n    protected:\n        class SeparateDetectionWork;\n        cv::Ptr<SeparateDetectionWork> separateDetectionWork;\n        friend void* workcycleObjectDetectorFunction(void* p);\n\n\n        struct InnerParameters\n        {\n            int numLastPositionsToTrack;\n            int numStepsToWaitBeforeFirstShow;\n            int numStepsToTrackWithoutDetectingIfObjectHasNotBeenShown;\n            int numStepsToShowWithoutDetecting;\n\n            float coeffTrackingWindowSize;\n            float coeffObjectSizeToTrack;\n            float coeffObjectSpeedUsingInPrediction;\n\n            InnerParameters();\n        };\n        Parameters parameters;\n        InnerParameters innerParameters;\n\n        struct TrackedObject\n        {\n            typedef std::vector<cv::Rect> PositionsVector;\n\n            PositionsVector lastPositions;\n\n            int numDetectedFrames;\n            int numFramesNotDetected;\n            int id;\n\n            TrackedObject(const cv::Rect& rect):numDetectedFrames(1), numFramesNotDetected(0)\n            {\n                lastPositions.push_back(rect);\n                id=getNextId();\n            };\n\n            static int getNextId()\n            {\n                static int _id=0;\n                return _id++;\n            }\n        };\n\n        int numTrackedSteps;\n        std::vector<TrackedObject> trackedObjects;\n\n        std::vector<float> weightsPositionsSmoothing;\n        std::vector<float> weightsSizesSmoothing;\n\n        cv::CascadeClassifier cascadeForTracking;\n\n\n        void updateTrackedObjects(const std::vector<cv::Rect>& detectedObjects);\n        cv::Rect calcTrackedObjectPositionToShow(int i) const;\n        void detectInRegion(const cv::Mat& img, const cv::Rect& r, std::vector<cv::Rect>& detectedObjectsInRegions);\n};\n\nnamespace cv\n{\n    using ::DetectionBasedTracker;\n} //end of cv namespace\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/contrib/hybridtracker.hpp",
    "content": "//*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                                License Agreement\n//                       For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HYBRIDTRACKER_H_\n#define __OPENCV_HYBRIDTRACKER_H_\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/operations.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/video/tracking.hpp\"\n#include \"opencv2/ml/ml.hpp\"\n\n#ifdef __cplusplus\n\nnamespace cv\n{\n\n// Motion model for tracking algorithm. Currently supports objects that do not move much.\n// To add Kalman filter\nstruct CV_EXPORTS CvMotionModel\n{\n    enum {LOW_PASS_FILTER = 0, KALMAN_FILTER = 1, EM = 2};\n\n    CvMotionModel()\n    {\n    }\n\n    float low_pass_gain;    // low pass gain\n};\n\n// Mean Shift Tracker parameters for specifying use of HSV channel and CamShift parameters.\nstruct CV_EXPORTS CvMeanShiftTrackerParams\n{\n    enum {  H = 0, HS = 1, HSV = 2  };\n    CvMeanShiftTrackerParams(int tracking_type = CvMeanShiftTrackerParams::HS,\n            CvTermCriteria term_crit = CvTermCriteria());\n\n    int tracking_type;\n    vector<float> h_range;\n    vector<float> s_range;\n    vector<float> v_range;\n    CvTermCriteria term_crit;\n};\n\n// Feature tracking parameters\nstruct CV_EXPORTS CvFeatureTrackerParams\n{\n    enum {  SIFT = 0, SURF = 1, OPTICAL_FLOW = 2 };\n    CvFeatureTrackerParams(int featureType = 0, int windowSize = 0)\n    {\n        feature_type = featureType;\n        window_size = windowSize;\n    }\n\n    int feature_type; // Feature type to use\n    int window_size; // Window size in pixels around which to search for new window\n};\n\n// Hybrid Tracking parameters for specifying weights of individual trackers and motion model.\nstruct CV_EXPORTS CvHybridTrackerParams\n{\n    CvHybridTrackerParams(float ft_tracker_weight = 0.5, float ms_tracker_weight = 0.5,\n            CvFeatureTrackerParams ft_params = CvFeatureTrackerParams(),\n            CvMeanShiftTrackerParams ms_params = CvMeanShiftTrackerParams(),\n            CvMotionModel model = CvMotionModel());\n\n    float ft_tracker_weight;\n    float ms_tracker_weight;\n    CvFeatureTrackerParams ft_params;\n    CvMeanShiftTrackerParams ms_params;\n    int motion_model;\n    float low_pass_gain;\n};\n\n// Performs Camshift using parameters from MeanShiftTrackerParams\nclass CV_EXPORTS CvMeanShiftTracker\n{\nprivate:\n    Mat hsv, hue;\n    Mat backproj;\n    Mat mask, maskroi;\n    MatND hist;\n    Rect prev_trackwindow;\n    RotatedRect prev_trackbox;\n    Point2f prev_center;\n\npublic:\n    CvMeanShiftTrackerParams params;\n\n    CvMeanShiftTracker();\n    explicit CvMeanShiftTracker(CvMeanShiftTrackerParams _params);\n    ~CvMeanShiftTracker();\n    void newTrackingWindow(Mat image, Rect selection);\n    RotatedRect updateTrackingWindow(Mat image);\n    Mat getHistogramProjection(int type);\n    void setTrackingWindow(Rect _window);\n    Rect getTrackingWindow();\n    RotatedRect getTrackingEllipse();\n    Point2f getTrackingCenter();\n};\n\n// Performs SIFT/SURF feature tracking using parameters from FeatureTrackerParams\nclass CV_EXPORTS CvFeatureTracker\n{\nprivate:\n    Ptr<Feature2D> dd;\n    Ptr<DescriptorMatcher> matcher;\n    vector<DMatch> matches;\n\n    Mat prev_image;\n    Mat prev_image_bw;\n    Rect prev_trackwindow;\n    Point2d prev_center;\n\n    int ittr;\n    vector<Point2f> features[2];\n\npublic:\n    Mat disp_matches;\n    CvFeatureTrackerParams params;\n\n    CvFeatureTracker();\n    explicit CvFeatureTracker(CvFeatureTrackerParams params);\n    ~CvFeatureTracker();\n    void newTrackingWindow(Mat image, Rect selection);\n    Rect updateTrackingWindow(Mat image);\n    Rect updateTrackingWindowWithSIFT(Mat image);\n    Rect updateTrackingWindowWithFlow(Mat image);\n    void setTrackingWindow(Rect _window);\n    Rect getTrackingWindow();\n    Point2f getTrackingCenter();\n};\n\n// Performs Hybrid Tracking and combines individual trackers using EM or filters\nclass CV_EXPORTS CvHybridTracker\n{\nprivate:\n    CvMeanShiftTracker* mstracker;\n    CvFeatureTracker* fttracker;\n\n    CvMat* samples;\n    CvMat* labels;\n\n    Rect prev_window;\n    Point2f prev_center;\n    Mat prev_proj;\n    RotatedRect trackbox;\n\n    int ittr;\n    Point2f curr_center;\n\n    inline float getL2Norm(Point2f p1, Point2f p2);\n    Mat getDistanceProjection(Mat image, Point2f center);\n    Mat getGaussianProjection(Mat image, int ksize, double sigma, Point2f center);\n    void updateTrackerWithEM(Mat image);\n    void updateTrackerWithLowPassFilter(Mat image);\n\npublic:\n    CvHybridTrackerParams params;\n    CvHybridTracker();\n    explicit CvHybridTracker(CvHybridTrackerParams params);\n    ~CvHybridTracker();\n\n    void newTracker(Mat image, Rect selection);\n    void updateTracker(Mat image);\n    Rect getTrackingWindow();\n};\n\ntypedef CvMotionModel MotionModel;\ntypedef CvMeanShiftTrackerParams MeanShiftTrackerParams;\ntypedef CvFeatureTrackerParams FeatureTrackerParams;\ntypedef CvHybridTrackerParams HybridTrackerParams;\ntypedef CvMeanShiftTracker MeanShiftTracker;\ntypedef CvFeatureTracker FeatureTracker;\ntypedef CvHybridTracker HybridTracker;\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/contrib/openfabmap.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n// This file originates from the openFABMAP project:\n// [http://code.google.com/p/openfabmap/]\n//\n// For published work which uses all or part of OpenFABMAP, please cite:\n// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6224843]\n//\n// Original Algorithm by Mark Cummins and Paul Newman:\n// [http://ijr.sagepub.com/content/27/6/647.short]\n// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5613942]\n// [http://ijr.sagepub.com/content/30/9/1100.abstract]\n//\n//                           License Agreement\n//\n// Copyright (C) 2012 Arren Glover [aj.glover@qut.edu.au] and\n//                    Will Maddern [w.maddern@qut.edu.au], all rights reserved.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPENFABMAP_H_\n#define __OPENCV_OPENFABMAP_H_\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n\n#include <vector>\n#include <list>\n#include <map>\n#include <set>\n#include <valarray>\n\nnamespace cv {\n\nnamespace of2 {\n\nusing std::list;\nusing std::map;\nusing std::multiset;\n\n/*\n    Return data format of a FABMAP compare call\n*/\nstruct CV_EXPORTS IMatch {\n\n    IMatch() :\n        queryIdx(-1), imgIdx(-1), likelihood(-DBL_MAX), match(-DBL_MAX) {\n    }\n    IMatch(int _queryIdx, int _imgIdx, double _likelihood, double _match) :\n        queryIdx(_queryIdx), imgIdx(_imgIdx), likelihood(_likelihood), match(\n                _match) {\n    }\n\n    int queryIdx;    //query index\n    int imgIdx;      //test index\n\n    double likelihood;  //raw loglikelihood\n    double match;      //normalised probability\n\n    bool operator<(const IMatch& m) const {\n        return match < m.match;\n    }\n\n};\n\n/*\n    Base FabMap class. Each FabMap method inherits from this class.\n*/\nclass CV_EXPORTS FabMap {\npublic:\n\n    //FabMap options\n    enum {\n        MEAN_FIELD = 1,\n        SAMPLED = 2,\n        NAIVE_BAYES = 4,\n        CHOW_LIU = 8,\n        MOTION_MODEL = 16\n    };\n\n    FabMap(const Mat& clTree, double PzGe, double PzGNe, int flags,\n            int numSamples = 0);\n    virtual ~FabMap();\n\n    //methods to add training data for sampling method\n    virtual void addTraining(const Mat& queryImgDescriptor);\n    virtual void addTraining(const vector<Mat>& queryImgDescriptors);\n\n    //methods to add to the test data\n    virtual void add(const Mat& queryImgDescriptor);\n    virtual void add(const vector<Mat>& queryImgDescriptors);\n\n    //accessors\n    const vector<Mat>& getTrainingImgDescriptors() const;\n    const vector<Mat>& getTestImgDescriptors() const;\n\n    //Main FabMap image comparison\n    void compare(const Mat& queryImgDescriptor,\n            vector<IMatch>& matches, bool addQuery = false,\n            const Mat& mask = Mat());\n    void compare(const Mat& queryImgDescriptor,\n            const Mat& testImgDescriptors, vector<IMatch>& matches,\n            const Mat& mask = Mat());\n    void compare(const Mat& queryImgDescriptor,\n            const vector<Mat>& testImgDescriptors,\n            vector<IMatch>& matches, const Mat& mask = Mat());\n    void compare(const vector<Mat>& queryImgDescriptors, vector<\n            IMatch>& matches, bool addQuery = false, const Mat& mask =\n            Mat());\n    void compare(const vector<Mat>& queryImgDescriptors,\n            const vector<Mat>& testImgDescriptors,\n            vector<IMatch>& matches, const Mat& mask = Mat());\n\nprotected:\n\n    void compareImgDescriptor(const Mat& queryImgDescriptor,\n            int queryIndex, const vector<Mat>& testImgDescriptors,\n            vector<IMatch>& matches);\n\n    void addImgDescriptor(const Mat& queryImgDescriptor);\n\n    //the getLikelihoods method is overwritten for each different FabMap\n    //method.\n    virtual void getLikelihoods(const Mat& queryImgDescriptor,\n            const vector<Mat>& testImgDescriptors,\n            vector<IMatch>& matches);\n    virtual double getNewPlaceLikelihood(const Mat& queryImgDescriptor);\n\n    //turn likelihoods into probabilities (also add in motion model if used)\n    void normaliseDistribution(vector<IMatch>& matches);\n\n    //Chow-Liu Tree\n    int pq(int q);\n    double Pzq(int q, bool zq);\n    double PzqGzpq(int q, bool zq, bool zpq);\n\n    //FAB-MAP Core\n    double PzqGeq(bool zq, bool eq);\n    double PeqGL(int q, bool Lzq, bool eq);\n    double PzqGL(int q, bool zq, bool zpq, bool Lzq);\n    double PzqGzpqL(int q, bool zq, bool zpq, bool Lzq);\n    double (FabMap::*PzGL)(int q, bool zq, bool zpq, bool Lzq);\n\n    //data\n    Mat clTree;\n    vector<Mat> trainingImgDescriptors;\n    vector<Mat> testImgDescriptors;\n    vector<IMatch> priorMatches;\n\n    //parameters\n    double PzGe;\n    double PzGNe;\n    double Pnew;\n\n    double mBias;\n    double sFactor;\n\n    int flags;\n    int numSamples;\n\n};\n\n/*\n    The original FAB-MAP algorithm, developed based on:\n    http://ijr.sagepub.com/content/27/6/647.short\n*/\nclass CV_EXPORTS FabMap1: public FabMap {\npublic:\n    FabMap1(const Mat& clTree, double PzGe, double PzGNe, int flags,\n            int numSamples = 0);\n    virtual ~FabMap1();\nprotected:\n\n    //FabMap1 implementation of likelihood comparison\n    void getLikelihoods(const Mat& queryImgDescriptor, const vector<\n            Mat>& testImgDescriptors, vector<IMatch>& matches);\n};\n\n/*\n    A computationally faster version of the original FAB-MAP algorithm. A look-\n    up-table is used to precompute many of the reoccuring calculations\n*/\nclass CV_EXPORTS FabMapLUT: public FabMap {\npublic:\n    FabMapLUT(const Mat& clTree, double PzGe, double PzGNe,\n            int flags, int numSamples = 0, int precision = 6);\n    virtual ~FabMapLUT();\nprotected:\n\n    //FabMap look-up-table implementation of the likelihood comparison\n    void getLikelihoods(const Mat& queryImgDescriptor, const vector<\n            Mat>& testImgDescriptors, vector<IMatch>& matches);\n\n    //precomputed data\n    int (*table)[8];\n\n    //data precision\n    int precision;\n};\n\n/*\n    The Accelerated FAB-MAP algorithm, developed based on:\n    http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5613942\n*/\nclass CV_EXPORTS FabMapFBO: public FabMap {\npublic:\n    FabMapFBO(const Mat& clTree, double PzGe, double PzGNe, int flags,\n            int numSamples = 0, double rejectionThreshold = 1e-8, double PsGd =\n                    1e-8, int bisectionStart = 512, int bisectionIts = 9);\n    virtual ~FabMapFBO();\n\nprotected:\n\n    //FabMap Fast Bail-out implementation of the likelihood comparison\n    void getLikelihoods(const Mat& queryImgDescriptor, const vector<\n            Mat>& testImgDescriptors, vector<IMatch>& matches);\n\n    //stucture used to determine word comparison order\n    struct WordStats {\n        WordStats() :\n            q(0), info(0), V(0), M(0) {\n        }\n\n        WordStats(int _q, double _info) :\n            q(_q), info(_info), V(0), M(0) {\n        }\n\n        int q;\n        double info;\n        mutable double V;\n        mutable double M;\n\n        bool operator<(const WordStats& w) const {\n            return info < w.info;\n        }\n\n    };\n\n    //private fast bail-out necessary functions\n    void setWordStatistics(const Mat& queryImgDescriptor, multiset<WordStats>& wordData);\n    double limitbisection(double v, double m);\n    double bennettInequality(double v, double m, double delta);\n    static bool compInfo(const WordStats& first, const WordStats& second);\n\n    //parameters\n    double PsGd;\n    double rejectionThreshold;\n    int bisectionStart;\n    int bisectionIts;\n};\n\n/*\n    The FAB-MAP2.0 algorithm, developed based on:\n    http://ijr.sagepub.com/content/30/9/1100.abstract\n*/\nclass CV_EXPORTS FabMap2: public FabMap {\npublic:\n\n    FabMap2(const Mat& clTree, double PzGe, double PzGNe, int flags);\n    virtual ~FabMap2();\n\n    //FabMap2 builds the inverted index and requires an additional training/test\n    //add function\n    void addTraining(const Mat& queryImgDescriptors) {\n        FabMap::addTraining(queryImgDescriptors);\n    }\n    void addTraining(const vector<Mat>& queryImgDescriptors);\n\n    void add(const Mat& queryImgDescriptors) {\n        FabMap::add(queryImgDescriptors);\n    }\n    void add(const vector<Mat>& queryImgDescriptors);\n\nprotected:\n\n    //FabMap2 implementation of the likelihood comparison\n    void getLikelihoods(const Mat& queryImgDescriptor, const vector<\n            Mat>& testImgDescriptors, vector<IMatch>& matches);\n    double getNewPlaceLikelihood(const Mat& queryImgDescriptor);\n\n    //the likelihood function using the inverted index\n    void getIndexLikelihoods(const Mat& queryImgDescriptor, vector<\n                             double>& defaults, map<int, vector<int> >& invertedMap,\n            vector<IMatch>& matches);\n    void addToIndex(const Mat& queryImgDescriptor,\n            vector<double>& defaults,\n            map<int, vector<int> >& invertedMap);\n\n    //data\n    vector<double> d1, d2, d3, d4;\n    vector<vector<int> > children;\n\n    // TODO: inverted map a vector?\n\n    vector<double> trainingDefaults;\n    map<int, vector<int> > trainingInvertedMap;\n\n    vector<double> testDefaults;\n    map<int, vector<int> > testInvertedMap;\n\n};\n/*\n    A Chow-Liu tree is required by FAB-MAP. The Chow-Liu tree provides an\n    estimate of the full distribution of visual words using a minimum spanning\n    tree. The tree is generated through training data.\n*/\nclass CV_EXPORTS ChowLiuTree {\npublic:\n    ChowLiuTree();\n    virtual ~ChowLiuTree();\n\n    //add data to the chow-liu tree before calling make\n    void add(const Mat& imgDescriptor);\n    void add(const vector<Mat>& imgDescriptors);\n\n    const vector<Mat>& getImgDescriptors() const;\n\n    Mat make(double infoThreshold = 0.0);\n\nprivate:\n    vector<Mat> imgDescriptors;\n    Mat mergedImgDescriptors;\n\n    typedef struct info {\n        float score;\n        short word1;\n        short word2;\n    } info;\n\n    //probabilities extracted from mergedImgDescriptors\n    double P(int a, bool za);\n    double JP(int a, bool za, int b, bool zb); //a & b\n    double CP(int a, bool za, int b, bool zb); // a | b\n\n    //calculating mutual information of all edges\n    void createBaseEdges(list<info>& edges, double infoThreshold);\n    double calcMutInfo(int word1, int word2);\n    static bool sortInfoScores(const info& first, const info& second);\n\n    //selecting minimum spanning egdges with maximum information\n    bool reduceEdgesToMinSpan(list<info>& edges);\n\n    //building the tree sctructure\n    Mat buildTree(int root_word, list<info> &edges);\n    void recAddToTree(Mat &cltree, int q, int pq,\n        list<info> &remaining_edges);\n    vector<int> extractChildren(list<info> &remaining_edges, int q);\n\n};\n\n/*\n    A custom vocabulary training method based on:\n    http://www.springerlink.com/content/d1h6j8x552532003/\n*/\nclass CV_EXPORTS BOWMSCTrainer: public BOWTrainer {\npublic:\n    BOWMSCTrainer(double clusterSize = 0.4);\n    virtual ~BOWMSCTrainer();\n\n    // Returns trained vocabulary (i.e. cluster centers).\n    virtual Mat cluster() const;\n    virtual Mat cluster(const Mat& descriptors) const;\n\nprotected:\n\n    double clusterSize;\n\n};\n\n}\n\n}\n\n#endif /* OPENFABMAP_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/contrib/retina.hpp",
    "content": "/*#******************************************************************************\n ** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n **\n ** By downloading, copying, installing or using the software you agree to this license.\n ** If you do not agree to this license, do not download, install,\n ** copy or use the software.\n **\n **\n ** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab.\n ** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping.\n **\n ** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications)\n **\n **  Creation - enhancement process 2007-2011\n **      Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France\n **\n ** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr).\n ** Refer to the following research paper for more information:\n ** Benoit A., Caplier A., Durette B., Herault, J., \"USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING\", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011\n ** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book:\n ** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.\n **\n ** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author :\n ** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper:\n ** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). \"Efficient demosaicing through recursive filtering\", IEEE International Conference on Image Processing ICIP 2007\n ** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions.\n ** ====> more informations in the above cited Jeanny Heraults's book.\n **\n **                          License Agreement\n **               For Open Source Computer Vision Library\n **\n ** Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n ** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved.\n **\n **               For Human Visual System tools (hvstools)\n ** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved.\n **\n ** Third party copyrights are property of their respective owners.\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 ** * Redistributions of source code must retain the above copyright notice,\n **    this list of conditions and the following disclaimer.\n **\n ** * Redistributions in binary form must reproduce the above copyright notice,\n **    this list of conditions and the following disclaimer in the documentation\n **    and/or other materials provided with the distribution.\n **\n ** * The name of the copyright holders 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 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 disclaimed.\n ** In no event shall the Intel Corporation or contributors be liable for any direct,\n ** 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\n ** and on any theory of liability, whether in contract, strict liability,\n ** or tort (including negligence or otherwise) arising in any way out of\n ** the use of this software, even if advised of the possibility of such damage.\n *******************************************************************************/\n\n#ifndef __OPENCV_CONTRIB_RETINA_HPP__\n#define __OPENCV_CONTRIB_RETINA_HPP__\n\n/*\n * Retina.hpp\n *\n *  Created on: Jul 19, 2011\n *      Author: Alexandre Benoit\n */\n\n#include \"opencv2/core/core.hpp\" // for all OpenCV core functionalities access, including cv::Exception support\n#include <valarray>\n\nnamespace cv\n{\n\nenum RETINA_COLORSAMPLINGMETHOD\n{\n    RETINA_COLOR_RANDOM, //!< each pixel position is either R, G or B in a random choice\n    RETINA_COLOR_DIAGONAL,//!< color sampling is RGBRGBRGB..., line 2 BRGBRGBRG..., line 3, GBRGBRGBR...\n    RETINA_COLOR_BAYER//!< standard bayer sampling\n};\n\nclass RetinaFilter;\n\n/**\n * @class Retina a wrapper class which allows the Gipsa/Listic Labs model to be used.\n * This retina model allows spatio-temporal image processing (applied on still images, video sequences).\n * As a summary, these are the retina model properties:\n * => It applies a spectral whithening (mid-frequency details enhancement)\n * => high frequency spatio-temporal noise reduction\n * => low frequency luminance to be reduced (luminance range compression)\n * => local logarithmic luminance compression allows details to be enhanced in low light conditions\n *\n * USE : this model can be used basically for spatio-temporal video effects but also for :\n *      _using the getParvo method output matrix : texture analysiswith enhanced signal to noise ratio and enhanced details robust against input images luminance ranges\n *      _using the getMagno method output matrix : motion analysis also with the previously cited properties\n *\n * for more information, reer to the following papers :\n * Benoit A., Caplier A., Durette B., Herault, J., \"USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING\", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011\n * Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.\n *\n * The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author :\n * _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper:\n * ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). \"Efficient demosaicing through recursive filtering\", IEEE International Conference on Image Processing ICIP 2007\n * _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions.\n * ====> more informations in the above cited Jeanny Heraults's book.\n */\nclass CV_EXPORTS Retina {\n\npublic:\n\n    // parameters structure for better clarity, check explenations on the comments of methods : setupOPLandIPLParvoChannel and setupIPLMagnoChannel\n    struct RetinaParameters{\n        struct OPLandIplParvoParameters{ // Outer Plexiform Layer (OPL) and Inner Plexiform Layer Parvocellular (IplParvo) parameters\n               OPLandIplParvoParameters():colorMode(true),\n                                 normaliseOutput(true),\n                                 photoreceptorsLocalAdaptationSensitivity(0.7f),\n                                 photoreceptorsTemporalConstant(0.5f),\n                                 photoreceptorsSpatialConstant(0.53f),\n                                 horizontalCellsGain(0.0f),\n                                 hcellsTemporalConstant(1.f),\n                                 hcellsSpatialConstant(7.f),\n                                 ganglionCellsSensitivity(0.7f){};// default setup\n               bool colorMode, normaliseOutput;\n               float photoreceptorsLocalAdaptationSensitivity, photoreceptorsTemporalConstant, photoreceptorsSpatialConstant, horizontalCellsGain, hcellsTemporalConstant, hcellsSpatialConstant, ganglionCellsSensitivity;\n           };\n           struct IplMagnoParameters{ // Inner Plexiform Layer Magnocellular channel (IplMagno)\n               IplMagnoParameters():\n                          normaliseOutput(true),\n                          parasolCells_beta(0.f),\n                          parasolCells_tau(0.f),\n                          parasolCells_k(7.f),\n                          amacrinCellsTemporalCutFrequency(1.2f),\n                          V0CompressionParameter(0.95f),\n                          localAdaptintegration_tau(0.f),\n                          localAdaptintegration_k(7.f){};// default setup\n               bool normaliseOutput;\n               float parasolCells_beta, parasolCells_tau, parasolCells_k, amacrinCellsTemporalCutFrequency, V0CompressionParameter, localAdaptintegration_tau, localAdaptintegration_k;\n           };\n            struct OPLandIplParvoParameters OPLandIplParvo;\n            struct IplMagnoParameters IplMagno;\n    };\n\n    /**\n     * Main constructor with most commun use setup : create an instance of color ready retina model\n     * @param inputSize : the input frame size\n     */\n    Retina(Size inputSize);\n\n    /**\n     * Complete Retina filter constructor which allows all basic structural parameters definition\n         * @param inputSize : the input frame size\n     * @param colorMode : the chosen processing mode : with or without color processing\n     * @param colorSamplingMethod specifies which kind of color sampling will be used\n     * @param useRetinaLogSampling activate retina log sampling, if true, the 2 following parameters can be used\n     * @param reductionFactor only usefull if param useRetinaLogSampling=true, specifies the reduction factor of the output frame (as the center (fovea) is high resolution and corners can be underscaled, then a reduction of the output is allowed without precision leak\n     * @param samplingStrenght only usefull if param useRetinaLogSampling=true, specifies the strenght of the log scale that is applied\n     */\n    Retina(Size inputSize, const bool colorMode, RETINA_COLORSAMPLINGMETHOD colorSamplingMethod=RETINA_COLOR_BAYER, const bool useRetinaLogSampling=false, const double reductionFactor=1.0, const double samplingStrenght=10.0);\n\n    virtual ~Retina();\n\n    /**\n    * retreive retina input buffer size\n    */\n    Size inputSize();\n\n    /**\n    * retreive retina output buffer size\n    */\n    Size outputSize();\n\n    /**\n     * try to open an XML retina parameters file to adjust current retina instance setup\n     * => if the xml file does not exist, then default setup is applied\n     * => warning, Exceptions are thrown if read XML file is not valid\n     * @param retinaParameterFile : the parameters filename\n         * @param applyDefaultSetupOnFailure : set to true if an error must be thrown on error\n     */\n    void setup(std::string retinaParameterFile=\"\", const bool applyDefaultSetupOnFailure=true);\n\n\n    /**\n     * try to open an XML retina parameters file to adjust current retina instance setup\n     * => if the xml file does not exist, then default setup is applied\n     * => warning, Exceptions are thrown if read XML file is not valid\n     * @param fs : the open Filestorage which contains retina parameters\n     * @param applyDefaultSetupOnFailure : set to true if an error must be thrown on error\n     */\n    void setup(cv::FileStorage &fs, const bool applyDefaultSetupOnFailure=true);\n\n    /**\n     * try to open an XML retina parameters file to adjust current retina instance setup\n     * => if the xml file does not exist, then default setup is applied\n     * => warning, Exceptions are thrown if read XML file is not valid\n     * @param newParameters : a parameters structures updated with the new target configuration\n     */\n    void setup(RetinaParameters newParameters);\n\n    /**\n     * @return the current parameters setup\n     */\n    Retina::RetinaParameters getParameters();\n\n    /**\n     * parameters setup display method\n     * @return a string which contains formatted parameters information\n     */\n    const std::string printSetup();\n\n    /**\n     * write xml/yml formated parameters information\n     * @rparam fs : the filename of the xml file that will be open and writen with formatted parameters information\n     */\n    virtual void write( std::string fs ) const;\n\n\n    /**\n     * write xml/yml formated parameters information\n     * @param fs : a cv::Filestorage object ready to be filled\n         */\n    virtual void write( FileStorage& fs ) const;\n\n    /**\n     * setup the OPL and IPL parvo channels (see biologocal model)\n     * OPL is referred as Outer Plexiform Layer of the retina, it allows the spatio-temporal filtering which withens the spectrum and reduces spatio-temporal noise while attenuating global luminance (low frequency energy)\n     * IPL parvo is the OPL next processing stage, it refers to Inner Plexiform layer of the retina, it allows high contours sensitivity in foveal vision.\n     * for more informations, please have a look at the paper Benoit A., Caplier A., Durette B., Herault, J., \"USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING\", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011\n     * @param colorMode : specifies if (true) color is processed of not (false) to then processing gray level image\n     * @param normaliseOutput : specifies if (true) output is rescaled between 0 and 255 of not (false)\n     * @param photoreceptorsLocalAdaptationSensitivity the photoreceptors sensitivity renage is 0-1 (more log compression effect when value increases)\n     * @param photoreceptorsTemporalConstant the time constant of the first order low pass filter of the photoreceptors, use it to cut high temporal frequencies (noise or fast motion), unit is frames, typical value is 1 frame\n     * @param photoreceptorsSpatialConstant the spatial constant of the first order low pass filter of the photoreceptors, use it to cut high spatial frequencies (noise or thick contours), unit is pixels, typical value is 1 pixel\n     * @param horizontalCellsGain gain of the horizontal cells network, if 0, then the mean value of the output is zero, if the parameter is near 1, then, the luminance is not filtered and is still reachable at the output, typicall value is 0\n     * @param HcellsTemporalConstant the time constant of the first order low pass filter of the horizontal cells, use it to cut low temporal frequencies (local luminance variations), unit is frames, typical value is 1 frame, as the photoreceptors\n     * @param HcellsSpatialConstant the spatial constant of the first order low pass filter of the horizontal cells, use it to cut low spatial frequencies (local luminance), unit is pixels, typical value is 5 pixel, this value is also used for local contrast computing when computing the local contrast adaptation at the ganglion cells level (Inner Plexiform Layer parvocellular channel model)\n     * @param ganglionCellsSensitivity the compression strengh of the ganglion cells local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 230\n     */\n    void setupOPLandIPLParvoChannel(const bool colorMode=true, const bool normaliseOutput = true, const float photoreceptorsLocalAdaptationSensitivity=0.7, const float photoreceptorsTemporalConstant=0.5, const float photoreceptorsSpatialConstant=0.53, const float horizontalCellsGain=0, const float HcellsTemporalConstant=1, const float HcellsSpatialConstant=7, const float ganglionCellsSensitivity=0.7);\n\n    /**\n     * set parameters values for the Inner Plexiform Layer (IPL) magnocellular channel\n     * this channel processes signals outpint from OPL processing stage in peripheral vision, it allows motion information enhancement. It is decorrelated from the details channel. See reference paper for more details.\n     * @param normaliseOutput : specifies if (true) output is rescaled between 0 and 255 of not (false)\n     * @param parasolCells_beta the low pass filter gain used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), typical value is 0\n     * @param parasolCells_tau the low pass filter time constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is frame, typical value is 0 (immediate response)\n     * @param parasolCells_k the low pass filter spatial constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is pixels, typical value is 5\n     * @param amacrinCellsTemporalCutFrequency the time constant of the first order high pass fiter of the magnocellular way (motion information channel), unit is frames, tipicall value is 5\n     * @param V0CompressionParameter the compression strengh of the ganglion cells local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 200\n     * @param localAdaptintegration_tau specifies the temporal constant of the low pas filter involved in the computation of the local \"motion mean\" for the local adaptation computation\n     * @param localAdaptintegration_k specifies the spatial constant of the low pas filter involved in the computation of the local \"motion mean\" for the local adaptation computation\n     */\n    void setupIPLMagnoChannel(const bool normaliseOutput = true, const float parasolCells_beta=0, const float parasolCells_tau=0, const float parasolCells_k=7, const float amacrinCellsTemporalCutFrequency=1.2, const float V0CompressionParameter=0.95, const float localAdaptintegration_tau=0, const float localAdaptintegration_k=7);\n\n    /**\n     * method which allows retina to be applied on an input image, after run, encapsulated retina module is ready to deliver its outputs using dedicated acccessors, see getParvo and getMagno methods\n     * @param inputImage : the input cv::Mat image to be processed, can be gray level or BGR coded in any format (from 8bit to 16bits)\n     */\n    void run(const Mat &inputImage);\n\n    /**\n     * accessor of the details channel of the retina (models foveal vision)\n     * @param retinaOutput_parvo : the output buffer (reallocated if necessary), this output is rescaled for standard 8bits image processing use in OpenCV\n     */\n    void getParvo(Mat &retinaOutput_parvo);\n\n    /**\n     * accessor of the details channel of the retina (models foveal vision)\n     * @param retinaOutput_parvo : the output buffer (reallocated if necessary), this output is the original retina filter model output, without any quantification or rescaling\n     */\n    void getParvo(std::valarray<float> &retinaOutput_parvo);\n\n    /**\n     * accessor of the motion channel of the retina (models peripheral vision)\n     * @param retinaOutput_magno : the output buffer (reallocated if necessary), this output is rescaled for standard 8bits image processing use in OpenCV\n     */\n    void getMagno(Mat &retinaOutput_magno);\n\n    /**\n     * accessor of the motion channel of the retina (models peripheral vision)\n     * @param retinaOutput_magno : the output buffer (reallocated if necessary), this output is the original retina filter model output, without any quantification or rescaling\n     */\n    void getMagno(std::valarray<float> &retinaOutput_magno);\n\n    // original API level data accessors : get buffers addresses...\n    const std::valarray<float> & getMagno() const;\n    const std::valarray<float> & getParvo() const;\n\n    /**\n     * activate color saturation as the final step of the color demultiplexing process\n     * -> this saturation is a sigmoide function applied to each channel of the demultiplexed image.\n     * @param saturateColors boolean that activates color saturation (if true) or desactivate (if false)\n     * @param colorSaturationValue the saturation factor\n     */\n    void setColorSaturation(const bool saturateColors=true, const float colorSaturationValue=4.0);\n\n    /**\n     * clear all retina buffers (equivalent to opening the eyes after a long period of eye close ;o)\n     */\n    void clearBuffers();\n\n    /**\n    * Activate/desactivate the Magnocellular pathway processing (motion information extraction), by default, it is activated\n    * @param activate true if Magnocellular output should be activated, false if not\n    */\n    void activateMovingContoursProcessing(const bool activate);\n\n    /**\n    * Activate/desactivate the Parvocellular pathway processing (contours information extraction), by default, it is activated\n    * @param activate true if Parvocellular (contours information extraction) output should be activated, false if not\n    */\n    void activateContoursProcessing(const bool activate);\n\nprotected:\n    // Parameteres setup members\n    RetinaParameters _retinaParameters; // structure of parameters\n\n        // Retina model related modules\n    std::valarray<float> _inputBuffer; //!< buffer used to convert input cv::Mat to internal retina buffers format (valarrays)\n\n    // pointer to retina model\n    RetinaFilter* _retinaFilter; //!< the pointer to the retina module, allocated with instance construction\n\n    /**\n     * exports a valarray buffer outing from HVStools objects to a cv::Mat in CV_8UC1 (gray level picture) or CV_8UC3 (color) format\n     * @param grayMatrixToConvert the valarray to export to OpenCV\n     * @param nbRows : the number of rows of the valarray flatten matrix\n     * @param nbColumns : the number of rows of the valarray flatten matrix\n     * @param colorMode : a flag which mentions if matrix is color (true) or graylevel (false)\n     * @param outBuffer : the output matrix which is reallocated to satisfy Retina output buffer dimensions\n     */\n    void _convertValarrayBuffer2cvMat(const std::valarray<float> &grayMatrixToConvert, const unsigned int nbRows, const unsigned int nbColumns, const bool colorMode, Mat &outBuffer);\n\n    /**\n     *\n     * @param inputMatToConvert : the OpenCV cv::Mat that has to be converted to gray or RGB valarray buffer that will be processed by the retina model\n     * @param outputValarrayMatrix : the output valarray\n     * @return the input image color mode (color=true, gray levels=false)\n     */\n        bool _convertCvMat2ValarrayBuffer(const cv::Mat inputMatToConvert, std::valarray<float> &outputValarrayMatrix);\n\n    //! private method called by constructors, gathers their parameters and use them in a unified way\n    void _init(const Size inputSize, const bool colorMode, RETINA_COLORSAMPLINGMETHOD colorSamplingMethod=RETINA_COLOR_BAYER, const bool useRetinaLogSampling=false, const double reductionFactor=1.0, const double samplingStrenght=10.0);\n\n\n};\n\n}\n#endif /* __OPENCV_CONTRIB_RETINA_HPP__ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/affine.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_AFFINE3_HPP__\n#define __OPENCV_CORE_AFFINE3_HPP__\n\n#ifdef __cplusplus\n\n#include <opencv2/core/core.hpp>\n\nnamespace cv\n{\n    template<typename T>\n    class Affine3\n    {\n    public:\n        typedef T float_type;\n        typedef Matx<float_type, 3, 3> Mat3;\n        typedef Matx<float_type, 4, 4> Mat4;\n        typedef Vec<float_type, 3> Vec3;\n\n        Affine3();\n\n        //Augmented affine matrix\n        Affine3(const Mat4& affine);\n\n        //Rotation matrix\n        Affine3(const Mat3& R, const Vec3& t = Vec3::all(0));\n\n        //Rodrigues vector\n        Affine3(const Vec3& rvec, const Vec3& t = Vec3::all(0));\n\n        //Combines all contructors above. Supports 4x4, 4x3, 3x3, 1x3, 3x1 sizes of data matrix\n        explicit Affine3(const Mat& data, const Vec3& t = Vec3::all(0));\n\n        //From 16th element array\n        explicit Affine3(const float_type* vals);\n\n        static Affine3 Identity();\n\n        //Rotation matrix\n        void rotation(const Mat3& R);\n\n        //Rodrigues vector\n        void rotation(const Vec3& rvec);\n\n        //Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix;\n        void rotation(const Mat& data);\n\n        void linear(const Mat3& L);\n        void translation(const Vec3& t);\n\n        Mat3 rotation() const;\n        Mat3 linear() const;\n        Vec3 translation() const;\n\n        //Rodrigues vector\n        Vec3 rvec() const;\n\n        Affine3 inv(int method = cv::DECOMP_SVD) const;\n\n        // a.rotate(R) is equivalent to Affine(R, 0) * a;\n        Affine3 rotate(const Mat3& R) const;\n\n        // a.rotate(R) is equivalent to Affine(rvec, 0) * a;\n        Affine3 rotate(const Vec3& rvec) const;\n\n        // a.translate(t) is equivalent to Affine(E, t) * a;\n        Affine3 translate(const Vec3& t) const;\n\n        // a.concatenate(affine) is equivalent to affine * a;\n        Affine3 concatenate(const Affine3& affine) const;\n\n        template <typename Y> operator Affine3<Y>() const;\n\n        template <typename Y> Affine3<Y> cast() const;\n\n        Mat4 matrix;\n\n#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H\n        Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine);\n        Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine);\n        operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const;\n        operator Eigen::Transform<T, 3, Eigen::Affine>() const;\n#endif\n    };\n\n    template<typename T> static\n    Affine3<T> operator*(const Affine3<T>& affine1, const Affine3<T>& affine2);\n\n    template<typename T, typename V> static\n    V operator*(const Affine3<T>& affine, const V& vector);\n\n    typedef Affine3<float> Affine3f;\n    typedef Affine3<double> Affine3d;\n\n    static Vec3f operator*(const Affine3f& affine, const Vec3f& vector);\n    static Vec3d operator*(const Affine3d& affine, const Vec3d& vector);\n\n    template<typename _Tp> class DataType< Affine3<_Tp> >\n    {\n    public:\n        typedef Affine3<_Tp>                               value_type;\n        typedef Affine3<typename DataType<_Tp>::work_type> work_type;\n        typedef _Tp                                        channel_type;\n\n        enum { generic_type = 0,\n               depth        = DataType<channel_type>::depth,\n               channels     = 16,\n               fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n               type         = CV_MAKETYPE(depth, channels)\n             };\n\n        typedef Vec<channel_type, channels> vec_type;\n    };\n}\n\n\n///////////////////////////////////////////////////////////////////////////////////\n/// Implementaiton\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3()\n    : matrix(Mat4::eye())\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Mat4& affine)\n    : matrix(affine)\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Mat3& R, const Vec3& t)\n{\n    rotation(R);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Vec3& _rvec, const Vec3& t)\n{\n    rotation(_rvec);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const cv::Mat& data, const Vec3& t)\n{\n    CV_Assert(data.type() == cv::DataType<T>::type);\n\n    if (data.cols == 4 && data.rows == 4)\n    {\n        data.copyTo(matrix);\n        return;\n    }\n    else if (data.cols == 4 && data.rows == 3)\n    {\n        rotation(data(Rect(0, 0, 3, 3)));\n        translation(data(Rect(3, 0, 1, 3)));\n        return;\n    }\n\n    rotation(data);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const float_type* vals) : matrix(vals)\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::Identity()\n{\n    return Affine3<T>(cv::Affine3<T>::Mat4::eye());\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const Mat3& R)\n{\n    linear(R);\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const Vec3& _rvec)\n{\n    double rx = _rvec[0], ry = _rvec[1], rz = _rvec[2];\n    double theta = std::sqrt(rx*rx + ry*ry + rz*rz);\n\n    if (theta < DBL_EPSILON)\n        rotation(Mat3::eye());\n    else\n    {\n        const double I[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 };\n\n        double c = std::cos(theta);\n        double s = std::sin(theta);\n        double c1 = 1. - c;\n        double itheta = theta ? 1./theta : 0.;\n\n        rx *= itheta; ry *= itheta; rz *= itheta;\n\n        double rrt[] = { rx*rx, rx*ry, rx*rz, rx*ry, ry*ry, ry*rz, rx*rz, ry*rz, rz*rz };\n        double _r_x_[] = { 0, -rz, ry, rz, 0, -rx, -ry, rx, 0 };\n        Mat3 R;\n\n        // R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x]\n        // where [r_x] is [0 -rz ry; rz 0 -rx; -ry rx 0]\n        for(int k = 0; k < 9; ++k)\n            R.val[k] = static_cast<float_type>(c*I[k] + c1*rrt[k] + s*_r_x_[k]);\n\n        rotation(R);\n    }\n}\n\n//Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix;\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const cv::Mat& data)\n{\n    CV_Assert(data.type() == cv::DataType<T>::type);\n\n    if (data.cols == 3 && data.rows == 3)\n    {\n        Mat3 R;\n        data.copyTo(R);\n        rotation(R);\n    }\n    else if ((data.cols == 3 && data.rows == 1) || (data.cols == 1 && data.rows == 3))\n    {\n        Vec3 _rvec;\n        data.reshape(1, 3).copyTo(_rvec);\n        rotation(_rvec);\n    }\n    else\n        CV_Assert(!\"Input marix can be 3x3, 1x3 or 3x1\");\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::linear(const Mat3& L)\n{\n    matrix.val[0] = L.val[0]; matrix.val[1] = L.val[1];  matrix.val[ 2] = L.val[2];\n    matrix.val[4] = L.val[3]; matrix.val[5] = L.val[4];  matrix.val[ 6] = L.val[5];\n    matrix.val[8] = L.val[6]; matrix.val[9] = L.val[7];  matrix.val[10] = L.val[8];\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::translation(const Vec3& t)\n{\n    matrix.val[3] = t[0]; matrix.val[7] = t[1]; matrix.val[11] = t[2];\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Mat3 cv::Affine3<T>::rotation() const\n{\n    return linear();\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Mat3 cv::Affine3<T>::linear() const\n{\n    typename cv::Affine3<T>::Mat3 R;\n    R.val[0] = matrix.val[0];  R.val[1] = matrix.val[1];  R.val[2] = matrix.val[ 2];\n    R.val[3] = matrix.val[4];  R.val[4] = matrix.val[5];  R.val[5] = matrix.val[ 6];\n    R.val[6] = matrix.val[8];  R.val[7] = matrix.val[9];  R.val[8] = matrix.val[10];\n    return R;\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Vec3 cv::Affine3<T>::translation() const\n{\n    return Vec3(matrix.val[3], matrix.val[7], matrix.val[11]);\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Vec3 cv::Affine3<T>::rvec() const\n{\n    cv::Vec3d w;\n    cv::Matx33d u, vt, R = rotation();\n    cv::SVD::compute(R, w, u, vt, cv::SVD::FULL_UV + cv::SVD::MODIFY_A);\n    R = u * vt;\n\n    double rx = R.val[7] - R.val[5];\n    double ry = R.val[2] - R.val[6];\n    double rz = R.val[3] - R.val[1];\n\n    double s = std::sqrt((rx*rx + ry*ry + rz*rz)*0.25);\n    double c = (R.val[0] + R.val[4] + R.val[8] - 1) * 0.5;\n    c = c > 1.0 ? 1.0 : c < -1.0 ? -1.0 : c;\n    double theta = acos(c);\n\n    if( s < 1e-5 )\n    {\n        if( c > 0 )\n            rx = ry = rz = 0;\n        else\n        {\n            double t;\n            t = (R.val[0] + 1) * 0.5;\n            rx = std::sqrt(std::max(t, 0.0));\n            t = (R.val[4] + 1) * 0.5;\n            ry = std::sqrt(std::max(t, 0.0)) * (R.val[1] < 0 ? -1.0 : 1.0);\n            t = (R.val[8] + 1) * 0.5;\n            rz = std::sqrt(std::max(t, 0.0)) * (R.val[2] < 0 ? -1.0 : 1.0);\n\n            if( fabs(rx) < fabs(ry) && fabs(rx) < fabs(rz) && (R.val[5] > 0) != (ry*rz > 0) )\n                rz = -rz;\n            theta /= std::sqrt(rx*rx + ry*ry + rz*rz);\n            rx *= theta;\n            ry *= theta;\n            rz *= theta;\n        }\n    }\n    else\n    {\n        double vth = 1/(2*s);\n        vth *= theta;\n        rx *= vth; ry *= vth; rz *= vth;\n    }\n\n    return cv::Vec3d(rx, ry, rz);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::inv(int method) const\n{\n    return matrix.inv(method);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::rotate(const Mat3& R) const\n{\n    Mat3 Lc = linear();\n    Vec3 tc = translation();\n    Mat4 result;\n    result.val[12] = result.val[13] = result.val[14] = 0;\n    result.val[15] = 1;\n\n    for(int j = 0; j < 3; ++j)\n    {\n        for(int i = 0; i < 3; ++i)\n        {\n            float_type value = 0;\n            for(int k = 0; k < 3; ++k)\n                value += R(j, k) * Lc(k, i);\n            result(j, i) = value;\n        }\n\n        result(j, 3) = R.row(j).dot(tc.t());\n    }\n    return result;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::rotate(const Vec3& _rvec) const\n{\n    return rotate(Affine3f(_rvec).rotation());\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::translate(const Vec3& t) const\n{\n    Mat4 m = matrix;\n    m.val[ 3] += t[0];\n    m.val[ 7] += t[1];\n    m.val[11] += t[2];\n    return m;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::concatenate(const Affine3<T>& affine) const\n{\n    return (*this).rotate(affine.rotation()).translate(affine.translation());\n}\n\ntemplate<typename T> template <typename Y> inline\ncv::Affine3<T>::operator Affine3<Y>() const\n{\n    return Affine3<Y>(matrix);\n}\n\ntemplate<typename T> template <typename Y> inline\ncv::Affine3<Y> cv::Affine3<T>::cast() const\n{\n    return Affine3<Y>(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::operator*(const cv::Affine3<T>& affine1, const cv::Affine3<T>& affine2)\n{\n    return affine2.concatenate(affine1);\n}\n\ntemplate<typename T, typename V> inline\nV cv::operator*(const cv::Affine3<T>& affine, const V& v)\n{\n    const typename Affine3<T>::Mat4& m = affine.matrix;\n\n    V r;\n    r.x = m.val[0] * v.x + m.val[1] * v.y + m.val[ 2] * v.z + m.val[ 3];\n    r.y = m.val[4] * v.x + m.val[5] * v.y + m.val[ 6] * v.z + m.val[ 7];\n    r.z = m.val[8] * v.x + m.val[9] * v.y + m.val[10] * v.z + m.val[11];\n    return r;\n}\n\nstatic inline\ncv::Vec3f cv::operator*(const cv::Affine3f& affine, const cv::Vec3f& v)\n{\n    const cv::Matx44f& m = affine.matrix;\n    cv::Vec3f r;\n    r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3];\n    r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7];\n    r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11];\n    return r;\n}\n\nstatic inline\ncv::Vec3d cv::operator*(const cv::Affine3d& affine, const cv::Vec3d& v)\n{\n    const cv::Matx44d& m = affine.matrix;\n    cv::Vec3d r;\n    r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3];\n    r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7];\n    r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11];\n    return r;\n}\n\n\n\n#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine)\n{\n    cv::Mat(4, 4, cv::DataType<T>::type, affine.matrix().data()).copyTo(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine)\n{\n    Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> a = affine;\n    cv::Mat(4, 4, cv::DataType<T>::type, a.matrix().data()).copyTo(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const\n{\n    Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> r;\n    cv::Mat hdr(4, 4, cv::DataType<T>::type, r.matrix().data());\n    cv::Mat(matrix, false).copyTo(hdr);\n    return r;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine>() const\n{\n    return this->operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>();\n}\n\n#endif /* defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H */\n\n\n#endif /* __cplusplus */\n\n#endif /* __OPENCV_CORE_AFFINE3_HPP__ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/core.hpp",
    "content": "/*! \\file core.hpp\n    \\brief The Core Functionality\n */\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_HPP__\n#define __OPENCV_CORE_HPP__\n\n#include \"opencv2/core/types_c.h\"\n#include \"opencv2/core/version.hpp\"\n\n#ifdef __cplusplus\n\n#ifndef SKIP_INCLUDES\n#include <limits.h>\n#include <algorithm>\n#include <cmath>\n#include <cstddef>\n#include <complex>\n#include <map>\n#include <new>\n#include <string>\n#include <vector>\n#include <sstream>\n#endif // SKIP_INCLUDES\n\n/*! \\namespace cv\n    Namespace where all the C++ OpenCV functionality resides\n*/\nnamespace cv {\n\n#undef abs\n#undef min\n#undef max\n#undef Complex\n\nusing std::vector;\nusing std::string;\nusing std::ptrdiff_t;\n\ntemplate<typename _Tp> class Size_;\ntemplate<typename _Tp> class Point_;\ntemplate<typename _Tp> class Rect_;\ntemplate<typename _Tp, int cn> class Vec;\ntemplate<typename _Tp, int m, int n> class Matx;\n\ntypedef std::string String;\n\nclass Mat;\nclass SparseMat;\ntypedef Mat MatND;\n\nnamespace ogl {\n    class Buffer;\n    class Texture2D;\n    class Arrays;\n}\n\n// < Deprecated\nclass GlBuffer;\nclass GlTexture;\nclass GlArrays;\nclass GlCamera;\n// >\n\nnamespace gpu {\n    class GpuMat;\n}\n\nclass CV_EXPORTS MatExpr;\nclass CV_EXPORTS MatOp_Base;\nclass CV_EXPORTS MatArg;\nclass CV_EXPORTS MatConstIterator;\n\ntemplate<typename _Tp> class Mat_;\ntemplate<typename _Tp> class MatIterator_;\ntemplate<typename _Tp> class MatConstIterator_;\ntemplate<typename _Tp> class MatCommaInitializer_;\n\n#if !defined(ANDROID) || (defined(_GLIBCXX_USE_WCHAR_T) && _GLIBCXX_USE_WCHAR_T)\ntypedef std::basic_string<wchar_t> WString;\n\nCV_EXPORTS string fromUtf16(const WString& str);\nCV_EXPORTS WString toUtf16(const string& str);\n#endif\n\nCV_EXPORTS string format( const char* fmt, ... );\nCV_EXPORTS string tempfile( const char* suffix CV_DEFAULT(0));\n\n// matrix decomposition types\nenum { DECOMP_LU=0, DECOMP_SVD=1, DECOMP_EIG=2, DECOMP_CHOLESKY=3, DECOMP_QR=4, DECOMP_NORMAL=16 };\nenum { NORM_INF=1, NORM_L1=2, NORM_L2=4, NORM_L2SQR=5, NORM_HAMMING=6, NORM_HAMMING2=7, NORM_TYPE_MASK=7, NORM_RELATIVE=8, NORM_MINMAX=32 };\nenum { CMP_EQ=0, CMP_GT=1, CMP_GE=2, CMP_LT=3, CMP_LE=4, CMP_NE=5 };\nenum { GEMM_1_T=1, GEMM_2_T=2, GEMM_3_T=4 };\nenum { DFT_INVERSE=1, DFT_SCALE=2, DFT_ROWS=4, DFT_COMPLEX_OUTPUT=16, DFT_REAL_OUTPUT=32,\n    DCT_INVERSE = DFT_INVERSE, DCT_ROWS=DFT_ROWS };\n\n\n/*!\n The standard OpenCV exception class.\n Instances of the class are thrown by various functions and methods in the case of critical errors.\n */\nclass CV_EXPORTS Exception : public std::exception\n{\npublic:\n    /*!\n     Default constructor\n     */\n    Exception();\n    /*!\n     Full constructor. Normally the constuctor is not called explicitly.\n     Instead, the macros CV_Error(), CV_Error_() and CV_Assert() are used.\n    */\n    Exception(int _code, const string& _err, const string& _func, const string& _file, int _line);\n    virtual ~Exception() throw();\n\n    /*!\n     \\return the error description and the context as a text string.\n    */\n    virtual const char *what() const throw();\n    void formatMessage();\n\n    string msg; ///< the formatted error message\n\n    int code; ///< error code @see CVStatus\n    string err; ///< error description\n    string func; ///< function name. Available only when the compiler supports getting it\n    string file; ///< source file name where the error has occured\n    int line; ///< line number in the source file where the error has occured\n};\n\n\n//! Signals an error and raises the exception.\n\n/*!\n  By default the function prints information about the error to stderr,\n  then it either stops if setBreakOnError() had been called before or raises the exception.\n  It is possible to alternate error processing by using redirectError().\n\n  \\param exc the exception raisen.\n */\nCV_EXPORTS void error( const Exception& exc );\n\n//! Sets/resets the break-on-error mode.\n\n/*!\n  When the break-on-error mode is set, the default error handler\n  issues a hardware exception, which can make debugging more convenient.\n\n  \\return the previous state\n */\nCV_EXPORTS bool setBreakOnError(bool flag);\n\ntypedef int (CV_CDECL *ErrorCallback)( int status, const char* func_name,\n                                       const char* err_msg, const char* file_name,\n                                       int line, void* userdata );\n\n//! Sets the new error handler and the optional user data.\n\n/*!\n  The function sets the new error handler, called from cv::error().\n\n  \\param errCallback the new error handler. If NULL, the default error handler is used.\n  \\param userdata the optional user data pointer, passed to the callback.\n  \\param prevUserdata the optional output parameter where the previous user data pointer is stored\n\n  \\return the previous error handler\n*/\nCV_EXPORTS ErrorCallback redirectError( ErrorCallback errCallback,\n                                        void* userdata=0, void** prevUserdata=0);\n\n\n#if defined __GNUC__\n#define CV_Func __func__\n#elif defined _MSC_VER\n#define CV_Func __FUNCTION__\n#else\n#define CV_Func \"\"\n#endif\n\n#define CV_Error( code, msg ) cv::error( cv::Exception(code, msg, CV_Func, __FILE__, __LINE__) )\n#define CV_Error_( code, args ) cv::error( cv::Exception(code, cv::format args, CV_Func, __FILE__, __LINE__) )\n#define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Exception(CV_StsAssert, #expr, CV_Func, __FILE__, __LINE__) )\n\n#ifdef _DEBUG\n#define CV_DbgAssert(expr) CV_Assert(expr)\n#else\n#define CV_DbgAssert(expr)\n#endif\n\nCV_EXPORTS void glob(String pattern, std::vector<String>& result, bool recursive = false);\n\nCV_EXPORTS void setNumThreads(int nthreads);\nCV_EXPORTS int getNumThreads();\nCV_EXPORTS int getThreadNum();\n\nCV_EXPORTS_W const string& getBuildInformation();\n\n//! Returns the number of ticks.\n\n/*!\n  The function returns the number of ticks since the certain event (e.g. when the machine was turned on).\n  It can be used to initialize cv::RNG or to measure a function execution time by reading the tick count\n  before and after the function call. The granularity of ticks depends on the hardware and OS used. Use\n  cv::getTickFrequency() to convert ticks to seconds.\n*/\nCV_EXPORTS_W int64 getTickCount();\n\n/*!\n  Returns the number of ticks per seconds.\n\n  The function returns the number of ticks (as returned by cv::getTickCount()) per second.\n  The following code computes the execution time in milliseconds:\n\n  \\code\n  double exec_time = (double)getTickCount();\n  // do something ...\n  exec_time = ((double)getTickCount() - exec_time)*1000./getTickFrequency();\n  \\endcode\n*/\nCV_EXPORTS_W double getTickFrequency();\n\n/*!\n  Returns the number of CPU ticks.\n\n  On platforms where the feature is available, the function returns the number of CPU ticks\n  since the certain event (normally, the system power-on moment). Using this function\n  one can accurately measure the execution time of very small code fragments,\n  for which cv::getTickCount() granularity is not enough.\n*/\nCV_EXPORTS_W int64 getCPUTickCount();\n\n/*!\n  Returns SSE etc. support status\n\n  The function returns true if certain hardware features are available.\n  Currently, the following features are recognized:\n  - CV_CPU_MMX - MMX\n  - CV_CPU_SSE - SSE\n  - CV_CPU_SSE2 - SSE 2\n  - CV_CPU_SSE3 - SSE 3\n  - CV_CPU_SSSE3 - SSSE 3\n  - CV_CPU_SSE4_1 - SSE 4.1\n  - CV_CPU_SSE4_2 - SSE 4.2\n  - CV_CPU_POPCNT - POPCOUNT\n  - CV_CPU_AVX - AVX\n\n  \\note {Note that the function output is not static. Once you called cv::useOptimized(false),\n  most of the hardware acceleration is disabled and thus the function will returns false,\n  until you call cv::useOptimized(true)}\n*/\nCV_EXPORTS_W bool checkHardwareSupport(int feature);\n\n//! returns the number of CPUs (including hyper-threading)\nCV_EXPORTS_W int getNumberOfCPUs();\n\n/*!\n  Allocates memory buffer\n\n  This is specialized OpenCV memory allocation function that returns properly aligned memory buffers.\n  The usage is identical to malloc(). The allocated buffers must be freed with cv::fastFree().\n  If there is not enough memory, the function calls cv::error(), which raises an exception.\n\n  \\param bufSize buffer size in bytes\n  \\return the allocated memory buffer.\n*/\nCV_EXPORTS void* fastMalloc(size_t bufSize);\n\n/*!\n  Frees the memory allocated with cv::fastMalloc\n\n  This is the corresponding deallocation function for cv::fastMalloc().\n  When ptr==NULL, the function has no effect.\n*/\nCV_EXPORTS void fastFree(void* ptr);\n\ntemplate<typename _Tp> static inline _Tp* allocate(size_t n)\n{\n    return new _Tp[n];\n}\n\ntemplate<typename _Tp> static inline void deallocate(_Tp* ptr, size_t)\n{\n    delete[] ptr;\n}\n\n/*!\n  Aligns pointer by the certain number of bytes\n\n  This small inline function aligns the pointer by the certian number of bytes by shifting\n  it forward by 0 or a positive offset.\n*/\ntemplate<typename _Tp> static inline _Tp* alignPtr(_Tp* ptr, int n=(int)sizeof(_Tp))\n{\n    return (_Tp*)(((size_t)ptr + n-1) & -n);\n}\n\n/*!\n  Aligns buffer size by the certain number of bytes\n\n  This small inline function aligns a buffer size by the certian number of bytes by enlarging it.\n*/\nstatic inline size_t alignSize(size_t sz, int n)\n{\n    assert((n & (n - 1)) == 0); // n is a power of 2\n    return (sz + n-1) & -n;\n}\n\n/*!\n  Turns on/off available optimization\n\n  The function turns on or off the optimized code in OpenCV. Some optimization can not be enabled\n  or disabled, but, for example, most of SSE code in OpenCV can be temporarily turned on or off this way.\n\n  \\note{Since optimization may imply using special data structures, it may be unsafe\n  to call this function anywhere in the code. Instead, call it somewhere at the top level.}\n*/\nCV_EXPORTS_W void setUseOptimized(bool onoff);\n\n/*!\n  Returns the current optimization status\n\n  The function returns the current optimization status, which is controlled by cv::setUseOptimized().\n*/\nCV_EXPORTS_W bool useOptimized();\n\n/*!\n  The STL-compilant memory Allocator based on cv::fastMalloc() and cv::fastFree()\n*/\ntemplate<typename _Tp> class Allocator\n{\npublic:\n    typedef _Tp value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> class rebind { typedef Allocator<U> other; };\n\n    explicit Allocator() {}\n    ~Allocator() {}\n    explicit Allocator(Allocator const&) {}\n    template<typename U>\n    explicit Allocator(Allocator<U> const&) {}\n\n    // address\n    pointer address(reference r) { return &r; }\n    const_pointer address(const_reference r) { return &r; }\n\n    pointer allocate(size_type count, const void* =0)\n    { return reinterpret_cast<pointer>(fastMalloc(count * sizeof (_Tp))); }\n\n    void deallocate(pointer p, size_type) {fastFree(p); }\n\n    size_type max_size() const\n    { return max(static_cast<_Tp>(-1)/sizeof(_Tp), 1); }\n\n    void construct(pointer p, const _Tp& v) { new(static_cast<void*>(p)) _Tp(v); }\n    void destroy(pointer p) { p->~_Tp(); }\n};\n\n/////////////////////// Vec (used as element of multi-channel images /////////////////////\n\n/*!\n  A helper class for cv::DataType\n\n  The class is specialized for each fundamental numerical data type supported by OpenCV.\n  It provides DataDepth<T>::value constant.\n*/\ntemplate<typename _Tp> class DataDepth {};\n\ntemplate<> class DataDepth<bool> { public: enum { value = CV_8U, fmt=(int)'u' }; };\ntemplate<> class DataDepth<uchar> { public: enum { value = CV_8U, fmt=(int)'u' }; };\ntemplate<> class DataDepth<schar> { public: enum { value = CV_8S, fmt=(int)'c' }; };\ntemplate<> class DataDepth<char> { public: enum { value = CV_8S, fmt=(int)'c' }; };\ntemplate<> class DataDepth<ushort> { public: enum { value = CV_16U, fmt=(int)'w' }; };\ntemplate<> class DataDepth<short> { public: enum { value = CV_16S, fmt=(int)'s' }; };\ntemplate<> class DataDepth<int> { public: enum { value = CV_32S, fmt=(int)'i' }; };\n// this is temporary solution to support 32-bit unsigned integers\ntemplate<> class DataDepth<unsigned> { public: enum { value = CV_32S, fmt=(int)'i' }; };\ntemplate<> class DataDepth<float> { public: enum { value = CV_32F, fmt=(int)'f' }; };\ntemplate<> class DataDepth<double> { public: enum { value = CV_64F, fmt=(int)'d' }; };\ntemplate<typename _Tp> class DataDepth<_Tp*> { public: enum { value = CV_USRTYPE1, fmt=(int)'r' }; };\n\n\n////////////////////////////// Small Matrix ///////////////////////////\n\n/*!\n A short numerical vector.\n\n This template class represents short numerical vectors (of 1, 2, 3, 4 ... elements)\n on which you can perform basic arithmetical operations, access individual elements using [] operator etc.\n The vectors are allocated on stack, as opposite to std::valarray, std::vector, cv::Mat etc.,\n which elements are dynamically allocated in the heap.\n\n The template takes 2 parameters:\n -# _Tp element type\n -# cn the number of elements\n\n In addition to the universal notation like Vec<float, 3>, you can use shorter aliases\n for the most popular specialized variants of Vec, e.g. Vec3f ~ Vec<float, 3>.\n */\n\nstruct CV_EXPORTS Matx_AddOp {};\nstruct CV_EXPORTS Matx_SubOp {};\nstruct CV_EXPORTS Matx_ScaleOp {};\nstruct CV_EXPORTS Matx_MulOp {};\nstruct CV_EXPORTS Matx_MatMulOp {};\nstruct CV_EXPORTS Matx_TOp {};\n\ntemplate<typename _Tp, int m, int n> class Matx\n{\npublic:\n    typedef _Tp value_type;\n    typedef Matx<_Tp, (m < n ? m : n), 1> diag_type;\n    typedef Matx<_Tp, m, n> mat_type;\n    enum { depth = DataDepth<_Tp>::value, rows = m, cols = n, channels = rows*cols,\n           type = CV_MAKETYPE(depth, channels) };\n\n    //! default constructor\n    Matx();\n\n    Matx(_Tp v0); //!< 1x1 matrix\n    Matx(_Tp v0, _Tp v1); //!< 1x2 or 2x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2); //!< 1x3 or 3x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3); //!< 1x4, 2x2 or 4x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4); //!< 1x5 or 5x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5); //!< 1x6, 2x3, 3x2 or 6x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6); //!< 1x7 or 7x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7); //!< 1x8, 2x4, 4x2 or 8x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8); //!< 1x9, 3x3 or 9x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9); //!< 1x10, 2x5 or 5x2 or 10x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n         _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n         _Tp v8, _Tp v9, _Tp v10, _Tp v11); //!< 1x12, 2x6, 3x4, 4x3, 6x2 or 12x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n         _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n         _Tp v8, _Tp v9, _Tp v10, _Tp v11,\n         _Tp v12, _Tp v13, _Tp v14, _Tp v15); //!< 1x16, 4x4 or 16x1 matrix\n    explicit Matx(const _Tp* vals); //!< initialize from a plain array\n\n    static Matx all(_Tp alpha);\n    static Matx zeros();\n    static Matx ones();\n    static Matx eye();\n    static Matx diag(const diag_type& d);\n    static Matx randu(_Tp a, _Tp b);\n    static Matx randn(_Tp a, _Tp b);\n\n    //! dot product computed with the default precision\n    _Tp dot(const Matx<_Tp, m, n>& v) const;\n\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Matx<_Tp, m, n>& v) const;\n\n    //! convertion to another data type\n    template<typename T2> operator Matx<T2, m, n>() const;\n\n    //! change the matrix shape\n    template<int m1, int n1> Matx<_Tp, m1, n1> reshape() const;\n\n    //! extract part of the matrix\n    template<int m1, int n1> Matx<_Tp, m1, n1> get_minor(int i, int j) const;\n\n    //! extract the matrix row\n    Matx<_Tp, 1, n> row(int i) const;\n\n    //! extract the matrix column\n    Matx<_Tp, m, 1> col(int i) const;\n\n    //! extract the matrix diagonal\n    diag_type diag() const;\n\n    //! transpose the matrix\n    Matx<_Tp, n, m> t() const;\n\n    //! invert matrix the matrix\n    Matx<_Tp, n, m> inv(int method=DECOMP_LU) const;\n\n    //! solve linear system\n    template<int l> Matx<_Tp, n, l> solve(const Matx<_Tp, m, l>& rhs, int flags=DECOMP_LU) const;\n    Vec<_Tp, n> solve(const Vec<_Tp, m>& rhs, int method) const;\n\n    //! multiply two matrices element-wise\n    Matx<_Tp, m, n> mul(const Matx<_Tp, m, n>& a) const;\n\n    //! element access\n    const _Tp& operator ()(int i, int j) const;\n    _Tp& operator ()(int i, int j);\n\n    //! 1D element access\n    const _Tp& operator ()(int i) const;\n    _Tp& operator ()(int i);\n\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_AddOp);\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp);\n    template<typename _T2> Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp);\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp);\n    template<int l> Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp);\n    Matx(const Matx<_Tp, n, m>& a, Matx_TOp);\n\n    _Tp val[m*n]; ///< matrix elements\n};\n\n\ntypedef Matx<float, 1, 2> Matx12f;\ntypedef Matx<double, 1, 2> Matx12d;\ntypedef Matx<float, 1, 3> Matx13f;\ntypedef Matx<double, 1, 3> Matx13d;\ntypedef Matx<float, 1, 4> Matx14f;\ntypedef Matx<double, 1, 4> Matx14d;\ntypedef Matx<float, 1, 6> Matx16f;\ntypedef Matx<double, 1, 6> Matx16d;\n\ntypedef Matx<float, 2, 1> Matx21f;\ntypedef Matx<double, 2, 1> Matx21d;\ntypedef Matx<float, 3, 1> Matx31f;\ntypedef Matx<double, 3, 1> Matx31d;\ntypedef Matx<float, 4, 1> Matx41f;\ntypedef Matx<double, 4, 1> Matx41d;\ntypedef Matx<float, 6, 1> Matx61f;\ntypedef Matx<double, 6, 1> Matx61d;\n\ntypedef Matx<float, 2, 2> Matx22f;\ntypedef Matx<double, 2, 2> Matx22d;\ntypedef Matx<float, 2, 3> Matx23f;\ntypedef Matx<double, 2, 3> Matx23d;\ntypedef Matx<float, 3, 2> Matx32f;\ntypedef Matx<double, 3, 2> Matx32d;\n\ntypedef Matx<float, 3, 3> Matx33f;\ntypedef Matx<double, 3, 3> Matx33d;\n\ntypedef Matx<float, 3, 4> Matx34f;\ntypedef Matx<double, 3, 4> Matx34d;\ntypedef Matx<float, 4, 3> Matx43f;\ntypedef Matx<double, 4, 3> Matx43d;\n\ntypedef Matx<float, 4, 4> Matx44f;\ntypedef Matx<double, 4, 4> Matx44d;\ntypedef Matx<float, 6, 6> Matx66f;\ntypedef Matx<double, 6, 6> Matx66d;\n\n\n/*!\n  A short numerical vector.\n\n  This template class represents short numerical vectors (of 1, 2, 3, 4 ... elements)\n  on which you can perform basic arithmetical operations, access individual elements using [] operator etc.\n  The vectors are allocated on stack, as opposite to std::valarray, std::vector, cv::Mat etc.,\n  which elements are dynamically allocated in the heap.\n\n  The template takes 2 parameters:\n  -# _Tp element type\n  -# cn the number of elements\n\n  In addition to the universal notation like Vec<float, 3>, you can use shorter aliases\n  for the most popular specialized variants of Vec, e.g. Vec3f ~ Vec<float, 3>.\n*/\ntemplate<typename _Tp, int cn> class Vec : public Matx<_Tp, cn, 1>\n{\npublic:\n    typedef _Tp value_type;\n    enum { depth = DataDepth<_Tp>::value, channels = cn, type = CV_MAKETYPE(depth, channels) };\n\n    //! default constructor\n    Vec();\n\n    Vec(_Tp v0); //!< 1-element vector constructor\n    Vec(_Tp v0, _Tp v1); //!< 2-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2); //!< 3-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3); //!< 4-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4); //!< 5-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5); //!< 6-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6); //!< 7-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7); //!< 8-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8); //!< 9-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9); //!< 10-element vector constructor\n    explicit Vec(const _Tp* values);\n\n    Vec(const Vec<_Tp, cn>& v);\n\n    static Vec all(_Tp alpha);\n\n    //! per-element multiplication\n    Vec mul(const Vec<_Tp, cn>& v) const;\n\n    //! conjugation (makes sense for complex numbers and quaternions)\n    Vec conj() const;\n\n    /*!\n      cross product of the two 3D vectors.\n\n      For other dimensionalities the exception is raised\n    */\n    Vec cross(const Vec& v) const;\n    //! convertion to another data type\n    template<typename T2> operator Vec<T2, cn>() const;\n    //! conversion to 4-element CvScalar.\n    operator CvScalar() const;\n\n    /*! element access */\n    const _Tp& operator [](int i) const;\n    _Tp& operator[](int i);\n    const _Tp& operator ()(int i) const;\n    _Tp& operator ()(int i);\n\n    Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp);\n    Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp);\n    template<typename _T2> Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp);\n};\n\n\n/* \\typedef\n\n   Shorter aliases for the most popular specializations of Vec<T,n>\n*/\ntypedef Vec<uchar, 2> Vec2b;\ntypedef Vec<uchar, 3> Vec3b;\ntypedef Vec<uchar, 4> Vec4b;\n\ntypedef Vec<short, 2> Vec2s;\ntypedef Vec<short, 3> Vec3s;\ntypedef Vec<short, 4> Vec4s;\n\ntypedef Vec<ushort, 2> Vec2w;\ntypedef Vec<ushort, 3> Vec3w;\ntypedef Vec<ushort, 4> Vec4w;\n\ntypedef Vec<int, 2> Vec2i;\ntypedef Vec<int, 3> Vec3i;\ntypedef Vec<int, 4> Vec4i;\ntypedef Vec<int, 6> Vec6i;\ntypedef Vec<int, 8> Vec8i;\n\ntypedef Vec<float, 2> Vec2f;\ntypedef Vec<float, 3> Vec3f;\ntypedef Vec<float, 4> Vec4f;\ntypedef Vec<float, 6> Vec6f;\n\ntypedef Vec<double, 2> Vec2d;\ntypedef Vec<double, 3> Vec3d;\ntypedef Vec<double, 4> Vec4d;\ntypedef Vec<double, 6> Vec6d;\n\n\n//////////////////////////////// Complex //////////////////////////////\n\n/*!\n  A complex number class.\n\n  The template class is similar and compatible with std::complex, however it provides slightly\n  more convenient access to the real and imaginary parts using through the simple field access, as opposite\n  to std::complex::real() and std::complex::imag().\n*/\ntemplate<typename _Tp> class Complex\n{\npublic:\n\n    //! constructors\n    Complex();\n    Complex( _Tp _re, _Tp _im=0 );\n    Complex( const std::complex<_Tp>& c );\n\n    //! conversion to another data type\n    template<typename T2> operator Complex<T2>() const;\n    //! conjugation\n    Complex conj() const;\n    //! conversion to std::complex\n    operator std::complex<_Tp>() const;\n\n    _Tp re, im; ///< the real and the imaginary parts\n};\n\n\n/*!\n  \\typedef\n*/\ntypedef Complex<float> Complexf;\ntypedef Complex<double> Complexd;\n\n\n//////////////////////////////// Point_ ////////////////////////////////\n\n/*!\n  template 2D point class.\n\n  The class defines a point in 2D space. Data type of the point coordinates is specified\n  as a template parameter. There are a few shorter aliases available for user convenience.\n  See cv::Point, cv::Point2i, cv::Point2f and cv::Point2d.\n*/\ntemplate<typename _Tp> class Point_\n{\npublic:\n    typedef _Tp value_type;\n\n    // various constructors\n    Point_();\n    Point_(_Tp _x, _Tp _y);\n    Point_(const Point_& pt);\n    Point_(const CvPoint& pt);\n    Point_(const CvPoint2D32f& pt);\n    Point_(const Size_<_Tp>& sz);\n    Point_(const Vec<_Tp, 2>& v);\n\n    Point_& operator = (const Point_& pt);\n    //! conversion to another data type\n    template<typename _Tp2> operator Point_<_Tp2>() const;\n\n    //! conversion to the old-style C structures\n    operator CvPoint() const;\n    operator CvPoint2D32f() const;\n    operator Vec<_Tp, 2>() const;\n\n    //! dot product\n    _Tp dot(const Point_& pt) const;\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Point_& pt) const;\n    //! cross-product\n    double cross(const Point_& pt) const;\n    //! checks whether the point is inside the specified rectangle\n    bool inside(const Rect_<_Tp>& r) const;\n\n    _Tp x, y; ///< the point coordinates\n};\n\n/*!\n  template 3D point class.\n\n  The class defines a point in 3D space. Data type of the point coordinates is specified\n  as a template parameter.\n\n  \\see cv::Point3i, cv::Point3f and cv::Point3d\n*/\ntemplate<typename _Tp> class Point3_\n{\npublic:\n    typedef _Tp value_type;\n\n    // various constructors\n    Point3_();\n    Point3_(_Tp _x, _Tp _y, _Tp _z);\n    Point3_(const Point3_& pt);\n    explicit Point3_(const Point_<_Tp>& pt);\n    Point3_(const CvPoint3D32f& pt);\n    Point3_(const Vec<_Tp, 3>& v);\n\n    Point3_& operator = (const Point3_& pt);\n    //! conversion to another data type\n    template<typename _Tp2> operator Point3_<_Tp2>() const;\n    //! conversion to the old-style CvPoint...\n    operator CvPoint3D32f() const;\n    //! conversion to cv::Vec<>\n    operator Vec<_Tp, 3>() const;\n\n    //! dot product\n    _Tp dot(const Point3_& pt) const;\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Point3_& pt) const;\n    //! cross product of the 2 3D points\n    Point3_ cross(const Point3_& pt) const;\n\n    _Tp x, y, z; ///< the point coordinates\n};\n\n//////////////////////////////// Size_ ////////////////////////////////\n\n/*!\n  The 2D size class\n\n  The class represents the size of a 2D rectangle, image size, matrix size etc.\n  Normally, cv::Size ~ cv::Size_<int> is used.\n*/\ntemplate<typename _Tp> class Size_\n{\npublic:\n    typedef _Tp value_type;\n\n    //! various constructors\n    Size_();\n    Size_(_Tp _width, _Tp _height);\n    Size_(const Size_& sz);\n    Size_(const CvSize& sz);\n    Size_(const CvSize2D32f& sz);\n    Size_(const Point_<_Tp>& pt);\n\n    Size_& operator = (const Size_& sz);\n    //! the area (width*height)\n    _Tp area() const;\n\n    //! conversion of another data type.\n    template<typename _Tp2> operator Size_<_Tp2>() const;\n\n    //! conversion to the old-style OpenCV types\n    operator CvSize() const;\n    operator CvSize2D32f() const;\n\n    _Tp width, height; // the width and the height\n};\n\n//////////////////////////////// Rect_ ////////////////////////////////\n\n/*!\n  The 2D up-right rectangle class\n\n  The class represents a 2D rectangle with coordinates of the specified data type.\n  Normally, cv::Rect ~ cv::Rect_<int> is used.\n*/\ntemplate<typename _Tp> class Rect_\n{\npublic:\n    typedef _Tp value_type;\n\n    //! various constructors\n    Rect_();\n    Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);\n    Rect_(const Rect_& r);\n    Rect_(const CvRect& r);\n    Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz);\n    Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2);\n\n    Rect_& operator = ( const Rect_& r );\n    //! the top-left corner\n    Point_<_Tp> tl() const;\n    //! the bottom-right corner\n    Point_<_Tp> br() const;\n\n    //! size (width, height) of the rectangle\n    Size_<_Tp> size() const;\n    //! area (width*height) of the rectangle\n    _Tp area() const;\n\n    //! conversion to another data type\n    template<typename _Tp2> operator Rect_<_Tp2>() const;\n    //! conversion to the old-style CvRect\n    operator CvRect() const;\n\n    //! checks whether the rectangle contains the point\n    bool contains(const Point_<_Tp>& pt) const;\n\n    _Tp x, y, width, height; ///< the top-left corner, as well as width and height of the rectangle\n};\n\n\n/*!\n  \\typedef\n\n  shorter aliases for the most popular cv::Point_<>, cv::Size_<> and cv::Rect_<> specializations\n*/\ntypedef Point_<int> Point2i;\ntypedef Point2i Point;\ntypedef Size_<int> Size2i;\ntypedef Size_<double> Size2d;\ntypedef Size2i Size;\ntypedef Rect_<int> Rect;\ntypedef Point_<float> Point2f;\ntypedef Point_<double> Point2d;\ntypedef Size_<float> Size2f;\ntypedef Point3_<int> Point3i;\ntypedef Point3_<float> Point3f;\ntypedef Point3_<double> Point3d;\n\n\n/*!\n  The rotated 2D rectangle.\n\n  The class represents rotated (i.e. not up-right) rectangles on a plane.\n  Each rectangle is described by the center point (mass center), length of each side\n  (represented by cv::Size2f structure) and the rotation angle in degrees.\n*/\nclass CV_EXPORTS RotatedRect\n{\npublic:\n    //! various constructors\n    RotatedRect();\n    RotatedRect(const Point2f& center, const Size2f& size, float angle);\n    RotatedRect(const CvBox2D& box);\n\n    //! returns 4 vertices of the rectangle\n    void points(Point2f pts[]) const;\n    //! returns the minimal up-right rectangle containing the rotated rectangle\n    Rect boundingRect() const;\n    //! conversion to the old-style CvBox2D structure\n    operator CvBox2D() const;\n\n    Point2f center; ///< the rectangle mass center\n    Size2f size;    ///< width and height of the rectangle\n    float angle;    ///< the rotation angle. When the angle is 0, 90, 180, 270 etc., the rectangle becomes an up-right rectangle.\n};\n\n//////////////////////////////// Scalar_ ///////////////////////////////\n\n/*!\n   The template scalar class.\n\n   This is partially specialized cv::Vec class with the number of elements = 4, i.e. a short vector of four elements.\n   Normally, cv::Scalar ~ cv::Scalar_<double> is used.\n*/\ntemplate<typename _Tp> class Scalar_ : public Vec<_Tp, 4>\n{\npublic:\n    //! various constructors\n    Scalar_();\n    Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);\n    Scalar_(const CvScalar& s);\n    Scalar_(_Tp v0);\n\n    //! returns a scalar with all elements set to v0\n    static Scalar_<_Tp> all(_Tp v0);\n    //! conversion to the old-style CvScalar\n    operator CvScalar() const;\n\n    //! conversion to another data type\n    template<typename T2> operator Scalar_<T2>() const;\n\n    //! per-element product\n    Scalar_<_Tp> mul(const Scalar_<_Tp>& t, double scale=1 ) const;\n\n    // returns (v0, -v1, -v2, -v3)\n    Scalar_<_Tp> conj() const;\n\n    // returns true iff v1 == v2 == v3 == 0\n    bool isReal() const;\n};\n\ntypedef Scalar_<double> Scalar;\n\nCV_EXPORTS void scalarToRawData(const Scalar& s, void* buf, int type, int unroll_to=0);\n\n//////////////////////////////// Range /////////////////////////////////\n\n/*!\n   The 2D range class\n\n   This is the class used to specify a continuous subsequence, i.e. part of a contour, or a column span in a matrix.\n*/\nclass CV_EXPORTS Range\n{\npublic:\n    Range();\n    Range(int _start, int _end);\n    Range(const CvSlice& slice);\n    int size() const;\n    bool empty() const;\n    static Range all();\n    operator CvSlice() const;\n\n    int start, end;\n};\n\n/////////////////////////////// DataType ////////////////////////////////\n\n/*!\n   Informative template class for OpenCV \"scalars\".\n\n   The class is specialized for each primitive numerical type supported by OpenCV (such as unsigned char or float),\n   as well as for more complex types, like cv::Complex<>, std::complex<>, cv::Vec<> etc.\n   The common property of all such types (called \"scalars\", do not confuse it with cv::Scalar_)\n   is that each of them is basically a tuple of numbers of the same type. Each \"scalar\" can be represented\n   by the depth id (CV_8U ... CV_64F) and the number of channels.\n   OpenCV matrices, 2D or nD, dense or sparse, can store \"scalars\",\n   as long as the number of channels does not exceed CV_CN_MAX.\n*/\ntemplate<typename _Tp> class DataType\n{\npublic:\n    typedef _Tp value_type;\n    typedef value_type work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 1, depth = -1, channels = 1, fmt=0,\n        type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<bool>\n{\npublic:\n    typedef bool value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<uchar>\n{\npublic:\n    typedef uchar value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<schar>\n{\npublic:\n    typedef schar value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<char>\n{\npublic:\n    typedef schar value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<ushort>\n{\npublic:\n    typedef ushort value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<short>\n{\npublic:\n    typedef short value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<int>\n{\npublic:\n    typedef int value_type;\n    typedef value_type work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<float>\n{\npublic:\n    typedef float value_type;\n    typedef value_type work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<double>\n{\npublic:\n    typedef double value_type;\n    typedef value_type work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<typename _Tp, int m, int n> class DataType<Matx<_Tp, m, n> >\n{\npublic:\n    typedef Matx<_Tp, m, n> value_type;\n    typedef Matx<typename DataType<_Tp>::work_type, m, n> work_type;\n    typedef _Tp channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = m*n,\n        fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n        type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<typename _Tp, int cn> class DataType<Vec<_Tp, cn> >\n{\npublic:\n    typedef Vec<_Tp, cn> value_type;\n    typedef Vec<typename DataType<_Tp>::work_type, cn> work_type;\n    typedef _Tp channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = cn,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<typename _Tp> class DataType<std::complex<_Tp> >\n{\npublic:\n    typedef std::complex<_Tp> value_type;\n    typedef value_type work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Complex<_Tp> >\n{\npublic:\n    typedef Complex<_Tp> value_type;\n    typedef value_type work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Point_<_Tp> >\n{\npublic:\n    typedef Point_<_Tp> value_type;\n    typedef Point_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Point3_<_Tp> >\n{\npublic:\n    typedef Point3_<_Tp> value_type;\n    typedef Point3_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 3,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Size_<_Tp> >\n{\npublic:\n    typedef Size_<_Tp> value_type;\n    typedef Size_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Rect_<_Tp> >\n{\npublic:\n    typedef Rect_<_Tp> value_type;\n    typedef Rect_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 4,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Scalar_<_Tp> >\n{\npublic:\n    typedef Scalar_<_Tp> value_type;\n    typedef Scalar_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 4,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<> class DataType<Range>\n{\npublic:\n    typedef Range value_type;\n    typedef value_type work_type;\n    typedef int channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n//////////////////// generic_type ref-counting pointer class for C/C++ objects ////////////////////////\n\n/*!\n  Smart pointer to dynamically allocated objects.\n\n  This is template pointer-wrapping class that stores the associated reference counter along with the\n  object pointer. The class is similar to std::smart_ptr<> from the recent addons to the C++ standard,\n  but is shorter to write :) and self-contained (i.e. does add any dependency on the compiler or an external library).\n\n  Basically, you can use \"Ptr<MyObjectType> ptr\" (or faster \"const Ptr<MyObjectType>& ptr\" for read-only access)\n  everywhere instead of \"MyObjectType* ptr\", where MyObjectType is some C structure or a C++ class.\n  To make it all work, you need to specialize Ptr<>::delete_obj(), like:\n\n  \\code\n  template<> void Ptr<MyObjectType>::delete_obj() { call_destructor_func(obj); }\n  \\endcode\n\n  \\note{if MyObjectType is a C++ class with a destructor, you do not need to specialize delete_obj(),\n  since the default implementation calls \"delete obj;\"}\n\n  \\note{Another good property of the class is that the operations on the reference counter are atomic,\n  i.e. it is safe to use the class in multi-threaded applications}\n*/\ntemplate<typename _Tp> class Ptr\n{\npublic:\n    //! empty constructor\n    Ptr();\n    //! take ownership of the pointer. The associated reference counter is allocated and set to 1\n    Ptr(_Tp* _obj);\n    //! calls release()\n    ~Ptr();\n    //! copy constructor. Copies the members and calls addref()\n    Ptr(const Ptr& ptr);\n    template<typename _Tp2> Ptr(const Ptr<_Tp2>& ptr);\n    //! copy operator. Calls ptr.addref() and release() before copying the members\n    Ptr& operator = (const Ptr& ptr);\n    //! increments the reference counter\n    void addref();\n    //! decrements the reference counter. If it reaches 0, delete_obj() is called\n    void release();\n    //! deletes the object. Override if needed\n    void delete_obj();\n    //! returns true iff obj==NULL\n    bool empty() const;\n\n    //! cast pointer to another type\n    template<typename _Tp2> Ptr<_Tp2> ptr();\n    template<typename _Tp2> const Ptr<_Tp2> ptr() const;\n\n    //! helper operators making \"Ptr<T> ptr\" use very similar to \"T* ptr\".\n    _Tp* operator -> ();\n    const _Tp* operator -> () const;\n\n    operator _Tp* ();\n    operator const _Tp*() const;\n\n    _Tp* obj; ///< the object pointer.\n    int* refcount; ///< the associated reference counter\n};\n\n\n//////////////////////// Input/Output Array Arguments /////////////////////////////////\n\n/*!\n Proxy datatype for passing Mat's and vector<>'s as input parameters\n */\nclass CV_EXPORTS _InputArray\n{\npublic:\n    enum {\n        KIND_SHIFT = 16,\n        FIXED_TYPE = 0x8000 << KIND_SHIFT,\n        FIXED_SIZE = 0x4000 << KIND_SHIFT,\n        KIND_MASK = ~(FIXED_TYPE|FIXED_SIZE) - (1 << KIND_SHIFT) + 1,\n\n        NONE              = 0 << KIND_SHIFT,\n        MAT               = 1 << KIND_SHIFT,\n        MATX              = 2 << KIND_SHIFT,\n        STD_VECTOR        = 3 << KIND_SHIFT,\n        STD_VECTOR_VECTOR = 4 << KIND_SHIFT,\n        STD_VECTOR_MAT    = 5 << KIND_SHIFT,\n        EXPR              = 6 << KIND_SHIFT,\n        OPENGL_BUFFER     = 7 << KIND_SHIFT,\n        OPENGL_TEXTURE    = 8 << KIND_SHIFT,\n        GPU_MAT           = 9 << KIND_SHIFT,\n        OCL_MAT           =10 << KIND_SHIFT\n    };\n    _InputArray();\n\n    _InputArray(const Mat& m);\n    _InputArray(const MatExpr& expr);\n    template<typename _Tp> _InputArray(const _Tp* vec, int n);\n    template<typename _Tp> _InputArray(const vector<_Tp>& vec);\n    template<typename _Tp> _InputArray(const vector<vector<_Tp> >& vec);\n    _InputArray(const vector<Mat>& vec);\n    template<typename _Tp> _InputArray(const vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _InputArray(const Mat_<_Tp>& m);\n    template<typename _Tp, int m, int n> _InputArray(const Matx<_Tp, m, n>& matx);\n    _InputArray(const Scalar& s);\n    _InputArray(const double& val);\n    // < Deprecated\n    _InputArray(const GlBuffer& buf);\n    _InputArray(const GlTexture& tex);\n    // >\n    _InputArray(const gpu::GpuMat& d_mat);\n    _InputArray(const ogl::Buffer& buf);\n    _InputArray(const ogl::Texture2D& tex);\n\n    virtual Mat getMat(int i=-1) const;\n    virtual void getMatVector(vector<Mat>& mv) const;\n    // < Deprecated\n    virtual GlBuffer getGlBuffer() const;\n    virtual GlTexture getGlTexture() const;\n    // >\n    virtual gpu::GpuMat getGpuMat() const;\n    /*virtual*/ ogl::Buffer getOGlBuffer() const;\n    /*virtual*/ ogl::Texture2D getOGlTexture2D() const;\n\n    virtual int kind() const;\n    virtual Size size(int i=-1) const;\n    virtual size_t total(int i=-1) const;\n    virtual int type(int i=-1) const;\n    virtual int depth(int i=-1) const;\n    virtual int channels(int i=-1) const;\n    virtual bool empty() const;\n\n#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY\n    virtual ~_InputArray();\n#endif\n\n    int flags;\n    void* obj;\n    Size sz;\n};\n\n\nenum\n{\n    DEPTH_MASK_8U = 1 << CV_8U,\n    DEPTH_MASK_8S = 1 << CV_8S,\n    DEPTH_MASK_16U = 1 << CV_16U,\n    DEPTH_MASK_16S = 1 << CV_16S,\n    DEPTH_MASK_32S = 1 << CV_32S,\n    DEPTH_MASK_32F = 1 << CV_32F,\n    DEPTH_MASK_64F = 1 << CV_64F,\n    DEPTH_MASK_ALL = (DEPTH_MASK_64F<<1)-1,\n    DEPTH_MASK_ALL_BUT_8S = DEPTH_MASK_ALL & ~DEPTH_MASK_8S,\n    DEPTH_MASK_FLT = DEPTH_MASK_32F + DEPTH_MASK_64F\n};\n\n\n/*!\n Proxy datatype for passing Mat's and vector<>'s as input parameters\n */\nclass CV_EXPORTS _OutputArray : public _InputArray\n{\npublic:\n    _OutputArray();\n\n    _OutputArray(Mat& m);\n    template<typename _Tp> _OutputArray(vector<_Tp>& vec);\n    template<typename _Tp> _OutputArray(vector<vector<_Tp> >& vec);\n    _OutputArray(vector<Mat>& vec);\n    template<typename _Tp> _OutputArray(vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _OutputArray(Mat_<_Tp>& m);\n    template<typename _Tp, int m, int n> _OutputArray(Matx<_Tp, m, n>& matx);\n    template<typename _Tp> _OutputArray(_Tp* vec, int n);\n    _OutputArray(gpu::GpuMat& d_mat);\n    _OutputArray(ogl::Buffer& buf);\n    _OutputArray(ogl::Texture2D& tex);\n\n    _OutputArray(const Mat& m);\n    template<typename _Tp> _OutputArray(const vector<_Tp>& vec);\n    template<typename _Tp> _OutputArray(const vector<vector<_Tp> >& vec);\n    _OutputArray(const vector<Mat>& vec);\n    template<typename _Tp> _OutputArray(const vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _OutputArray(const Mat_<_Tp>& m);\n    template<typename _Tp, int m, int n> _OutputArray(const Matx<_Tp, m, n>& matx);\n    template<typename _Tp> _OutputArray(const _Tp* vec, int n);\n    _OutputArray(const gpu::GpuMat& d_mat);\n    _OutputArray(const ogl::Buffer& buf);\n    _OutputArray(const ogl::Texture2D& tex);\n\n    virtual bool fixedSize() const;\n    virtual bool fixedType() const;\n    virtual bool needed() const;\n    virtual Mat& getMatRef(int i=-1) const;\n    /*virtual*/ gpu::GpuMat& getGpuMatRef() const;\n    /*virtual*/ ogl::Buffer& getOGlBufferRef() const;\n    /*virtual*/ ogl::Texture2D& getOGlTexture2DRef() const;\n    virtual void create(Size sz, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    virtual void create(int rows, int cols, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    virtual void create(int dims, const int* size, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    virtual void release() const;\n    virtual void clear() const;\n\n#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY\n    virtual ~_OutputArray();\n#endif\n};\n\ntypedef const _InputArray& InputArray;\ntypedef InputArray InputArrayOfArrays;\ntypedef const _OutputArray& OutputArray;\ntypedef OutputArray OutputArrayOfArrays;\ntypedef OutputArray InputOutputArray;\ntypedef OutputArray InputOutputArrayOfArrays;\n\nCV_EXPORTS OutputArray noArray();\n\n/////////////////////////////////////// Mat ///////////////////////////////////////////\n\nenum { MAGIC_MASK=0xFFFF0000, TYPE_MASK=0x00000FFF, DEPTH_MASK=7 };\n\nstatic inline size_t getElemSize(int type) { return CV_ELEM_SIZE(type); }\n\n/*!\n   Custom array allocator\n\n*/\nclass CV_EXPORTS MatAllocator\n{\npublic:\n    MatAllocator() {}\n    virtual ~MatAllocator() {}\n    virtual void allocate(int dims, const int* sizes, int type, int*& refcount,\n                          uchar*& datastart, uchar*& data, size_t* step) = 0;\n    virtual void deallocate(int* refcount, uchar* datastart, uchar* data) = 0;\n};\n\n/*!\n   The n-dimensional matrix class.\n\n   The class represents an n-dimensional dense numerical array that can act as\n   a matrix, image, optical flow map, 3-focal tensor etc.\n   It is very similar to CvMat and CvMatND types from earlier versions of OpenCV,\n   and similarly to those types, the matrix can be multi-channel. It also fully supports ROI mechanism.\n\n   There are many different ways to create cv::Mat object. Here are the some popular ones:\n   <ul>\n   <li> using cv::Mat::create(nrows, ncols, type) method or\n     the similar constructor cv::Mat::Mat(nrows, ncols, type[, fill_value]) constructor.\n     A new matrix of the specified size and specifed type will be allocated.\n     \"type\" has the same meaning as in cvCreateMat function,\n     e.g. CV_8UC1 means 8-bit single-channel matrix, CV_32FC2 means 2-channel (i.e. complex)\n     floating-point matrix etc:\n\n     \\code\n     // make 7x7 complex matrix filled with 1+3j.\n     cv::Mat M(7,7,CV_32FC2,Scalar(1,3));\n     // and now turn M to 100x60 15-channel 8-bit matrix.\n     // The old content will be deallocated\n     M.create(100,60,CV_8UC(15));\n     \\endcode\n\n     As noted in the introduction of this chapter, Mat::create()\n     will only allocate a new matrix when the current matrix dimensionality\n     or type are different from the specified.\n\n   <li> by using a copy constructor or assignment operator, where on the right side it can\n     be a matrix or expression, see below. Again, as noted in the introduction,\n     matrix assignment is O(1) operation because it only copies the header\n     and increases the reference counter. cv::Mat::clone() method can be used to get a full\n     (a.k.a. deep) copy of the matrix when you need it.\n\n   <li> by constructing a header for a part of another matrix. It can be a single row, single column,\n     several rows, several columns, rectangular region in the matrix (called a minor in algebra) or\n     a diagonal. Such operations are also O(1), because the new header will reference the same data.\n     You can actually modify a part of the matrix using this feature, e.g.\n\n     \\code\n     // add 5-th row, multiplied by 3 to the 3rd row\n     M.row(3) = M.row(3) + M.row(5)*3;\n\n     // now copy 7-th column to the 1-st column\n     // M.col(1) = M.col(7); // this will not work\n     Mat M1 = M.col(1);\n     M.col(7).copyTo(M1);\n\n     // create new 320x240 image\n     cv::Mat img(Size(320,240),CV_8UC3);\n     // select a roi\n     cv::Mat roi(img, Rect(10,10,100,100));\n     // fill the ROI with (0,255,0) (which is green in RGB space);\n     // the original 320x240 image will be modified\n     roi = Scalar(0,255,0);\n     \\endcode\n\n     Thanks to the additional cv::Mat::datastart and cv::Mat::dataend members, it is possible to\n     compute the relative sub-matrix position in the main \"container\" matrix using cv::Mat::locateROI():\n\n     \\code\n     Mat A = Mat::eye(10, 10, CV_32S);\n     // extracts A columns, 1 (inclusive) to 3 (exclusive).\n     Mat B = A(Range::all(), Range(1, 3));\n     // extracts B rows, 5 (inclusive) to 9 (exclusive).\n     // that is, C ~ A(Range(5, 9), Range(1, 3))\n     Mat C = B(Range(5, 9), Range::all());\n     Size size; Point ofs;\n     C.locateROI(size, ofs);\n     // size will be (width=10,height=10) and the ofs will be (x=1, y=5)\n     \\endcode\n\n     As in the case of whole matrices, if you need a deep copy, use cv::Mat::clone() method\n     of the extracted sub-matrices.\n\n   <li> by making a header for user-allocated-data. It can be useful for\n      <ol>\n      <li> processing \"foreign\" data using OpenCV (e.g. when you implement\n         a DirectShow filter or a processing module for gstreamer etc.), e.g.\n\n         \\code\n         void process_video_frame(const unsigned char* pixels,\n                                  int width, int height, int step)\n         {\n            cv::Mat img(height, width, CV_8UC3, pixels, step);\n            cv::GaussianBlur(img, img, cv::Size(7,7), 1.5, 1.5);\n         }\n         \\endcode\n\n      <li> for quick initialization of small matrices and/or super-fast element access\n\n         \\code\n         double m[3][3] = {{a, b, c}, {d, e, f}, {g, h, i}};\n         cv::Mat M = cv::Mat(3, 3, CV_64F, m).inv();\n         \\endcode\n      </ol>\n\n       partial yet very common cases of this \"user-allocated data\" case are conversions\n       from CvMat and IplImage to cv::Mat. For this purpose there are special constructors\n       taking pointers to CvMat or IplImage and the optional\n       flag indicating whether to copy the data or not.\n\n       Backward conversion from cv::Mat to CvMat or IplImage is provided via cast operators\n       cv::Mat::operator CvMat() an cv::Mat::operator IplImage().\n       The operators do not copy the data.\n\n\n       \\code\n       IplImage* img = cvLoadImage(\"greatwave.jpg\", 1);\n       Mat mtx(img); // convert IplImage* -> cv::Mat\n       CvMat oldmat = mtx; // convert cv::Mat -> CvMat\n       CV_Assert(oldmat.cols == img->width && oldmat.rows == img->height &&\n           oldmat.data.ptr == (uchar*)img->imageData && oldmat.step == img->widthStep);\n       \\endcode\n\n   <li> by using MATLAB-style matrix initializers, cv::Mat::zeros(), cv::Mat::ones(), cv::Mat::eye(), e.g.:\n\n   \\code\n   // create a double-precision identity martix and add it to M.\n   M += Mat::eye(M.rows, M.cols, CV_64F);\n   \\endcode\n\n   <li> by using comma-separated initializer:\n\n   \\code\n   // create 3x3 double-precision identity matrix\n   Mat M = (Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);\n   \\endcode\n\n   here we first call constructor of cv::Mat_ class (that we describe further) with the proper matrix,\n   and then we just put \"<<\" operator followed by comma-separated values that can be constants,\n   variables, expressions etc. Also, note the extra parentheses that are needed to avoid compiler errors.\n\n   </ul>\n\n   Once matrix is created, it will be automatically managed by using reference-counting mechanism\n   (unless the matrix header is built on top of user-allocated data,\n   in which case you should handle the data by yourself).\n   The matrix data will be deallocated when no one points to it;\n   if you want to release the data pointed by a matrix header before the matrix destructor is called,\n   use cv::Mat::release().\n\n   The next important thing to learn about the matrix class is element access. Here is how the matrix is stored.\n   The elements are stored in row-major order (row by row). The cv::Mat::data member points to the first element of the first row,\n   cv::Mat::rows contains the number of matrix rows and cv::Mat::cols - the number of matrix columns. There is yet another member,\n   cv::Mat::step that is used to actually compute address of a matrix element. cv::Mat::step is needed because the matrix can be\n   a part of another matrix or because there can some padding space in the end of each row for a proper alignment.\n\n   \\image html roi.png\n\n   Given these parameters, address of the matrix element M_{ij} is computed as following:\n\n   addr(M_{ij})=M.data + M.step*i + j*M.elemSize()\n\n   if you know the matrix element type, e.g. it is float, then you can use cv::Mat::at() method:\n\n   addr(M_{ij})=&M.at<float>(i,j)\n\n   (where & is used to convert the reference returned by cv::Mat::at() to a pointer).\n   if you need to process a whole row of matrix, the most efficient way is to get\n   the pointer to the row first, and then just use plain C operator []:\n\n   \\code\n   // compute sum of positive matrix elements\n   // (assuming that M is double-precision matrix)\n   double sum=0;\n   for(int i = 0; i < M.rows; i++)\n   {\n       const double* Mi = M.ptr<double>(i);\n       for(int j = 0; j < M.cols; j++)\n           sum += std::max(Mi[j], 0.);\n   }\n   \\endcode\n\n   Some operations, like the above one, do not actually depend on the matrix shape,\n   they just process elements of a matrix one by one (or elements from multiple matrices\n   that are sitting in the same place, e.g. matrix addition). Such operations are called\n   element-wise and it makes sense to check whether all the input/output matrices are continuous,\n   i.e. have no gaps in the end of each row, and if yes, process them as a single long row:\n\n   \\code\n   // compute sum of positive matrix elements, optimized variant\n   double sum=0;\n   int cols = M.cols, rows = M.rows;\n   if(M.isContinuous())\n   {\n       cols *= rows;\n       rows = 1;\n   }\n   for(int i = 0; i < rows; i++)\n   {\n       const double* Mi = M.ptr<double>(i);\n       for(int j = 0; j < cols; j++)\n           sum += std::max(Mi[j], 0.);\n   }\n   \\endcode\n   in the case of continuous matrix the outer loop body will be executed just once,\n   so the overhead will be smaller, which will be especially noticeable in the case of small matrices.\n\n   Finally, there are STL-style iterators that are smart enough to skip gaps between successive rows:\n   \\code\n   // compute sum of positive matrix elements, iterator-based variant\n   double sum=0;\n   MatConstIterator_<double> it = M.begin<double>(), it_end = M.end<double>();\n   for(; it != it_end; ++it)\n       sum += std::max(*it, 0.);\n   \\endcode\n\n   The matrix iterators are random-access iterators, so they can be passed\n   to any STL algorithm, including std::sort().\n*/\nclass CV_EXPORTS Mat\n{\npublic:\n    //! default constructor\n    Mat();\n    //! constructs 2D matrix of the specified size and type\n    // (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)\n    Mat(int rows, int cols, int type);\n    Mat(Size size, int type);\n    //! constucts 2D matrix and fills it with the specified value _s.\n    Mat(int rows, int cols, int type, const Scalar& s);\n    Mat(Size size, int type, const Scalar& s);\n\n    //! constructs n-dimensional matrix\n    Mat(int ndims, const int* sizes, int type);\n    Mat(int ndims, const int* sizes, int type, const Scalar& s);\n\n    //! copy constructor\n    Mat(const Mat& m);\n    //! constructor for matrix headers pointing to user-allocated data\n    Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP);\n    Mat(Size size, int type, void* data, size_t step=AUTO_STEP);\n    Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0);\n\n    //! creates a matrix header for a part of the bigger matrix\n    Mat(const Mat& m, const Range& rowRange, const Range& colRange=Range::all());\n    Mat(const Mat& m, const Rect& roi);\n    Mat(const Mat& m, const Range* ranges);\n    //! converts old-style CvMat to the new matrix; the data is not copied by default\n    Mat(const CvMat* m, bool copyData=false);\n    //! converts old-style CvMatND to the new matrix; the data is not copied by default\n    Mat(const CvMatND* m, bool copyData=false);\n    //! converts old-style IplImage to the new matrix; the data is not copied by default\n    Mat(const IplImage* img, bool copyData=false);\n    //! builds matrix from std::vector with or without copying the data\n    template<typename _Tp> explicit Mat(const vector<_Tp>& vec, bool copyData=false);\n    //! builds matrix from cv::Vec; the data is copied by default\n    template<typename _Tp, int n> explicit Mat(const Vec<_Tp, n>& vec, bool copyData=true);\n    //! builds matrix from cv::Matx; the data is copied by default\n    template<typename _Tp, int m, int n> explicit Mat(const Matx<_Tp, m, n>& mtx, bool copyData=true);\n    //! builds matrix from a 2D point\n    template<typename _Tp> explicit Mat(const Point_<_Tp>& pt, bool copyData=true);\n    //! builds matrix from a 3D point\n    template<typename _Tp> explicit Mat(const Point3_<_Tp>& pt, bool copyData=true);\n    //! builds matrix from comma initializer\n    template<typename _Tp> explicit Mat(const MatCommaInitializer_<_Tp>& commaInitializer);\n\n    //! download data from GpuMat\n    explicit Mat(const gpu::GpuMat& m);\n\n    //! destructor - calls release()\n    ~Mat();\n    //! assignment operators\n    Mat& operator = (const Mat& m);\n    Mat& operator = (const MatExpr& expr);\n\n    //! returns a new matrix header for the specified row\n    Mat row(int y) const;\n    //! returns a new matrix header for the specified column\n    Mat col(int x) const;\n    //! ... for the specified row span\n    Mat rowRange(int startrow, int endrow) const;\n    Mat rowRange(const Range& r) const;\n    //! ... for the specified column span\n    Mat colRange(int startcol, int endcol) const;\n    Mat colRange(const Range& r) const;\n    //! ... for the specified diagonal\n    // (d=0 - the main diagonal,\n    //  >0 - a diagonal from the lower half,\n    //  <0 - a diagonal from the upper half)\n    Mat diag(int d=0) const;\n    //! constructs a square diagonal matrix which main diagonal is vector \"d\"\n    static Mat diag(const Mat& d);\n\n    //! returns deep copy of the matrix, i.e. the data is copied\n    Mat clone() const;\n    //! copies the matrix content to \"m\".\n    // It calls m.create(this->size(), this->type()).\n    void copyTo( OutputArray m ) const;\n    //! copies those matrix elements to \"m\" that are marked with non-zero mask elements.\n    void copyTo( OutputArray m, InputArray mask ) const;\n    //! converts matrix to another datatype with optional scalng. See cvConvertScale.\n    void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const;\n\n    void assignTo( Mat& m, int type=-1 ) const;\n\n    //! sets every matrix element to s\n    Mat& operator = (const Scalar& s);\n    //! sets some of the matrix elements to s, according to the mask\n    Mat& setTo(InputArray value, InputArray mask=noArray());\n    //! creates alternative matrix header for the same data, with different\n    // number of channels and/or different number of rows. see cvReshape.\n    Mat reshape(int cn, int rows=0) const;\n    Mat reshape(int cn, int newndims, const int* newsz) const;\n\n    //! matrix transposition by means of matrix expressions\n    MatExpr t() const;\n    //! matrix inversion by means of matrix expressions\n    MatExpr inv(int method=DECOMP_LU) const;\n    //! per-element matrix multiplication by means of matrix expressions\n    MatExpr mul(InputArray m, double scale=1) const;\n\n    //! computes cross-product of 2 3D vectors\n    Mat cross(InputArray m) const;\n    //! computes dot-product\n    double dot(InputArray m) const;\n\n    //! Matlab-style matrix initialization\n    static MatExpr zeros(int rows, int cols, int type);\n    static MatExpr zeros(Size size, int type);\n    static MatExpr zeros(int ndims, const int* sz, int type);\n    static MatExpr ones(int rows, int cols, int type);\n    static MatExpr ones(Size size, int type);\n    static MatExpr ones(int ndims, const int* sz, int type);\n    static MatExpr eye(int rows, int cols, int type);\n    static MatExpr eye(Size size, int type);\n\n    //! allocates new matrix data unless the matrix already has specified size and type.\n    // previous data is unreferenced if needed.\n    void create(int rows, int cols, int type);\n    void create(Size size, int type);\n    void create(int ndims, const int* sizes, int type);\n\n    //! increases the reference counter; use with care to avoid memleaks\n    void addref();\n    //! decreases reference counter;\n    // deallocates the data when reference counter reaches 0.\n    void release();\n\n    //! deallocates the matrix data\n    void deallocate();\n    //! internal use function; properly re-allocates _size, _step arrays\n    void copySize(const Mat& m);\n\n    //! reserves enough space to fit sz hyper-planes\n    void reserve(size_t sz);\n    //! resizes matrix to the specified number of hyper-planes\n    void resize(size_t sz);\n    //! resizes matrix to the specified number of hyper-planes; initializes the newly added elements\n    void resize(size_t sz, const Scalar& s);\n    //! internal function\n    void push_back_(const void* elem);\n    //! adds element to the end of 1d matrix (or possibly multiple elements when _Tp=Mat)\n    template<typename _Tp> void push_back(const _Tp& elem);\n    template<typename _Tp> void push_back(const Mat_<_Tp>& elem);\n    void push_back(const Mat& m);\n    //! removes several hyper-planes from bottom of the matrix\n    void pop_back(size_t nelems=1);\n\n    //! locates matrix header within a parent matrix. See below\n    void locateROI( Size& wholeSize, Point& ofs ) const;\n    //! moves/resizes the current matrix ROI inside the parent matrix.\n    Mat& adjustROI( int dtop, int dbottom, int dleft, int dright );\n    //! extracts a rectangular sub-matrix\n    // (this is a generalized form of row, rowRange etc.)\n    Mat operator()( Range rowRange, Range colRange ) const;\n    Mat operator()( const Rect& roi ) const;\n    Mat operator()( const Range* ranges ) const;\n\n    //! converts header to CvMat; no data is copied\n    operator CvMat() const;\n    //! converts header to CvMatND; no data is copied\n    operator CvMatND() const;\n    //! converts header to IplImage; no data is copied\n    operator IplImage() const;\n\n    template<typename _Tp> operator vector<_Tp>() const;\n    template<typename _Tp, int n> operator Vec<_Tp, n>() const;\n    template<typename _Tp, int m, int n> operator Matx<_Tp, m, n>() const;\n\n    //! returns true iff the matrix data is continuous\n    // (i.e. when there are no gaps between successive rows).\n    // similar to CV_IS_MAT_CONT(cvmat->type)\n    bool isContinuous() const;\n\n    //! returns true if the matrix is a submatrix of another matrix\n    bool isSubmatrix() const;\n\n    //! returns element size in bytes,\n    // similar to CV_ELEM_SIZE(cvmat->type)\n    size_t elemSize() const;\n    //! returns the size of element channel in bytes.\n    size_t elemSize1() const;\n    //! returns element type, similar to CV_MAT_TYPE(cvmat->type)\n    int type() const;\n    //! returns element type, similar to CV_MAT_DEPTH(cvmat->type)\n    int depth() const;\n    //! returns element type, similar to CV_MAT_CN(cvmat->type)\n    int channels() const;\n    //! returns step/elemSize1()\n    size_t step1(int i=0) const;\n    //! returns true if matrix data is NULL\n    bool empty() const;\n    //! returns the total number of matrix elements\n    size_t total() const;\n\n    //! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise\n    int checkVector(int elemChannels, int depth=-1, bool requireContinuous=true) const;\n\n    //! returns pointer to i0-th submatrix along the dimension #0\n    uchar* ptr(int i0=0);\n    const uchar* ptr(int i0=0) const;\n\n    //! returns pointer to (i0,i1) submatrix along the dimensions #0 and #1\n    uchar* ptr(int i0, int i1);\n    const uchar* ptr(int i0, int i1) const;\n\n    //! returns pointer to (i0,i1,i3) submatrix along the dimensions #0, #1, #2\n    uchar* ptr(int i0, int i1, int i2);\n    const uchar* ptr(int i0, int i1, int i2) const;\n\n    //! returns pointer to the matrix element\n    uchar* ptr(const int* idx);\n    //! returns read-only pointer to the matrix element\n    const uchar* ptr(const int* idx) const;\n\n    template<int n> uchar* ptr(const Vec<int, n>& idx);\n    template<int n> const uchar* ptr(const Vec<int, n>& idx) const;\n\n    //! template version of the above method\n    template<typename _Tp> _Tp* ptr(int i0=0);\n    template<typename _Tp> const _Tp* ptr(int i0=0) const;\n\n    template<typename _Tp> _Tp* ptr(int i0, int i1);\n    template<typename _Tp> const _Tp* ptr(int i0, int i1) const;\n\n    template<typename _Tp> _Tp* ptr(int i0, int i1, int i2);\n    template<typename _Tp> const _Tp* ptr(int i0, int i1, int i2) const;\n\n    template<typename _Tp> _Tp* ptr(const int* idx);\n    template<typename _Tp> const _Tp* ptr(const int* idx) const;\n\n    template<typename _Tp, int n> _Tp* ptr(const Vec<int, n>& idx);\n    template<typename _Tp, int n> const _Tp* ptr(const Vec<int, n>& idx) const;\n\n    //! the same as above, with the pointer dereferencing\n    template<typename _Tp> _Tp& at(int i0=0);\n    template<typename _Tp> const _Tp& at(int i0=0) const;\n\n    template<typename _Tp> _Tp& at(int i0, int i1);\n    template<typename _Tp> const _Tp& at(int i0, int i1) const;\n\n    template<typename _Tp> _Tp& at(int i0, int i1, int i2);\n    template<typename _Tp> const _Tp& at(int i0, int i1, int i2) const;\n\n    template<typename _Tp> _Tp& at(const int* idx);\n    template<typename _Tp> const _Tp& at(const int* idx) const;\n\n    template<typename _Tp, int n> _Tp& at(const Vec<int, n>& idx);\n    template<typename _Tp, int n> const _Tp& at(const Vec<int, n>& idx) const;\n\n    //! special versions for 2D arrays (especially convenient for referencing image pixels)\n    template<typename _Tp> _Tp& at(Point pt);\n    template<typename _Tp> const _Tp& at(Point pt) const;\n\n    //! template methods for iteration over matrix elements.\n    // the iterators take care of skipping gaps in the end of rows (if any)\n    template<typename _Tp> MatIterator_<_Tp> begin();\n    template<typename _Tp> MatIterator_<_Tp> end();\n    template<typename _Tp> MatConstIterator_<_Tp> begin() const;\n    template<typename _Tp> MatConstIterator_<_Tp> end() const;\n\n    enum { MAGIC_VAL=0x42FF0000, AUTO_STEP=0, CONTINUOUS_FLAG=CV_MAT_CONT_FLAG, SUBMATRIX_FLAG=CV_SUBMAT_FLAG };\n\n    /*! includes several bit-fields:\n         - the magic signature\n         - continuity flag\n         - depth\n         - number of channels\n     */\n    int flags;\n    //! the matrix dimensionality, >= 2\n    int dims;\n    //! the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions\n    int rows, cols;\n    //! pointer to the data\n    uchar* data;\n\n    //! pointer to the reference counter;\n    // when matrix points to user-allocated data, the pointer is NULL\n    int* refcount;\n\n    //! helper fields used in locateROI and adjustROI\n    uchar* datastart;\n    uchar* dataend;\n    uchar* datalimit;\n\n    //! custom allocator\n    MatAllocator* allocator;\n\n    struct CV_EXPORTS MSize\n    {\n        MSize(int* _p);\n        Size operator()() const;\n        const int& operator[](int i) const;\n        int& operator[](int i);\n        operator const int*() const;\n        bool operator == (const MSize& sz) const;\n        bool operator != (const MSize& sz) const;\n\n        int* p;\n    };\n\n    struct CV_EXPORTS MStep\n    {\n        MStep();\n        MStep(size_t s);\n        const size_t& operator[](int i) const;\n        size_t& operator[](int i);\n        operator size_t() const;\n        MStep& operator = (size_t s);\n\n        size_t* p;\n        size_t buf[2];\n    protected:\n        MStep& operator = (const MStep&);\n    };\n\n    MSize size;\n    MStep step;\n\nprotected:\n    void initEmpty();\n};\n\n\n/*!\n   Random Number Generator\n\n   The class implements RNG using Multiply-with-Carry algorithm\n*/\nclass CV_EXPORTS RNG\n{\npublic:\n    enum { UNIFORM=0, NORMAL=1 };\n\n    RNG();\n    RNG(uint64 state);\n    //! updates the state and returns the next 32-bit unsigned integer random number\n    unsigned next();\n\n    operator uchar();\n    operator schar();\n    operator ushort();\n    operator short();\n    operator unsigned();\n    //! returns a random integer sampled uniformly from [0, N).\n    unsigned operator ()(unsigned N);\n    unsigned operator ()();\n    operator int();\n    operator float();\n    operator double();\n    //! returns uniformly distributed integer random number from [a,b) range\n    int uniform(int a, int b);\n    //! returns uniformly distributed floating-point random number from [a,b) range\n    float uniform(float a, float b);\n    //! returns uniformly distributed double-precision floating-point random number from [a,b) range\n    double uniform(double a, double b);\n    void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false );\n    //! returns Gaussian random variate with mean zero.\n    double gaussian(double sigma);\n\n    uint64 state;\n};\n\n/*!\n   Random Number Generator - MT\n\n   The class implements RNG using the Mersenne Twister algorithm\n*/\nclass CV_EXPORTS RNG_MT19937\n{\npublic:\n    RNG_MT19937();\n    RNG_MT19937(unsigned s);\n    void seed(unsigned s);\n\n    unsigned next();\n\n    operator int();\n    operator unsigned();\n    operator float();\n    operator double();\n\n    unsigned operator ()(unsigned N);\n    unsigned operator ()();\n\n    //! returns uniformly distributed integer random number from [a,b) range\n    int uniform(int a, int b);\n    //! returns uniformly distributed floating-point random number from [a,b) range\n    float uniform(float a, float b);\n    //! returns uniformly distributed double-precision floating-point random number from [a,b) range\n    double uniform(double a, double b);\n\nprivate:\n    enum PeriodParameters {N = 624, M = 397};\n    unsigned state[N];\n    int mti;\n};\n\n/*!\n Termination criteria in iterative algorithms\n */\nclass CV_EXPORTS TermCriteria\n{\npublic:\n    enum\n    {\n        COUNT=1, //!< the maximum number of iterations or elements to compute\n        MAX_ITER=COUNT, //!< ditto\n        EPS=2 //!< the desired accuracy or change in parameters at which the iterative algorithm stops\n    };\n\n    //! default constructor\n    TermCriteria();\n    //! full constructor\n    TermCriteria(int type, int maxCount, double epsilon);\n    //! conversion from CvTermCriteria\n    TermCriteria(const CvTermCriteria& criteria);\n    //! conversion to CvTermCriteria\n    operator CvTermCriteria() const;\n\n    int type; //!< the type of termination criteria: COUNT, EPS or COUNT + EPS\n    int maxCount; // the maximum number of iterations/elements\n    double epsilon; // the desired accuracy\n};\n\n\ntypedef void (*BinaryFunc)(const uchar* src1, size_t step1,\n                           const uchar* src2, size_t step2,\n                           uchar* dst, size_t step, Size sz,\n                           void*);\n\nCV_EXPORTS BinaryFunc getConvertFunc(int sdepth, int ddepth);\nCV_EXPORTS BinaryFunc getConvertScaleFunc(int sdepth, int ddepth);\nCV_EXPORTS BinaryFunc getCopyMaskFunc(size_t esz);\n\n//! swaps two matrices\nCV_EXPORTS void swap(Mat& a, Mat& b);\n\n//! converts array (CvMat or IplImage) to cv::Mat\nCV_EXPORTS Mat cvarrToMat(const CvArr* arr, bool copyData=false,\n                          bool allowND=true, int coiMode=0);\n//! extracts Channel of Interest from CvMat or IplImage and makes cv::Mat out of it.\nCV_EXPORTS void extractImageCOI(const CvArr* arr, OutputArray coiimg, int coi=-1);\n//! inserts single-channel cv::Mat into a multi-channel CvMat or IplImage\nCV_EXPORTS void insertImageCOI(InputArray coiimg, CvArr* arr, int coi=-1);\n\n//! adds one matrix to another (dst = src1 + src2)\nCV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst,\n                      InputArray mask=noArray(), int dtype=-1);\n//! subtracts one matrix from another (dst = src1 - src2)\nCV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst,\n                           InputArray mask=noArray(), int dtype=-1);\n\n//! computes element-wise weighted product of the two arrays (dst = scale*src1*src2)\nCV_EXPORTS_W void multiply(InputArray src1, InputArray src2,\n                           OutputArray dst, double scale=1, int dtype=-1);\n\n//! computes element-wise weighted quotient of the two arrays (dst = scale*src1/src2)\nCV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst,\n                         double scale=1, int dtype=-1);\n\n//! computes element-wise weighted reciprocal of an array (dst = scale/src2)\nCV_EXPORTS_W void divide(double scale, InputArray src2,\n                         OutputArray dst, int dtype=-1);\n\n//! adds scaled array to another one (dst = alpha*src1 + src2)\nCV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst);\n\n//! computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma)\nCV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,\n                              double beta, double gamma, OutputArray dst, int dtype=-1);\n\n//! scales array elements, computes absolute values and converts the results to 8-bit unsigned integers: dst(i)=saturate_cast<uchar>abs(src(i)*alpha+beta)\nCV_EXPORTS_W void convertScaleAbs(InputArray src, OutputArray dst,\n                                  double alpha=1, double beta=0);\n//! transforms array of numbers using a lookup table: dst(i)=lut(src(i))\nCV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst,\n                      int interpolation=0);\n\n//! computes sum of array elements\nCV_EXPORTS_AS(sumElems) Scalar sum(InputArray src);\n//! computes the number of nonzero array elements\nCV_EXPORTS_W int countNonZero( InputArray src );\n//! returns the list of locations of non-zero pixels\nCV_EXPORTS_W void findNonZero( InputArray src, OutputArray idx );\n\n//! computes mean value of selected array elements\nCV_EXPORTS_W Scalar mean(InputArray src, InputArray mask=noArray());\n//! computes mean value and standard deviation of all or selected array elements\nCV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev,\n                             InputArray mask=noArray());\n//! computes norm of the selected array part\nCV_EXPORTS_W double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray());\n//! computes norm of selected part of the difference between two arrays\nCV_EXPORTS_W double norm(InputArray src1, InputArray src2,\n                         int normType=NORM_L2, InputArray mask=noArray());\n\n//! naive nearest neighbor finder\nCV_EXPORTS_W void batchDistance(InputArray src1, InputArray src2,\n                                OutputArray dist, int dtype, OutputArray nidx,\n                                int normType=NORM_L2, int K=0,\n                                InputArray mask=noArray(), int update=0,\n                                bool crosscheck=false);\n\n//! scales and shifts array elements so that either the specified norm (alpha) or the minimum (alpha) and maximum (beta) array values get the specified values\nCV_EXPORTS_W void normalize( InputArray src, OutputArray dst, double alpha=1, double beta=0,\n                             int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray());\n\n//! finds global minimum and maximum array elements and returns their values and their locations\nCV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal,\n                           CV_OUT double* maxVal=0, CV_OUT Point* minLoc=0,\n                           CV_OUT Point* maxLoc=0, InputArray mask=noArray());\nCV_EXPORTS void minMaxIdx(InputArray src, double* minVal, double* maxVal,\n                          int* minIdx=0, int* maxIdx=0, InputArray mask=noArray());\n\n//! transforms 2D matrix to 1D row or column vector by taking sum, minimum, maximum or mean value over all the rows\nCV_EXPORTS_W void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1);\n\n//! makes multi-channel array out of several single-channel arrays\nCV_EXPORTS void merge(const Mat* mv, size_t count, OutputArray dst);\nCV_EXPORTS void merge(const vector<Mat>& mv, OutputArray dst );\n\n//! makes multi-channel array out of several single-channel arrays\nCV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst);\n\n//! copies each plane of a multi-channel array to a dedicated array\nCV_EXPORTS void split(const Mat& src, Mat* mvbegin);\nCV_EXPORTS void split(const Mat& m, vector<Mat>& mv );\n\n//! copies each plane of a multi-channel array to a dedicated array\nCV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv);\n\n//! copies selected channels from the input arrays to the selected channels of the output arrays\nCV_EXPORTS void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts,\n                            const int* fromTo, size_t npairs);\nCV_EXPORTS void mixChannels(const vector<Mat>& src, vector<Mat>& dst,\n                            const int* fromTo, size_t npairs);\nCV_EXPORTS_W void mixChannels(InputArrayOfArrays src, InputArrayOfArrays dst,\n                              const vector<int>& fromTo);\n\n//! extracts a single channel from src (coi is 0-based index)\nCV_EXPORTS_W void extractChannel(InputArray src, OutputArray dst, int coi);\n\n//! inserts a single channel to dst (coi is 0-based index)\nCV_EXPORTS_W void insertChannel(InputArray src, InputOutputArray dst, int coi);\n\n//! reverses the order of the rows, columns or both in a matrix\nCV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);\n\n//! replicates the input matrix the specified number of times in the horizontal and/or vertical direction\nCV_EXPORTS_W void repeat(InputArray src, int ny, int nx, OutputArray dst);\nCV_EXPORTS Mat repeat(const Mat& src, int ny, int nx);\n\nCV_EXPORTS void hconcat(const Mat* src, size_t nsrc, OutputArray dst);\nCV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst);\nCV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst);\n\nCV_EXPORTS void vconcat(const Mat* src, size_t nsrc, OutputArray dst);\nCV_EXPORTS void vconcat(InputArray src1, InputArray src2, OutputArray dst);\nCV_EXPORTS_W void vconcat(InputArrayOfArrays src, OutputArray dst);\n\n//! computes bitwise conjunction of the two arrays (dst = src1 & src2)\nCV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,\n                              OutputArray dst, InputArray mask=noArray());\n//! computes bitwise disjunction of the two arrays (dst = src1 | src2)\nCV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2,\n                             OutputArray dst, InputArray mask=noArray());\n//! computes bitwise exclusive-or of the two arrays (dst = src1 ^ src2)\nCV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2,\n                              OutputArray dst, InputArray mask=noArray());\n//! inverts each bit of array (dst = ~src)\nCV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst,\n                              InputArray mask=noArray());\n//! computes element-wise absolute difference of two arrays (dst = abs(src1 - src2))\nCV_EXPORTS_W void absdiff(InputArray src1, InputArray src2, OutputArray dst);\n//! set mask elements for those array elements which are within the element-specific bounding box (dst = lowerb <= src && src < upperb)\nCV_EXPORTS_W void inRange(InputArray src, InputArray lowerb,\n                          InputArray upperb, OutputArray dst);\n//! compares elements of two arrays (dst = src1 <cmpop> src2)\nCV_EXPORTS_W void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop);\n//! computes per-element minimum of two arrays (dst = min(src1, src2))\nCV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst);\n//! computes per-element maximum of two arrays (dst = max(src1, src2))\nCV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst);\n\n//! computes per-element minimum of two arrays (dst = min(src1, src2))\nCV_EXPORTS void min(const Mat& src1, const Mat& src2, Mat& dst);\n//! computes per-element minimum of array and scalar (dst = min(src1, src2))\nCV_EXPORTS void min(const Mat& src1, double src2, Mat& dst);\n//! computes per-element maximum of two arrays (dst = max(src1, src2))\nCV_EXPORTS void max(const Mat& src1, const Mat& src2, Mat& dst);\n//! computes per-element maximum of array and scalar (dst = max(src1, src2))\nCV_EXPORTS void max(const Mat& src1, double src2, Mat& dst);\n\n//! computes square root of each matrix element (dst = src**0.5)\nCV_EXPORTS_W void sqrt(InputArray src, OutputArray dst);\n//! raises the input matrix elements to the specified power (b = a**power)\nCV_EXPORTS_W void pow(InputArray src, double power, OutputArray dst);\n//! computes exponent of each matrix element (dst = e**src)\nCV_EXPORTS_W void exp(InputArray src, OutputArray dst);\n//! computes natural logarithm of absolute value of each matrix element: dst = log(abs(src))\nCV_EXPORTS_W void log(InputArray src, OutputArray dst);\n//! computes cube root of the argument\nCV_EXPORTS_W float cubeRoot(float val);\n//! computes the angle in degrees (0..360) of the vector (x,y)\nCV_EXPORTS_W float fastAtan2(float y, float x);\n\nCV_EXPORTS void exp(const float* src, float* dst, int n);\nCV_EXPORTS void log(const float* src, float* dst, int n);\nCV_EXPORTS void fastAtan2(const float* y, const float* x, float* dst, int n, bool angleInDegrees);\nCV_EXPORTS void magnitude(const float* x, const float* y, float* dst, int n);\n\n//! converts polar coordinates to Cartesian\nCV_EXPORTS_W void polarToCart(InputArray magnitude, InputArray angle,\n                              OutputArray x, OutputArray y, bool angleInDegrees=false);\n//! converts Cartesian coordinates to polar\nCV_EXPORTS_W void cartToPolar(InputArray x, InputArray y,\n                              OutputArray magnitude, OutputArray angle,\n                              bool angleInDegrees=false);\n//! computes angle (angle(i)) of each (x(i), y(i)) vector\nCV_EXPORTS_W void phase(InputArray x, InputArray y, OutputArray angle,\n                        bool angleInDegrees=false);\n//! computes magnitude (magnitude(i)) of each (x(i), y(i)) vector\nCV_EXPORTS_W void magnitude(InputArray x, InputArray y, OutputArray magnitude);\n//! checks that each matrix element is within the specified range.\nCV_EXPORTS_W bool checkRange(InputArray a, bool quiet=true, CV_OUT Point* pos=0,\n                            double minVal=-DBL_MAX, double maxVal=DBL_MAX);\n//! converts NaN's to the given number\nCV_EXPORTS_W void patchNaNs(InputOutputArray a, double val=0);\n\n//! implements generalized matrix product algorithm GEMM from BLAS\nCV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha,\n                       InputArray src3, double gamma, OutputArray dst, int flags=0);\n//! multiplies matrix by its transposition from the left or from the right\nCV_EXPORTS_W void mulTransposed( InputArray src, OutputArray dst, bool aTa,\n                                 InputArray delta=noArray(),\n                                 double scale=1, int dtype=-1 );\n//! transposes the matrix\nCV_EXPORTS_W void transpose(InputArray src, OutputArray dst);\n//! performs affine transformation of each element of multi-channel input matrix\nCV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m );\n//! performs perspective transformation of each element of multi-channel input matrix\nCV_EXPORTS_W void perspectiveTransform(InputArray src, OutputArray dst, InputArray m );\n\n//! extends the symmetrical matrix from the lower half or from the upper half\nCV_EXPORTS_W void completeSymm(InputOutputArray mtx, bool lowerToUpper=false);\n//! initializes scaled identity matrix\nCV_EXPORTS_W void setIdentity(InputOutputArray mtx, const Scalar& s=Scalar(1));\n//! computes determinant of a square matrix\nCV_EXPORTS_W double determinant(InputArray mtx);\n//! computes trace of a matrix\nCV_EXPORTS_W Scalar trace(InputArray mtx);\n//! computes inverse or pseudo-inverse matrix\nCV_EXPORTS_W double invert(InputArray src, OutputArray dst, int flags=DECOMP_LU);\n//! solves linear system or a least-square problem\nCV_EXPORTS_W bool solve(InputArray src1, InputArray src2,\n                        OutputArray dst, int flags=DECOMP_LU);\n\nenum\n{\n    SORT_EVERY_ROW=0,\n    SORT_EVERY_COLUMN=1,\n    SORT_ASCENDING=0,\n    SORT_DESCENDING=16\n};\n\n//! sorts independently each matrix row or each matrix column\nCV_EXPORTS_W void sort(InputArray src, OutputArray dst, int flags);\n//! sorts independently each matrix row or each matrix column\nCV_EXPORTS_W void sortIdx(InputArray src, OutputArray dst, int flags);\n//! finds real roots of a cubic polynomial\nCV_EXPORTS_W int solveCubic(InputArray coeffs, OutputArray roots);\n//! finds real and complex roots of a polynomial\nCV_EXPORTS_W double solvePoly(InputArray coeffs, OutputArray roots, int maxIters=300);\n//! finds eigenvalues of a symmetric matrix\nCV_EXPORTS bool eigen(InputArray src, OutputArray eigenvalues, int lowindex=-1,\n                      int highindex=-1);\n//! finds eigenvalues and eigenvectors of a symmetric matrix\nCV_EXPORTS bool eigen(InputArray src, OutputArray eigenvalues,\n                      OutputArray eigenvectors,\n                      int lowindex=-1, int highindex=-1);\nCV_EXPORTS_W bool eigen(InputArray src, bool computeEigenvectors,\n                        OutputArray eigenvalues, OutputArray eigenvectors);\n\nenum\n{\n    COVAR_SCRAMBLED=0,\n    COVAR_NORMAL=1,\n    COVAR_USE_AVG=2,\n    COVAR_SCALE=4,\n    COVAR_ROWS=8,\n    COVAR_COLS=16\n};\n\n//! computes covariation matrix of a set of samples\nCV_EXPORTS void calcCovarMatrix( const Mat* samples, int nsamples, Mat& covar, Mat& mean,\n                                 int flags, int ctype=CV_64F);\n//! computes covariation matrix of a set of samples\nCV_EXPORTS_W void calcCovarMatrix( InputArray samples, OutputArray covar,\n                                   OutputArray mean, int flags, int ctype=CV_64F);\n\n/*!\n    Principal Component Analysis\n\n    The class PCA is used to compute the special basis for a set of vectors.\n    The basis will consist of eigenvectors of the covariance matrix computed\n    from the input set of vectors. After PCA is performed, vectors can be transformed from\n    the original high-dimensional space to the subspace formed by a few most\n    prominent eigenvectors (called the principal components),\n    corresponding to the largest eigenvalues of the covariation matrix.\n    Thus the dimensionality of the vector and the correlation between the coordinates is reduced.\n\n    The following sample is the function that takes two matrices. The first one stores the set\n    of vectors (a row per vector) that is used to compute PCA, the second one stores another\n    \"test\" set of vectors (a row per vector) that are first compressed with PCA,\n    then reconstructed back and then the reconstruction error norm is computed and printed for each vector.\n\n    \\code\n    using namespace cv;\n\n    PCA compressPCA(const Mat& pcaset, int maxComponents,\n                    const Mat& testset, Mat& compressed)\n    {\n        PCA pca(pcaset, // pass the data\n                Mat(), // we do not have a pre-computed mean vector,\n                       // so let the PCA engine to compute it\n                CV_PCA_DATA_AS_ROW, // indicate that the vectors\n                                    // are stored as matrix rows\n                                    // (use CV_PCA_DATA_AS_COL if the vectors are\n                                    // the matrix columns)\n                maxComponents // specify, how many principal components to retain\n                );\n        // if there is no test data, just return the computed basis, ready-to-use\n        if( !testset.data )\n            return pca;\n        CV_Assert( testset.cols == pcaset.cols );\n\n        compressed.create(testset.rows, maxComponents, testset.type());\n\n        Mat reconstructed;\n        for( int i = 0; i < testset.rows; i++ )\n        {\n            Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed;\n            // compress the vector, the result will be stored\n            // in the i-th row of the output matrix\n            pca.project(vec, coeffs);\n            // and then reconstruct it\n            pca.backProject(coeffs, reconstructed);\n            // and measure the error\n            printf(\"%d. diff = %g\\n\", i, norm(vec, reconstructed, NORM_L2));\n        }\n        return pca;\n    }\n    \\endcode\n*/\nclass CV_EXPORTS PCA\n{\npublic:\n    //! default constructor\n    PCA();\n    //! the constructor that performs PCA\n    PCA(InputArray data, InputArray mean, int flags, int maxComponents=0);\n    PCA(InputArray data, InputArray mean, int flags, double retainedVariance);\n    //! operator that performs PCA. The previously stored data, if any, is released\n    PCA& operator()(InputArray data, InputArray mean, int flags, int maxComponents=0);\n    PCA& computeVar(InputArray data, InputArray mean, int flags, double retainedVariance);\n    //! projects vector from the original space to the principal components subspace\n    Mat project(InputArray vec) const;\n    //! projects vector from the original space to the principal components subspace\n    void project(InputArray vec, OutputArray result) const;\n    //! reconstructs the original vector from the projection\n    Mat backProject(InputArray vec) const;\n    //! reconstructs the original vector from the projection\n    void backProject(InputArray vec, OutputArray result) const;\n\n    Mat eigenvectors; //!< eigenvectors of the covariation matrix\n    Mat eigenvalues; //!< eigenvalues of the covariation matrix\n    Mat mean; //!< mean value subtracted before the projection and added after the back projection\n};\n\nCV_EXPORTS_W void PCACompute(InputArray data, CV_OUT InputOutputArray mean,\n                             OutputArray eigenvectors, int maxComponents=0);\n\nCV_EXPORTS_W void PCAComputeVar(InputArray data, CV_OUT InputOutputArray mean,\n                             OutputArray eigenvectors, double retainedVariance);\n\nCV_EXPORTS_W void PCAProject(InputArray data, InputArray mean,\n                             InputArray eigenvectors, OutputArray result);\n\nCV_EXPORTS_W void PCABackProject(InputArray data, InputArray mean,\n                                 InputArray eigenvectors, OutputArray result);\n\n\n/*!\n    Singular Value Decomposition class\n\n    The class is used to compute Singular Value Decomposition of a floating-point matrix and then\n    use it to solve least-square problems, under-determined linear systems, invert matrices,\n    compute condition numbers etc.\n\n    For a bit faster operation you can pass flags=SVD::MODIFY_A|... to modify the decomposed matrix\n    when it is not necessarily to preserve it. If you want to compute condition number of a matrix\n    or absolute value of its determinant - you do not need SVD::u or SVD::vt,\n    so you can pass flags=SVD::NO_UV|... . Another flag SVD::FULL_UV indicates that the full-size SVD::u and SVD::vt\n    must be computed, which is not necessary most of the time.\n*/\nclass CV_EXPORTS SVD\n{\npublic:\n    enum { MODIFY_A=1, NO_UV=2, FULL_UV=4 };\n    //! the default constructor\n    SVD();\n    //! the constructor that performs SVD\n    SVD( InputArray src, int flags=0 );\n    //! the operator that performs SVD. The previously allocated SVD::u, SVD::w are SVD::vt are released.\n    SVD& operator ()( InputArray src, int flags=0 );\n\n    //! decomposes matrix and stores the results to user-provided matrices\n    static void compute( InputArray src, OutputArray w,\n                         OutputArray u, OutputArray vt, int flags=0 );\n    //! computes singular values of a matrix\n    static void compute( InputArray src, OutputArray w, int flags=0 );\n    //! performs back substitution\n    static void backSubst( InputArray w, InputArray u,\n                           InputArray vt, InputArray rhs,\n                           OutputArray dst );\n\n    template<typename _Tp, int m, int n, int nm> static void compute( const Matx<_Tp, m, n>& a,\n        Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt );\n    template<typename _Tp, int m, int n, int nm> static void compute( const Matx<_Tp, m, n>& a,\n        Matx<_Tp, nm, 1>& w );\n    template<typename _Tp, int m, int n, int nm, int nb> static void backSubst( const Matx<_Tp, nm, 1>& w,\n        const Matx<_Tp, m, nm>& u, const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs, Matx<_Tp, n, nb>& dst );\n\n    //! finds dst = arg min_{|dst|=1} |m*dst|\n    static void solveZ( InputArray src, OutputArray dst );\n    //! performs back substitution, so that dst is the solution or pseudo-solution of m*dst = rhs, where m is the decomposed matrix\n    void backSubst( InputArray rhs, OutputArray dst ) const;\n\n    Mat u, w, vt;\n};\n\n//! computes SVD of src\nCV_EXPORTS_W void SVDecomp( InputArray src, CV_OUT OutputArray w,\n    CV_OUT OutputArray u, CV_OUT OutputArray vt, int flags=0 );\n\n//! performs back substitution for the previously computed SVD\nCV_EXPORTS_W void SVBackSubst( InputArray w, InputArray u, InputArray vt,\n                               InputArray rhs, CV_OUT OutputArray dst );\n\n//! computes Mahalanobis distance between two vectors: sqrt((v1-v2)'*icovar*(v1-v2)), where icovar is the inverse covariation matrix\nCV_EXPORTS_W double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar);\n//! a synonym for Mahalanobis\nCV_EXPORTS double Mahalonobis(InputArray v1, InputArray v2, InputArray icovar);\n\n//! performs forward or inverse 1D or 2D Discrete Fourier Transformation\nCV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0);\n//! performs inverse 1D or 2D Discrete Fourier Transformation\nCV_EXPORTS_W void idft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0);\n//! performs forward or inverse 1D or 2D Discrete Cosine Transformation\nCV_EXPORTS_W void dct(InputArray src, OutputArray dst, int flags=0);\n//! performs inverse 1D or 2D Discrete Cosine Transformation\nCV_EXPORTS_W void idct(InputArray src, OutputArray dst, int flags=0);\n//! computes element-wise product of the two Fourier spectrums. The second spectrum can optionally be conjugated before the multiplication\nCV_EXPORTS_W void mulSpectrums(InputArray a, InputArray b, OutputArray c,\n                               int flags, bool conjB=false);\n//! computes the minimal vector size vecsize1 >= vecsize so that the dft() of the vector of length vecsize1 can be computed efficiently\nCV_EXPORTS_W int getOptimalDFTSize(int vecsize);\n\n/*!\n Various k-Means flags\n*/\nenum\n{\n    KMEANS_RANDOM_CENTERS=0, // Chooses random centers for k-Means initialization\n    KMEANS_PP_CENTERS=2,     // Uses k-Means++ algorithm for initialization\n    KMEANS_USE_INITIAL_LABELS=1 // Uses the user-provided labels for K-Means initialization\n};\n//! clusters the input data using k-Means algorithm\nCV_EXPORTS_W double kmeans( InputArray data, int K, CV_OUT InputOutputArray bestLabels,\n                            TermCriteria criteria, int attempts,\n                            int flags, OutputArray centers=noArray() );\n\n//! returns the thread-local Random number generator\nCV_EXPORTS RNG& theRNG();\n\n//! returns the next unifomly-distributed random number of the specified type\ntemplate<typename _Tp> static inline _Tp randu() { return (_Tp)theRNG(); }\n\n//! fills array with uniformly-distributed random numbers from the range [low, high)\nCV_EXPORTS_W void randu(InputOutputArray dst, InputArray low, InputArray high);\n\n//! fills array with normally-distributed random numbers with the specified mean and the standard deviation\nCV_EXPORTS_W void randn(InputOutputArray dst, InputArray mean, InputArray stddev);\n\n//! shuffles the input array elements\nCV_EXPORTS void randShuffle(InputOutputArray dst, double iterFactor=1., RNG* rng=0);\nCV_EXPORTS_AS(randShuffle) void randShuffle_(InputOutputArray dst, double iterFactor=1.);\n\n//! draws the line segment (pt1, pt2) in the image\nCV_EXPORTS_W void line(CV_IN_OUT Mat& img, Point pt1, Point pt2, const Scalar& color,\n                     int thickness=1, int lineType=8, int shift=0);\n\n//! draws the rectangle outline or a solid rectangle with the opposite corners pt1 and pt2 in the image\nCV_EXPORTS_W void rectangle(CV_IN_OUT Mat& img, Point pt1, Point pt2,\n                          const Scalar& color, int thickness=1,\n                          int lineType=8, int shift=0);\n\n//! draws the rectangle outline or a solid rectangle covering rec in the image\nCV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec,\n                          const Scalar& color, int thickness=1,\n                          int lineType=8, int shift=0);\n\n//! draws the circle outline or a solid circle in the image\nCV_EXPORTS_W void circle(CV_IN_OUT Mat& img, Point center, int radius,\n                       const Scalar& color, int thickness=1,\n                       int lineType=8, int shift=0);\n\n//! draws an elliptic arc, ellipse sector or a rotated ellipse in the image\nCV_EXPORTS_W void ellipse(CV_IN_OUT Mat& img, Point center, Size axes,\n                        double angle, double startAngle, double endAngle,\n                        const Scalar& color, int thickness=1,\n                        int lineType=8, int shift=0);\n\n//! draws a rotated ellipse in the image\nCV_EXPORTS_W void ellipse(CV_IN_OUT Mat& img, const RotatedRect& box, const Scalar& color,\n                        int thickness=1, int lineType=8);\n\n//! draws a filled convex polygon in the image\nCV_EXPORTS void fillConvexPoly(Mat& img, const Point* pts, int npts,\n                               const Scalar& color, int lineType=8,\n                               int shift=0);\nCV_EXPORTS_W void fillConvexPoly(InputOutputArray img, InputArray points,\n                                 const Scalar& color, int lineType=8,\n                                 int shift=0);\n\n//! fills an area bounded by one or more polygons\nCV_EXPORTS void fillPoly(Mat& img, const Point** pts,\n                         const int* npts, int ncontours,\n                         const Scalar& color, int lineType=8, int shift=0,\n                         Point offset=Point() );\n\nCV_EXPORTS_W void fillPoly(InputOutputArray img, InputArrayOfArrays pts,\n                           const Scalar& color, int lineType=8, int shift=0,\n                           Point offset=Point() );\n\n//! draws one or more polygonal curves\nCV_EXPORTS void polylines(Mat& img, const Point** pts, const int* npts,\n                          int ncontours, bool isClosed, const Scalar& color,\n                          int thickness=1, int lineType=8, int shift=0 );\n\nCV_EXPORTS_W void polylines(InputOutputArray img, InputArrayOfArrays pts,\n                            bool isClosed, const Scalar& color,\n                            int thickness=1, int lineType=8, int shift=0 );\n\n//! clips the line segment by the rectangle Rect(0, 0, imgSize.width, imgSize.height)\nCV_EXPORTS bool clipLine(Size imgSize, CV_IN_OUT Point& pt1, CV_IN_OUT Point& pt2);\n\n//! clips the line segment by the rectangle imgRect\nCV_EXPORTS_W bool clipLine(Rect imgRect, CV_OUT CV_IN_OUT Point& pt1, CV_OUT CV_IN_OUT Point& pt2);\n\n/*!\n   Line iterator class\n\n   The class is used to iterate over all the pixels on the raster line\n   segment connecting two specified points.\n*/\nclass CV_EXPORTS LineIterator\n{\npublic:\n    //! intializes the iterator\n    LineIterator( const Mat& img, Point pt1, Point pt2,\n                  int connectivity=8, bool leftToRight=false );\n    //! returns pointer to the current pixel\n    uchar* operator *();\n    //! prefix increment operator (++it). shifts iterator to the next pixel\n    LineIterator& operator ++();\n    //! postfix increment operator (it++). shifts iterator to the next pixel\n    LineIterator operator ++(int);\n    //! returns coordinates of the current pixel\n    Point pos() const;\n\n    uchar* ptr;\n    const uchar* ptr0;\n    int step, elemSize;\n    int err, count;\n    int minusDelta, plusDelta;\n    int minusStep, plusStep;\n};\n\n//! converts elliptic arc to a polygonal curve\nCV_EXPORTS_W void ellipse2Poly( Point center, Size axes, int angle,\n                                int arcStart, int arcEnd, int delta,\n                                CV_OUT vector<Point>& pts );\n\nenum\n{\n    FONT_HERSHEY_SIMPLEX = 0,\n    FONT_HERSHEY_PLAIN = 1,\n    FONT_HERSHEY_DUPLEX = 2,\n    FONT_HERSHEY_COMPLEX = 3,\n    FONT_HERSHEY_TRIPLEX = 4,\n    FONT_HERSHEY_COMPLEX_SMALL = 5,\n    FONT_HERSHEY_SCRIPT_SIMPLEX = 6,\n    FONT_HERSHEY_SCRIPT_COMPLEX = 7,\n    FONT_ITALIC = 16\n};\n\n//! renders text string in the image\nCV_EXPORTS_W void putText( Mat& img, const string& text, Point org,\n                         int fontFace, double fontScale, Scalar color,\n                         int thickness=1, int lineType=8,\n                         bool bottomLeftOrigin=false );\n\n//! returns bounding box of the text string\nCV_EXPORTS_W Size getTextSize(const string& text, int fontFace,\n                            double fontScale, int thickness,\n                            CV_OUT int* baseLine);\n\n///////////////////////////////// Mat_<_Tp> ////////////////////////////////////\n\n/*!\n Template matrix class derived from Mat\n\n The class Mat_ is a \"thin\" template wrapper on top of cv::Mat. It does not have any extra data fields,\n nor it or cv::Mat have any virtual methods and thus references or pointers to these two classes\n can be safely converted one to another. But do it with care, for example:\n\n \\code\n // create 100x100 8-bit matrix\n Mat M(100,100,CV_8U);\n // this will compile fine. no any data conversion will be done.\n Mat_<float>& M1 = (Mat_<float>&)M;\n // the program will likely crash at the statement below\n M1(99,99) = 1.f;\n \\endcode\n\n While cv::Mat is sufficient in most cases, cv::Mat_ can be more convenient if you use a lot of element\n access operations and if you know matrix type at compile time.\n Note that cv::Mat::at<_Tp>(int y, int x) and cv::Mat_<_Tp>::operator ()(int y, int x) do absolutely the\n same thing and run at the same speed, but the latter is certainly shorter:\n\n \\code\n Mat_<double> M(20,20);\n for(int i = 0; i < M.rows; i++)\n    for(int j = 0; j < M.cols; j++)\n       M(i,j) = 1./(i+j+1);\n Mat E, V;\n eigen(M,E,V);\n cout << E.at<double>(0,0)/E.at<double>(M.rows-1,0);\n \\endcode\n\n It is easy to use Mat_ for multi-channel images/matrices - just pass cv::Vec as cv::Mat_ template parameter:\n\n \\code\n // allocate 320x240 color image and fill it with green (in RGB space)\n Mat_<Vec3b> img(240, 320, Vec3b(0,255,0));\n // now draw a diagonal white line\n for(int i = 0; i < 100; i++)\n     img(i,i)=Vec3b(255,255,255);\n // and now modify the 2nd (red) channel of each pixel\n for(int i = 0; i < img.rows; i++)\n    for(int j = 0; j < img.cols; j++)\n       img(i,j)[2] ^= (uchar)(i ^ j); // img(y,x)[c] accesses c-th channel of the pixel (x,y)\n \\endcode\n*/\ntemplate<typename _Tp> class Mat_ : public Mat\n{\npublic:\n    typedef _Tp value_type;\n    typedef typename DataType<_Tp>::channel_type channel_type;\n    typedef MatIterator_<_Tp> iterator;\n    typedef MatConstIterator_<_Tp> const_iterator;\n\n    //! default constructor\n    Mat_();\n    //! equivalent to Mat(_rows, _cols, DataType<_Tp>::type)\n    Mat_(int _rows, int _cols);\n    //! constructor that sets each matrix element to specified value\n    Mat_(int _rows, int _cols, const _Tp& value);\n    //! equivalent to Mat(_size, DataType<_Tp>::type)\n    explicit Mat_(Size _size);\n    //! constructor that sets each matrix element to specified value\n    Mat_(Size _size, const _Tp& value);\n    //! n-dim array constructor\n    Mat_(int _ndims, const int* _sizes);\n    //! n-dim array constructor that sets each matrix element to specified value\n    Mat_(int _ndims, const int* _sizes, const _Tp& value);\n    //! copy/conversion contructor. If m is of different type, it's converted\n    Mat_(const Mat& m);\n    //! copy constructor\n    Mat_(const Mat_& m);\n    //! constructs a matrix on top of user-allocated data. step is in bytes(!!!), regardless of the type\n    Mat_(int _rows, int _cols, _Tp* _data, size_t _step=AUTO_STEP);\n    //! constructs n-dim matrix on top of user-allocated data. steps are in bytes(!!!), regardless of the type\n    Mat_(int _ndims, const int* _sizes, _Tp* _data, const size_t* _steps=0);\n    //! selects a submatrix\n    Mat_(const Mat_& m, const Range& rowRange, const Range& colRange=Range::all());\n    //! selects a submatrix\n    Mat_(const Mat_& m, const Rect& roi);\n    //! selects a submatrix, n-dim version\n    Mat_(const Mat_& m, const Range* ranges);\n    //! from a matrix expression\n    explicit Mat_(const MatExpr& e);\n    //! makes a matrix out of Vec, std::vector, Point_ or Point3_. The matrix will have a single column\n    explicit Mat_(const vector<_Tp>& vec, bool copyData=false);\n    template<int n> explicit Mat_(const Vec<typename DataType<_Tp>::channel_type, n>& vec, bool copyData=true);\n    template<int m, int n> explicit Mat_(const Matx<typename DataType<_Tp>::channel_type, m, n>& mtx, bool copyData=true);\n    explicit Mat_(const Point_<typename DataType<_Tp>::channel_type>& pt, bool copyData=true);\n    explicit Mat_(const Point3_<typename DataType<_Tp>::channel_type>& pt, bool copyData=true);\n    explicit Mat_(const MatCommaInitializer_<_Tp>& commaInitializer);\n\n    Mat_& operator = (const Mat& m);\n    Mat_& operator = (const Mat_& m);\n    //! set all the elements to s.\n    Mat_& operator = (const _Tp& s);\n    //! assign a matrix expression\n    Mat_& operator = (const MatExpr& e);\n\n    //! iterators; they are smart enough to skip gaps in the end of rows\n    iterator begin();\n    iterator end();\n    const_iterator begin() const;\n    const_iterator end() const;\n\n    //! equivalent to Mat::create(_rows, _cols, DataType<_Tp>::type)\n    void create(int _rows, int _cols);\n    //! equivalent to Mat::create(_size, DataType<_Tp>::type)\n    void create(Size _size);\n    //! equivalent to Mat::create(_ndims, _sizes, DatType<_Tp>::type)\n    void create(int _ndims, const int* _sizes);\n    //! cross-product\n    Mat_ cross(const Mat_& m) const;\n    //! data type conversion\n    template<typename T2> operator Mat_<T2>() const;\n    //! overridden forms of Mat::row() etc.\n    Mat_ row(int y) const;\n    Mat_ col(int x) const;\n    Mat_ diag(int d=0) const;\n    Mat_ clone() const;\n\n    //! overridden forms of Mat::elemSize() etc.\n    size_t elemSize() const;\n    size_t elemSize1() const;\n    int type() const;\n    int depth() const;\n    int channels() const;\n    size_t step1(int i=0) const;\n    //! returns step()/sizeof(_Tp)\n    size_t stepT(int i=0) const;\n\n    //! overridden forms of Mat::zeros() etc. Data type is omitted, of course\n    static MatExpr zeros(int rows, int cols);\n    static MatExpr zeros(Size size);\n    static MatExpr zeros(int _ndims, const int* _sizes);\n    static MatExpr ones(int rows, int cols);\n    static MatExpr ones(Size size);\n    static MatExpr ones(int _ndims, const int* _sizes);\n    static MatExpr eye(int rows, int cols);\n    static MatExpr eye(Size size);\n\n    //! some more overriden methods\n    Mat_& adjustROI( int dtop, int dbottom, int dleft, int dright );\n    Mat_ operator()( const Range& rowRange, const Range& colRange ) const;\n    Mat_ operator()( const Rect& roi ) const;\n    Mat_ operator()( const Range* ranges ) const;\n\n    //! more convenient forms of row and element access operators\n    _Tp* operator [](int y);\n    const _Tp* operator [](int y) const;\n\n    //! returns reference to the specified element\n    _Tp& operator ()(const int* idx);\n    //! returns read-only reference to the specified element\n    const _Tp& operator ()(const int* idx) const;\n\n    //! returns reference to the specified element\n    template<int n> _Tp& operator ()(const Vec<int, n>& idx);\n    //! returns read-only reference to the specified element\n    template<int n> const _Tp& operator ()(const Vec<int, n>& idx) const;\n\n    //! returns reference to the specified element (1D case)\n    _Tp& operator ()(int idx0);\n    //! returns read-only reference to the specified element (1D case)\n    const _Tp& operator ()(int idx0) const;\n    //! returns reference to the specified element (2D case)\n    _Tp& operator ()(int idx0, int idx1);\n    //! returns read-only reference to the specified element (2D case)\n    const _Tp& operator ()(int idx0, int idx1) const;\n    //! returns reference to the specified element (3D case)\n    _Tp& operator ()(int idx0, int idx1, int idx2);\n    //! returns read-only reference to the specified element (3D case)\n    const _Tp& operator ()(int idx0, int idx1, int idx2) const;\n\n    _Tp& operator ()(Point pt);\n    const _Tp& operator ()(Point pt) const;\n\n    //! conversion to vector.\n    operator vector<_Tp>() const;\n    //! conversion to Vec\n    template<int n> operator Vec<typename DataType<_Tp>::channel_type, n>() const;\n    //! conversion to Matx\n    template<int m, int n> operator Matx<typename DataType<_Tp>::channel_type, m, n>() const;\n};\n\ntypedef Mat_<uchar> Mat1b;\ntypedef Mat_<Vec2b> Mat2b;\ntypedef Mat_<Vec3b> Mat3b;\ntypedef Mat_<Vec4b> Mat4b;\n\ntypedef Mat_<short> Mat1s;\ntypedef Mat_<Vec2s> Mat2s;\ntypedef Mat_<Vec3s> Mat3s;\ntypedef Mat_<Vec4s> Mat4s;\n\ntypedef Mat_<ushort> Mat1w;\ntypedef Mat_<Vec2w> Mat2w;\ntypedef Mat_<Vec3w> Mat3w;\ntypedef Mat_<Vec4w> Mat4w;\n\ntypedef Mat_<int>   Mat1i;\ntypedef Mat_<Vec2i> Mat2i;\ntypedef Mat_<Vec3i> Mat3i;\ntypedef Mat_<Vec4i> Mat4i;\n\ntypedef Mat_<float> Mat1f;\ntypedef Mat_<Vec2f> Mat2f;\ntypedef Mat_<Vec3f> Mat3f;\ntypedef Mat_<Vec4f> Mat4f;\n\ntypedef Mat_<double> Mat1d;\ntypedef Mat_<Vec2d> Mat2d;\ntypedef Mat_<Vec3d> Mat3d;\ntypedef Mat_<Vec4d> Mat4d;\n\n//////////// Iterators & Comma initializers //////////////////\n\nclass CV_EXPORTS MatConstIterator\n{\npublic:\n    typedef uchar* value_type;\n    typedef ptrdiff_t difference_type;\n    typedef const uchar** pointer;\n    typedef uchar* reference;\n    typedef std::random_access_iterator_tag iterator_category;\n\n    //! default constructor\n    MatConstIterator();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatConstIterator(const Mat* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, const int* _idx);\n    //! copy constructor\n    MatConstIterator(const MatConstIterator& it);\n\n    //! copy operator\n    MatConstIterator& operator = (const MatConstIterator& it);\n    //! returns the current matrix element\n    uchar* operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    uchar* operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatConstIterator& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatConstIterator& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatConstIterator& operator --();\n    //! decrements the iterator\n    MatConstIterator operator --(int);\n    //! increments the iterator\n    MatConstIterator& operator ++();\n    //! increments the iterator\n    MatConstIterator operator ++(int);\n    //! returns the current iterator position\n    Point pos() const;\n    //! returns the current iterator position\n    void pos(int* _idx) const;\n    ptrdiff_t lpos() const;\n    void seek(ptrdiff_t ofs, bool relative=false);\n    void seek(const int* _idx, bool relative=false);\n\n    const Mat* m;\n    size_t elemSize;\n    uchar* ptr;\n    uchar* sliceStart;\n    uchar* sliceEnd;\n};\n\n/*!\n Matrix read-only iterator\n\n */\ntemplate<typename _Tp>\nclass MatConstIterator_ : public MatConstIterator\n{\npublic:\n    typedef _Tp value_type;\n    typedef ptrdiff_t difference_type;\n    typedef const _Tp* pointer;\n    typedef const _Tp& reference;\n    typedef std::random_access_iterator_tag iterator_category;\n\n    //! default constructor\n    MatConstIterator_();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, const int* _idx);\n    //! copy constructor\n    MatConstIterator_(const MatConstIterator_& it);\n\n    //! copy operator\n    MatConstIterator_& operator = (const MatConstIterator_& it);\n    //! returns the current matrix element\n    _Tp operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    _Tp operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatConstIterator_& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatConstIterator_& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatConstIterator_& operator --();\n    //! decrements the iterator\n    MatConstIterator_ operator --(int);\n    //! increments the iterator\n    MatConstIterator_& operator ++();\n    //! increments the iterator\n    MatConstIterator_ operator ++(int);\n    //! returns the current iterator position\n    Point pos() const;\n};\n\n\n/*!\n Matrix read-write iterator\n\n*/\ntemplate<typename _Tp>\nclass MatIterator_ : public MatConstIterator_<_Tp>\n{\npublic:\n    typedef _Tp* pointer;\n    typedef _Tp& reference;\n    typedef std::random_access_iterator_tag iterator_category;\n\n    //! the default constructor\n    MatIterator_();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatIterator_(Mat_<_Tp>* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(Mat_<_Tp>* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(const Mat_<_Tp>* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(const Mat_<_Tp>* _m, const int* _idx);\n    //! copy constructor\n    MatIterator_(const MatIterator_& it);\n    //! copy operator\n    MatIterator_& operator = (const MatIterator_<_Tp>& it );\n\n    //! returns the current matrix element\n    _Tp& operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    _Tp& operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatIterator_& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatIterator_& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatIterator_& operator --();\n    //! decrements the iterator\n    MatIterator_ operator --(int);\n    //! increments the iterator\n    MatIterator_& operator ++();\n    //! increments the iterator\n    MatIterator_ operator ++(int);\n};\n\ntemplate<typename _Tp> class MatOp_Iter_;\n\n/*!\n Comma-separated Matrix Initializer\n\n The class instances are usually not created explicitly.\n Instead, they are created on \"matrix << firstValue\" operator.\n\n The sample below initializes 2x2 rotation matrix:\n\n \\code\n double angle = 30, a = cos(angle*CV_PI/180), b = sin(angle*CV_PI/180);\n Mat R = (Mat_<double>(2,2) << a, -b, b, a);\n \\endcode\n*/\ntemplate<typename _Tp> class MatCommaInitializer_\n{\npublic:\n    //! the constructor, created by \"matrix << firstValue\" operator, where matrix is cv::Mat\n    MatCommaInitializer_(Mat_<_Tp>* _m);\n    //! the operator that takes the next value and put it to the matrix\n    template<typename T2> MatCommaInitializer_<_Tp>& operator , (T2 v);\n    //! another form of conversion operator\n    Mat_<_Tp> operator *() const;\n    operator Mat_<_Tp>() const;\nprotected:\n    MatIterator_<_Tp> it;\n};\n\n\ntemplate<typename _Tp, int m, int n> class MatxCommaInitializer\n{\npublic:\n    MatxCommaInitializer(Matx<_Tp, m, n>* _mtx);\n    template<typename T2> MatxCommaInitializer<_Tp, m, n>& operator , (T2 val);\n    Matx<_Tp, m, n> operator *() const;\n\n    Matx<_Tp, m, n>* dst;\n    int idx;\n};\n\ntemplate<typename _Tp, int m> class VecCommaInitializer : public MatxCommaInitializer<_Tp, m, 1>\n{\npublic:\n    VecCommaInitializer(Vec<_Tp, m>* _vec);\n    template<typename T2> VecCommaInitializer<_Tp, m>& operator , (T2 val);\n    Vec<_Tp, m> operator *() const;\n};\n\n/*!\n Automatically Allocated Buffer Class\n\n The class is used for temporary buffers in functions and methods.\n If a temporary buffer is usually small (a few K's of memory),\n but its size depends on the parameters, it makes sense to create a small\n fixed-size array on stack and use it if it's large enough. If the required buffer size\n is larger than the fixed size, another buffer of sufficient size is allocated dynamically\n and released after the processing. Therefore, in typical cases, when the buffer size is small,\n there is no overhead associated with malloc()/free().\n At the same time, there is no limit on the size of processed data.\n\n This is what AutoBuffer does. The template takes 2 parameters - type of the buffer elements and\n the number of stack-allocated elements. Here is how the class is used:\n\n \\code\n void my_func(const cv::Mat& m)\n {\n    cv::AutoBuffer<float, 1000> buf; // create automatic buffer containing 1000 floats\n\n    buf.allocate(m.rows); // if m.rows <= 1000, the pre-allocated buffer is used,\n                          // otherwise the buffer of \"m.rows\" floats will be allocated\n                          // dynamically and deallocated in cv::AutoBuffer destructor\n    ...\n }\n \\endcode\n*/\ntemplate<typename _Tp, size_t fixed_size=4096/sizeof(_Tp)+8> class AutoBuffer\n{\npublic:\n    typedef _Tp value_type;\n    enum { buffer_padding = (int)((16 + sizeof(_Tp) - 1)/sizeof(_Tp)) };\n\n    //! the default contructor\n    AutoBuffer();\n    //! constructor taking the real buffer size\n    AutoBuffer(size_t _size);\n    //! destructor. calls deallocate()\n    ~AutoBuffer();\n\n    //! allocates the new buffer of size _size. if the _size is small enough, stack-allocated buffer is used\n    void allocate(size_t _size);\n    //! deallocates the buffer if it was dynamically allocated\n    void deallocate();\n    //! returns pointer to the real buffer, stack-allocated or head-allocated\n    operator _Tp* ();\n    //! returns read-only pointer to the real buffer, stack-allocated or head-allocated\n    operator const _Tp* () const;\n\nprotected:\n    //! pointer to the real buffer, can point to buf if the buffer is small enough\n    _Tp* ptr;\n    //! size of the real buffer\n    size_t size;\n    //! pre-allocated buffer\n    _Tp buf[fixed_size+buffer_padding];\n};\n\n/////////////////////////// multi-dimensional dense matrix //////////////////////////\n\n/*!\n n-Dimensional Dense Matrix Iterator Class.\n\n The class cv::NAryMatIterator is used for iterating over one or more n-dimensional dense arrays (cv::Mat's).\n\n The iterator is completely different from cv::Mat_ and cv::SparseMat_ iterators.\n It iterates through the slices (or planes), not the elements, where \"slice\" is a continuous part of the arrays.\n\n Here is the example on how the iterator can be used to normalize 3D histogram:\n\n \\code\n void normalizeColorHist(Mat& hist)\n {\n #if 1\n     // intialize iterator (the style is different from STL).\n     // after initialization the iterator will contain\n     // the number of slices or planes\n     // the iterator will go through\n     Mat* arrays[] = { &hist, 0 };\n     Mat planes[1];\n     NAryMatIterator it(arrays, planes);\n     double s = 0;\n     // iterate through the matrix. on each iteration\n     // it.planes[i] (of type Mat) will be set to the current plane of\n     // i-th n-dim matrix passed to the iterator constructor.\n     for(int p = 0; p < it.nplanes; p++, ++it)\n        s += sum(it.planes[0])[0];\n     it = NAryMatIterator(hist);\n     s = 1./s;\n     for(int p = 0; p < it.nplanes; p++, ++it)\n        it.planes[0] *= s;\n #elif 1\n     // this is a shorter implementation of the above\n     // using built-in operations on Mat\n     double s = sum(hist)[0];\n     hist.convertTo(hist, hist.type(), 1./s, 0);\n #else\n     // and this is even shorter one\n     // (assuming that the histogram elements are non-negative)\n     normalize(hist, hist, 1, 0, NORM_L1);\n #endif\n }\n \\endcode\n\n You can iterate through several matrices simultaneously as long as they have the same geometry\n (dimensionality and all the dimension sizes are the same), which is useful for binary\n and n-ary operations on such matrices. Just pass those matrices to cv::MatNDIterator.\n Then, during the iteration it.planes[0], it.planes[1], ... will\n be the slices of the corresponding matrices\n*/\nclass CV_EXPORTS NAryMatIterator\n{\npublic:\n    //! the default constructor\n    NAryMatIterator();\n    //! the full constructor taking arbitrary number of n-dim matrices\n    NAryMatIterator(const Mat** arrays, uchar** ptrs, int narrays=-1);\n    //! the full constructor taking arbitrary number of n-dim matrices\n    NAryMatIterator(const Mat** arrays, Mat* planes, int narrays=-1);\n    //! the separate iterator initialization method\n    void init(const Mat** arrays, Mat* planes, uchar** ptrs, int narrays=-1);\n\n    //! proceeds to the next plane of every iterated matrix\n    NAryMatIterator& operator ++();\n    //! proceeds to the next plane of every iterated matrix (postfix increment operator)\n    NAryMatIterator operator ++(int);\n\n    //! the iterated arrays\n    const Mat** arrays;\n    //! the current planes\n    Mat* planes;\n    //! data pointers\n    uchar** ptrs;\n    //! the number of arrays\n    int narrays;\n    //! the number of hyper-planes that the iterator steps through\n    size_t nplanes;\n    //! the size of each segment (in elements)\n    size_t size;\nprotected:\n    int iterdepth;\n    size_t idx;\n};\n\n//typedef NAryMatIterator NAryMatNDIterator;\n\ntypedef void (*ConvertData)(const void* from, void* to, int cn);\ntypedef void (*ConvertScaleData)(const void* from, void* to, int cn, double alpha, double beta);\n\n//! returns the function for converting pixels from one data type to another\nCV_EXPORTS ConvertData getConvertElem(int fromType, int toType);\n//! returns the function for converting pixels from one data type to another with the optional scaling\nCV_EXPORTS ConvertScaleData getConvertScaleElem(int fromType, int toType);\n\n\n/////////////////////////// multi-dimensional sparse matrix //////////////////////////\n\nclass SparseMatIterator;\nclass SparseMatConstIterator;\ntemplate<typename _Tp> class SparseMatIterator_;\ntemplate<typename _Tp> class SparseMatConstIterator_;\n\n/*!\n Sparse matrix class.\n\n The class represents multi-dimensional sparse numerical arrays. Such a sparse array can store elements\n of any type that cv::Mat is able to store. \"Sparse\" means that only non-zero elements\n are stored (though, as a result of some operations on a sparse matrix, some of its stored elements\n can actually become 0. It's user responsibility to detect such elements and delete them using cv::SparseMat::erase().\n The non-zero elements are stored in a hash table that grows when it's filled enough,\n so that the search time remains O(1) in average. Elements can be accessed using the following methods:\n\n <ol>\n <li>Query operations: cv::SparseMat::ptr() and the higher-level cv::SparseMat::ref(),\n      cv::SparseMat::value() and cv::SparseMat::find, for example:\n \\code\n const int dims = 5;\n int size[] = {10, 10, 10, 10, 10};\n SparseMat sparse_mat(dims, size, CV_32F);\n for(int i = 0; i < 1000; i++)\n {\n     int idx[dims];\n     for(int k = 0; k < dims; k++)\n        idx[k] = rand()%sparse_mat.size(k);\n     sparse_mat.ref<float>(idx) += 1.f;\n }\n \\endcode\n\n <li>Sparse matrix iterators. Like cv::Mat iterators and unlike cv::Mat iterators, the sparse matrix iterators are STL-style,\n that is, the iteration is done as following:\n \\code\n // prints elements of a sparse floating-point matrix and the sum of elements.\n SparseMatConstIterator_<float>\n        it = sparse_mat.begin<float>(),\n        it_end = sparse_mat.end<float>();\n double s = 0;\n int dims = sparse_mat.dims();\n for(; it != it_end; ++it)\n {\n     // print element indices and the element value\n     const Node* n = it.node();\n     printf(\"(\")\n     for(int i = 0; i < dims; i++)\n        printf(\"%3d%c\", n->idx[i], i < dims-1 ? ',' : ')');\n     printf(\": %f\\n\", *it);\n     s += *it;\n }\n printf(\"Element sum is %g\\n\", s);\n \\endcode\n If you run this loop, you will notice that elements are enumerated\n in no any logical order (lexicographical etc.),\n they come in the same order as they stored in the hash table, i.e. semi-randomly.\n\n You may collect pointers to the nodes and sort them to get the proper ordering.\n Note, however, that pointers to the nodes may become invalid when you add more\n elements to the matrix; this is because of possible buffer reallocation.\n\n <li>A combination of the above 2 methods when you need to process 2 or more sparse\n matrices simultaneously, e.g. this is how you can compute unnormalized\n cross-correlation of the 2 floating-point sparse matrices:\n \\code\n double crossCorr(const SparseMat& a, const SparseMat& b)\n {\n     const SparseMat *_a = &a, *_b = &b;\n     // if b contains less elements than a,\n     // it's faster to iterate through b\n     if(_a->nzcount() > _b->nzcount())\n        std::swap(_a, _b);\n     SparseMatConstIterator_<float> it = _a->begin<float>(),\n                                    it_end = _a->end<float>();\n     double ccorr = 0;\n     for(; it != it_end; ++it)\n     {\n         // take the next element from the first matrix\n         float avalue = *it;\n         const Node* anode = it.node();\n         // and try to find element with the same index in the second matrix.\n         // since the hash value depends only on the element index,\n         // we reuse hashvalue stored in the node\n         float bvalue = _b->value<float>(anode->idx,&anode->hashval);\n         ccorr += avalue*bvalue;\n     }\n     return ccorr;\n }\n \\endcode\n </ol>\n*/\nclass CV_EXPORTS SparseMat\n{\npublic:\n    typedef SparseMatIterator iterator;\n    typedef SparseMatConstIterator const_iterator;\n\n    //! the sparse matrix header\n    struct CV_EXPORTS Hdr\n    {\n        Hdr(int _dims, const int* _sizes, int _type);\n        void clear();\n        int refcount;\n        int dims;\n        int valueOffset;\n        size_t nodeSize;\n        size_t nodeCount;\n        size_t freeList;\n        vector<uchar> pool;\n        vector<size_t> hashtab;\n        int size[CV_MAX_DIM];\n    };\n\n    //! sparse matrix node - element of a hash table\n    struct CV_EXPORTS Node\n    {\n        //! hash value\n        size_t hashval;\n        //! index of the next node in the same hash table entry\n        size_t next;\n        //! index of the matrix element\n        int idx[CV_MAX_DIM];\n    };\n\n    //! default constructor\n    SparseMat();\n    //! creates matrix of the specified size and type\n    SparseMat(int dims, const int* _sizes, int _type);\n    //! copy constructor\n    SparseMat(const SparseMat& m);\n    //! converts dense 2d matrix to the sparse form\n    /*!\n     \\param m the input matrix\n    */\n    explicit SparseMat(const Mat& m);\n    //! converts old-style sparse matrix to the new-style. All the data is copied\n    SparseMat(const CvSparseMat* m);\n    //! the destructor\n    ~SparseMat();\n\n    //! assignment operator. This is O(1) operation, i.e. no data is copied\n    SparseMat& operator = (const SparseMat& m);\n    //! equivalent to the corresponding constructor\n    SparseMat& operator = (const Mat& m);\n\n    //! creates full copy of the matrix\n    SparseMat clone() const;\n\n    //! copies all the data to the destination matrix. All the previous content of m is erased\n    void copyTo( SparseMat& m ) const;\n    //! converts sparse matrix to dense matrix.\n    void copyTo( Mat& m ) const;\n    //! multiplies all the matrix elements by the specified scale factor alpha and converts the results to the specified data type\n    void convertTo( SparseMat& m, int rtype, double alpha=1 ) const;\n    //! converts sparse matrix to dense n-dim matrix with optional type conversion and scaling.\n    /*!\n      \\param rtype The output matrix data type. When it is =-1, the output array will have the same data type as (*this)\n      \\param alpha The scale factor\n      \\param beta The optional delta added to the scaled values before the conversion\n    */\n    void convertTo( Mat& m, int rtype, double alpha=1, double beta=0 ) const;\n\n    // not used now\n    void assignTo( SparseMat& m, int type=-1 ) const;\n\n    //! reallocates sparse matrix.\n    /*!\n        If the matrix already had the proper size and type,\n        it is simply cleared with clear(), otherwise,\n        the old matrix is released (using release()) and the new one is allocated.\n    */\n    void create(int dims, const int* _sizes, int _type);\n    //! sets all the sparse matrix elements to 0, which means clearing the hash table.\n    void clear();\n    //! manually increments the reference counter to the header.\n    void addref();\n    // decrements the header reference counter. When the counter reaches 0, the header and all the underlying data are deallocated.\n    void release();\n\n    //! converts sparse matrix to the old-style representation; all the elements are copied.\n    operator CvSparseMat*() const;\n    //! returns the size of each element in bytes (not including the overhead - the space occupied by SparseMat::Node elements)\n    size_t elemSize() const;\n    //! returns elemSize()/channels()\n    size_t elemSize1() const;\n\n    //! returns type of sparse matrix elements\n    int type() const;\n    //! returns the depth of sparse matrix elements\n    int depth() const;\n    //! returns the number of channels\n    int channels() const;\n\n    //! returns the array of sizes, or NULL if the matrix is not allocated\n    const int* size() const;\n    //! returns the size of i-th matrix dimension (or 0)\n    int size(int i) const;\n    //! returns the matrix dimensionality\n    int dims() const;\n    //! returns the number of non-zero elements (=the number of hash table nodes)\n    size_t nzcount() const;\n\n    //! computes the element hash value (1D case)\n    size_t hash(int i0) const;\n    //! computes the element hash value (2D case)\n    size_t hash(int i0, int i1) const;\n    //! computes the element hash value (3D case)\n    size_t hash(int i0, int i1, int i2) const;\n    //! computes the element hash value (nD case)\n    size_t hash(const int* idx) const;\n\n    //@{\n    /*!\n     specialized variants for 1D, 2D, 3D cases and the generic_type one for n-D case.\n\n     return pointer to the matrix element.\n     <ul>\n      <li>if the element is there (it's non-zero), the pointer to it is returned\n      <li>if it's not there and createMissing=false, NULL pointer is returned\n      <li>if it's not there and createMissing=true, then the new element\n        is created and initialized with 0. Pointer to it is returned\n      <li>if the optional hashval pointer is not NULL, the element hash value is\n      not computed, but *hashval is taken instead.\n     </ul>\n    */\n    //! returns pointer to the specified element (1D case)\n    uchar* ptr(int i0, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (2D case)\n    uchar* ptr(int i0, int i1, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (3D case)\n    uchar* ptr(int i0, int i1, int i2, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (nD case)\n    uchar* ptr(const int* idx, bool createMissing, size_t* hashval=0);\n    //@}\n\n    //@{\n    /*!\n     return read-write reference to the specified sparse matrix element.\n\n     ref<_Tp>(i0,...[,hashval]) is equivalent to *(_Tp*)ptr(i0,...,true[,hashval]).\n     The methods always return a valid reference.\n     If the element did not exist, it is created and initialiazed with 0.\n    */\n    //! returns reference to the specified element (1D case)\n    template<typename _Tp> _Tp& ref(int i0, size_t* hashval=0);\n    //! returns reference to the specified element (2D case)\n    template<typename _Tp> _Tp& ref(int i0, int i1, size_t* hashval=0);\n    //! returns reference to the specified element (3D case)\n    template<typename _Tp> _Tp& ref(int i0, int i1, int i2, size_t* hashval=0);\n    //! returns reference to the specified element (nD case)\n    template<typename _Tp> _Tp& ref(const int* idx, size_t* hashval=0);\n    //@}\n\n    //@{\n    /*!\n     return value of the specified sparse matrix element.\n\n     value<_Tp>(i0,...[,hashval]) is equivalent\n\n     \\code\n     { const _Tp* p = find<_Tp>(i0,...[,hashval]); return p ? *p : _Tp(); }\n     \\endcode\n\n     That is, if the element did not exist, the methods return 0.\n     */\n    //! returns value of the specified element (1D case)\n    template<typename _Tp> _Tp value(int i0, size_t* hashval=0) const;\n    //! returns value of the specified element (2D case)\n    template<typename _Tp> _Tp value(int i0, int i1, size_t* hashval=0) const;\n    //! returns value of the specified element (3D case)\n    template<typename _Tp> _Tp value(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! returns value of the specified element (nD case)\n    template<typename _Tp> _Tp value(const int* idx, size_t* hashval=0) const;\n    //@}\n\n    //@{\n    /*!\n     Return pointer to the specified sparse matrix element if it exists\n\n     find<_Tp>(i0,...[,hashval]) is equivalent to (_const Tp*)ptr(i0,...false[,hashval]).\n\n     If the specified element does not exist, the methods return NULL.\n    */\n    //! returns pointer to the specified element (1D case)\n    template<typename _Tp> const _Tp* find(int i0, size_t* hashval=0) const;\n    //! returns pointer to the specified element (2D case)\n    template<typename _Tp> const _Tp* find(int i0, int i1, size_t* hashval=0) const;\n    //! returns pointer to the specified element (3D case)\n    template<typename _Tp> const _Tp* find(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! returns pointer to the specified element (nD case)\n    template<typename _Tp> const _Tp* find(const int* idx, size_t* hashval=0) const;\n\n    //! erases the specified element (2D case)\n    void erase(int i0, int i1, size_t* hashval=0);\n    //! erases the specified element (3D case)\n    void erase(int i0, int i1, int i2, size_t* hashval=0);\n    //! erases the specified element (nD case)\n    void erase(const int* idx, size_t* hashval=0);\n\n    //@{\n    /*!\n       return the sparse matrix iterator pointing to the first sparse matrix element\n    */\n    //! returns the sparse matrix iterator at the matrix beginning\n    SparseMatIterator begin();\n    //! returns the sparse matrix iterator at the matrix beginning\n    template<typename _Tp> SparseMatIterator_<_Tp> begin();\n    //! returns the read-only sparse matrix iterator at the matrix beginning\n    SparseMatConstIterator begin() const;\n    //! returns the read-only sparse matrix iterator at the matrix beginning\n    template<typename _Tp> SparseMatConstIterator_<_Tp> begin() const;\n    //@}\n    /*!\n       return the sparse matrix iterator pointing to the element following the last sparse matrix element\n    */\n    //! returns the sparse matrix iterator at the matrix end\n    SparseMatIterator end();\n    //! returns the read-only sparse matrix iterator at the matrix end\n    SparseMatConstIterator end() const;\n    //! returns the typed sparse matrix iterator at the matrix end\n    template<typename _Tp> SparseMatIterator_<_Tp> end();\n    //! returns the typed read-only sparse matrix iterator at the matrix end\n    template<typename _Tp> SparseMatConstIterator_<_Tp> end() const;\n\n    //! returns the value stored in the sparse martix node\n    template<typename _Tp> _Tp& value(Node* n);\n    //! returns the value stored in the sparse martix node\n    template<typename _Tp> const _Tp& value(const Node* n) const;\n\n    ////////////// some internal-use methods ///////////////\n    Node* node(size_t nidx);\n    const Node* node(size_t nidx) const;\n\n    uchar* newNode(const int* idx, size_t hashval);\n    void removeNode(size_t hidx, size_t nidx, size_t previdx);\n    void resizeHashTab(size_t newsize);\n\n    enum { MAGIC_VAL=0x42FD0000, MAX_DIM=CV_MAX_DIM, HASH_SCALE=0x5bd1e995, HASH_BIT=0x80000000 };\n\n    int flags;\n    Hdr* hdr;\n};\n\n//! finds global minimum and maximum sparse array elements and returns their values and their locations\nCV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal,\n                          double* maxVal, int* minIdx=0, int* maxIdx=0);\n//! computes norm of a sparse matrix\nCV_EXPORTS double norm( const SparseMat& src, int normType );\n//! scales and shifts array elements so that either the specified norm (alpha) or the minimum (alpha) and maximum (beta) array values get the specified values\nCV_EXPORTS void normalize( const SparseMat& src, SparseMat& dst, double alpha, int normType );\n\n/*!\n Read-Only Sparse Matrix Iterator.\n Here is how to use the iterator to compute the sum of floating-point sparse matrix elements:\n\n \\code\n SparseMatConstIterator it = m.begin(), it_end = m.end();\n double s = 0;\n CV_Assert( m.type() == CV_32F );\n for( ; it != it_end; ++it )\n    s += it.value<float>();\n \\endcode\n*/\nclass CV_EXPORTS SparseMatConstIterator\n{\npublic:\n    //! the default constructor\n    SparseMatConstIterator();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatConstIterator(const SparseMat* _m);\n    //! the copy constructor\n    SparseMatConstIterator(const SparseMatConstIterator& it);\n\n    //! the assignment operator\n    SparseMatConstIterator& operator = (const SparseMatConstIterator& it);\n\n    //! template method returning the current matrix element\n    template<typename _Tp> const _Tp& value() const;\n    //! returns the current node of the sparse matrix. it.node->idx is the current element index\n    const SparseMat::Node* node() const;\n\n    //! moves iterator to the previous element\n    SparseMatConstIterator& operator --();\n    //! moves iterator to the previous element\n    SparseMatConstIterator operator --(int);\n    //! moves iterator to the next element\n    SparseMatConstIterator& operator ++();\n    //! moves iterator to the next element\n    SparseMatConstIterator operator ++(int);\n\n    //! moves iterator to the element after the last element\n    void seekEnd();\n\n    const SparseMat* m;\n    size_t hashidx;\n    uchar* ptr;\n};\n\n/*!\n Read-write Sparse Matrix Iterator\n\n The class is similar to cv::SparseMatConstIterator,\n but can be used for in-place modification of the matrix elements.\n*/\nclass CV_EXPORTS SparseMatIterator : public SparseMatConstIterator\n{\npublic:\n    //! the default constructor\n    SparseMatIterator();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatIterator(SparseMat* _m);\n    //! the full constructor setting the iterator to the specified sparse matrix element\n    SparseMatIterator(SparseMat* _m, const int* idx);\n    //! the copy constructor\n    SparseMatIterator(const SparseMatIterator& it);\n\n    //! the assignment operator\n    SparseMatIterator& operator = (const SparseMatIterator& it);\n    //! returns read-write reference to the current sparse matrix element\n    template<typename _Tp> _Tp& value() const;\n    //! returns pointer to the current sparse matrix node. it.node->idx is the index of the current element (do not modify it!)\n    SparseMat::Node* node() const;\n\n    //! moves iterator to the next element\n    SparseMatIterator& operator ++();\n    //! moves iterator to the next element\n    SparseMatIterator operator ++(int);\n};\n\n/*!\n The Template Sparse Matrix class derived from cv::SparseMat\n\n The class provides slightly more convenient operations for accessing elements.\n\n \\code\n SparseMat m;\n ...\n SparseMat_<int> m_ = (SparseMat_<int>&)m;\n m_.ref(1)++; // equivalent to m.ref<int>(1)++;\n m_.ref(2) += m_(3); // equivalent to m.ref<int>(2) += m.value<int>(3);\n \\endcode\n*/\ntemplate<typename _Tp> class SparseMat_ : public SparseMat\n{\npublic:\n    typedef SparseMatIterator_<_Tp> iterator;\n    typedef SparseMatConstIterator_<_Tp> const_iterator;\n\n    //! the default constructor\n    SparseMat_();\n    //! the full constructor equivelent to SparseMat(dims, _sizes, DataType<_Tp>::type)\n    SparseMat_(int dims, const int* _sizes);\n    //! the copy constructor. If DataType<_Tp>.type != m.type(), the m elements are converted\n    SparseMat_(const SparseMat& m);\n    //! the copy constructor. This is O(1) operation - no data is copied\n    SparseMat_(const SparseMat_& m);\n    //! converts dense matrix to the sparse form\n    SparseMat_(const Mat& m);\n    //! converts the old-style sparse matrix to the C++ class. All the elements are copied\n    SparseMat_(const CvSparseMat* m);\n    //! the assignment operator. If DataType<_Tp>.type != m.type(), the m elements are converted\n    SparseMat_& operator = (const SparseMat& m);\n    //! the assignment operator. This is O(1) operation - no data is copied\n    SparseMat_& operator = (const SparseMat_& m);\n    //! converts dense matrix to the sparse form\n    SparseMat_& operator = (const Mat& m);\n\n    //! makes full copy of the matrix. All the elements are duplicated\n    SparseMat_ clone() const;\n    //! equivalent to cv::SparseMat::create(dims, _sizes, DataType<_Tp>::type)\n    void create(int dims, const int* _sizes);\n    //! converts sparse matrix to the old-style CvSparseMat. All the elements are copied\n    operator CvSparseMat*() const;\n\n    //! returns type of the matrix elements\n    int type() const;\n    //! returns depth of the matrix elements\n    int depth() const;\n    //! returns the number of channels in each matrix element\n    int channels() const;\n\n    //! equivalent to SparseMat::ref<_Tp>(i0, hashval)\n    _Tp& ref(int i0, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(i0, i1, hashval)\n    _Tp& ref(int i0, int i1, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(i0, i1, i2, hashval)\n    _Tp& ref(int i0, int i1, int i2, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(idx, hashval)\n    _Tp& ref(const int* idx, size_t* hashval=0);\n\n    //! equivalent to SparseMat::value<_Tp>(i0, hashval)\n    _Tp operator()(int i0, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(i0, i1, hashval)\n    _Tp operator()(int i0, int i1, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(i0, i1, i2, hashval)\n    _Tp operator()(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(idx, hashval)\n    _Tp operator()(const int* idx, size_t* hashval=0) const;\n\n    //! returns sparse matrix iterator pointing to the first sparse matrix element\n    SparseMatIterator_<_Tp> begin();\n    //! returns read-only sparse matrix iterator pointing to the first sparse matrix element\n    SparseMatConstIterator_<_Tp> begin() const;\n    //! returns sparse matrix iterator pointing to the element following the last sparse matrix element\n    SparseMatIterator_<_Tp> end();\n    //! returns read-only sparse matrix iterator pointing to the element following the last sparse matrix element\n    SparseMatConstIterator_<_Tp> end() const;\n};\n\n\n/*!\n Template Read-Only Sparse Matrix Iterator Class.\n\n This is the derived from SparseMatConstIterator class that\n introduces more convenient operator *() for accessing the current element.\n*/\ntemplate<typename _Tp> class SparseMatConstIterator_ : public SparseMatConstIterator\n{\npublic:\n    typedef std::forward_iterator_tag iterator_category;\n\n    //! the default constructor\n    SparseMatConstIterator_();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatConstIterator_(const SparseMat_<_Tp>* _m);\n    SparseMatConstIterator_(const SparseMat* _m);\n    //! the copy constructor\n    SparseMatConstIterator_(const SparseMatConstIterator_& it);\n\n    //! the assignment operator\n    SparseMatConstIterator_& operator = (const SparseMatConstIterator_& it);\n    //! the element access operator\n    const _Tp& operator *() const;\n\n    //! moves iterator to the next element\n    SparseMatConstIterator_& operator ++();\n    //! moves iterator to the next element\n    SparseMatConstIterator_ operator ++(int);\n};\n\n/*!\n Template Read-Write Sparse Matrix Iterator Class.\n\n This is the derived from cv::SparseMatConstIterator_ class that\n introduces more convenient operator *() for accessing the current element.\n*/\ntemplate<typename _Tp> class SparseMatIterator_ : public SparseMatConstIterator_<_Tp>\n{\npublic:\n    typedef std::forward_iterator_tag iterator_category;\n\n    //! the default constructor\n    SparseMatIterator_();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatIterator_(SparseMat_<_Tp>* _m);\n    SparseMatIterator_(SparseMat* _m);\n    //! the copy constructor\n    SparseMatIterator_(const SparseMatIterator_& it);\n\n    //! the assignment operator\n    SparseMatIterator_& operator = (const SparseMatIterator_& it);\n    //! returns the reference to the current element\n    _Tp& operator *() const;\n\n    //! moves the iterator to the next element\n    SparseMatIterator_& operator ++();\n    //! moves the iterator to the next element\n    SparseMatIterator_ operator ++(int);\n};\n\n//////////////////// Fast Nearest-Neighbor Search Structure ////////////////////\n\n/*!\n Fast Nearest Neighbor Search Class.\n\n The class implements D. Lowe BBF (Best-Bin-First) algorithm for the last\n approximate (or accurate) nearest neighbor search in multi-dimensional spaces.\n\n First, a set of vectors is passed to KDTree::KDTree() constructor\n or KDTree::build() method, where it is reordered.\n\n Then arbitrary vectors can be passed to KDTree::findNearest() methods, which\n find the K nearest neighbors among the vectors from the initial set.\n The user can balance between the speed and accuracy of the search by varying Emax\n parameter, which is the number of leaves that the algorithm checks.\n The larger parameter values yield more accurate results at the expense of lower processing speed.\n\n \\code\n KDTree T(points, false);\n const int K = 3, Emax = INT_MAX;\n int idx[K];\n float dist[K];\n T.findNearest(query_vec, K, Emax, idx, 0, dist);\n CV_Assert(dist[0] <= dist[1] && dist[1] <= dist[2]);\n \\endcode\n*/\nclass CV_EXPORTS_W KDTree\n{\npublic:\n    /*!\n        The node of the search tree.\n    */\n    struct Node\n    {\n        Node() : idx(-1), left(-1), right(-1), boundary(0.f) {}\n        Node(int _idx, int _left, int _right, float _boundary)\n            : idx(_idx), left(_left), right(_right), boundary(_boundary) {}\n        //! split dimension; >=0 for nodes (dim), < 0 for leaves (index of the point)\n        int idx;\n        //! node indices of the left and the right branches\n        int left, right;\n        //! go to the left if query_vec[node.idx]<=node.boundary, otherwise go to the right\n        float boundary;\n    };\n\n    //! the default constructor\n    CV_WRAP KDTree();\n    //! the full constructor that builds the search tree\n    CV_WRAP KDTree(InputArray points, bool copyAndReorderPoints=false);\n    //! the full constructor that builds the search tree\n    CV_WRAP KDTree(InputArray points, InputArray _labels,\n                   bool copyAndReorderPoints=false);\n    //! builds the search tree\n    CV_WRAP void build(InputArray points, bool copyAndReorderPoints=false);\n    //! builds the search tree\n    CV_WRAP void build(InputArray points, InputArray labels,\n                       bool copyAndReorderPoints=false);\n    //! finds the K nearest neighbors of \"vec\" while looking at Emax (at most) leaves\n    CV_WRAP int findNearest(InputArray vec, int K, int Emax,\n                            OutputArray neighborsIdx,\n                            OutputArray neighbors=noArray(),\n                            OutputArray dist=noArray(),\n                            OutputArray labels=noArray()) const;\n    //! finds all the points from the initial set that belong to the specified box\n    CV_WRAP void findOrthoRange(InputArray minBounds,\n                                InputArray maxBounds,\n                                OutputArray neighborsIdx,\n                                OutputArray neighbors=noArray(),\n                                OutputArray labels=noArray()) const;\n    //! returns vectors with the specified indices\n    CV_WRAP void getPoints(InputArray idx, OutputArray pts,\n                           OutputArray labels=noArray()) const;\n    //! return a vector with the specified index\n    const float* getPoint(int ptidx, int* label=0) const;\n    //! returns the search space dimensionality\n    CV_WRAP int dims() const;\n\n    vector<Node> nodes; //!< all the tree nodes\n    CV_PROP Mat points; //!< all the points. It can be a reordered copy of the input vector set or the original vector set.\n    CV_PROP vector<int> labels; //!< the parallel array of labels.\n    CV_PROP int maxDepth; //!< maximum depth of the search tree. Do not modify it\n    CV_PROP_RW int normType; //!< type of the distance (cv::NORM_L1 or cv::NORM_L2) used for search. Initially set to cv::NORM_L2, but you can modify it\n};\n\n//////////////////////////////////////// XML & YAML I/O ////////////////////////////////////\n\nclass CV_EXPORTS FileNode;\n\n/*!\n XML/YAML File Storage Class.\n\n The class describes an object associated with XML or YAML file.\n It can be used to store data to such a file or read and decode the data.\n\n The storage is organized as a tree of nested sequences (or lists) and mappings.\n Sequence is a heterogenious array, which elements are accessed by indices or sequentially using an iterator.\n Mapping is analogue of std::map or C structure, which elements are accessed by names.\n The most top level structure is a mapping.\n Leaves of the file storage tree are integers, floating-point numbers and text strings.\n\n For example, the following code:\n\n \\code\n // open file storage for writing. Type of the file is determined from the extension\n FileStorage fs(\"test.yml\", FileStorage::WRITE);\n fs << \"test_int\" << 5 << \"test_real\" << 3.1 << \"test_string\" << \"ABCDEFGH\";\n fs << \"test_mat\" << Mat::eye(3,3,CV_32F);\n\n fs << \"test_list\" << \"[\" << 0.0000000000001 << 2 << CV_PI << -3435345 << \"2-502 2-029 3egegeg\" <<\n \"{:\" << \"month\" << 12 << \"day\" << 31 << \"year\" << 1969 << \"}\" << \"]\";\n fs << \"test_map\" << \"{\" << \"x\" << 1 << \"y\" << 2 << \"width\" << 100 << \"height\" << 200 << \"lbp\" << \"[:\";\n\n const uchar arr[] = {0, 1, 1, 0, 1, 1, 0, 1};\n fs.writeRaw(\"u\", arr, (int)(sizeof(arr)/sizeof(arr[0])));\n\n fs << \"]\" << \"}\";\n \\endcode\n\n will produce the following file:\n\n \\verbatim\n %YAML:1.0\n test_int: 5\n test_real: 3.1000000000000001e+00\n test_string: ABCDEFGH\n test_mat: !!opencv-matrix\n     rows: 3\n     cols: 3\n     dt: f\n     data: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ]\n test_list:\n     - 1.0000000000000000e-13\n     - 2\n     - 3.1415926535897931e+00\n     - -3435345\n     - \"2-502 2-029 3egegeg\"\n     - { month:12, day:31, year:1969 }\n test_map:\n     x: 1\n     y: 2\n     width: 100\n     height: 200\n     lbp: [ 0, 1, 1, 0, 1, 1, 0, 1 ]\n \\endverbatim\n\n and to read the file above, the following code can be used:\n\n \\code\n // open file storage for reading.\n // Type of the file is determined from the content, not the extension\n FileStorage fs(\"test.yml\", FileStorage::READ);\n int test_int = (int)fs[\"test_int\"];\n double test_real = (double)fs[\"test_real\"];\n string test_string = (string)fs[\"test_string\"];\n\n Mat M;\n fs[\"test_mat\"] >> M;\n\n FileNode tl = fs[\"test_list\"];\n CV_Assert(tl.type() == FileNode::SEQ && tl.size() == 6);\n double tl0 = (double)tl[0];\n int tl1 = (int)tl[1];\n double tl2 = (double)tl[2];\n int tl3 = (int)tl[3];\n string tl4 = (string)tl[4];\n CV_Assert(tl[5].type() == FileNode::MAP && tl[5].size() == 3);\n\n int month = (int)tl[5][\"month\"];\n int day = (int)tl[5][\"day\"];\n int year = (int)tl[5][\"year\"];\n\n FileNode tm = fs[\"test_map\"];\n\n int x = (int)tm[\"x\"];\n int y = (int)tm[\"y\"];\n int width = (int)tm[\"width\"];\n int height = (int)tm[\"height\"];\n\n int lbp_val = 0;\n FileNodeIterator it = tm[\"lbp\"].begin();\n\n for(int k = 0; k < 8; k++, ++it)\n    lbp_val |= ((int)*it) << k;\n \\endcode\n*/\nclass CV_EXPORTS_W FileStorage\n{\npublic:\n    //! file storage mode\n    enum\n    {\n        READ=0, //! read mode\n        WRITE=1, //! write mode\n        APPEND=2, //! append mode\n        MEMORY=4,\n        FORMAT_MASK=(7<<3),\n        FORMAT_AUTO=0,\n        FORMAT_XML=(1<<3),\n        FORMAT_YAML=(2<<3)\n    };\n    enum\n    {\n        UNDEFINED=0,\n        VALUE_EXPECTED=1,\n        NAME_EXPECTED=2,\n        INSIDE_MAP=4\n    };\n    //! the default constructor\n    CV_WRAP FileStorage();\n    //! the full constructor that opens file storage for reading or writing\n    CV_WRAP FileStorage(const string& source, int flags, const string& encoding=string());\n    //! the constructor that takes pointer to the C FileStorage structure\n    FileStorage(CvFileStorage* fs);\n    //! the destructor. calls release()\n    virtual ~FileStorage();\n\n    //! opens file storage for reading or writing. The previous storage is closed with release()\n    CV_WRAP virtual bool open(const string& filename, int flags, const string& encoding=string());\n    //! returns true if the object is associated with currently opened file.\n    CV_WRAP virtual bool isOpened() const;\n    //! closes the file and releases all the memory buffers\n    CV_WRAP virtual void release();\n    //! closes the file, releases all the memory buffers and returns the text string\n    CV_WRAP string releaseAndGetString();\n\n    //! returns the first element of the top-level mapping\n    CV_WRAP FileNode getFirstTopLevelNode() const;\n    //! returns the top-level mapping. YAML supports multiple streams\n    CV_WRAP FileNode root(int streamidx=0) const;\n    //! returns the specified element of the top-level mapping\n    FileNode operator[](const string& nodename) const;\n    //! returns the specified element of the top-level mapping\n    CV_WRAP FileNode operator[](const char* nodename) const;\n\n    //! returns pointer to the underlying C FileStorage structure\n    CvFileStorage* operator *() { return fs; }\n    //! returns pointer to the underlying C FileStorage structure\n    const CvFileStorage* operator *() const { return fs; }\n    //! writes one or more numbers of the specified format to the currently written structure\n    void writeRaw( const string& fmt, const uchar* vec, size_t len );\n    //! writes the registered C structure (CvMat, CvMatND, CvSeq). See cvWrite()\n    void writeObj( const string& name, const void* obj );\n\n    //! returns the normalized object name for the specified file name\n    static string getDefaultObjectName(const string& filename);\n\n    Ptr<CvFileStorage> fs; //!< the underlying C FileStorage structure\n    string elname; //!< the currently written element\n    vector<char> structs; //!< the stack of written structures\n    int state; //!< the writer state\n};\n\nclass CV_EXPORTS FileNodeIterator;\n\n/*!\n File Storage Node class\n\n The node is used to store each and every element of the file storage opened for reading -\n from the primitive objects, such as numbers and text strings, to the complex nodes:\n sequences, mappings and the registered objects.\n\n Note that file nodes are only used for navigating file storages opened for reading.\n When a file storage is opened for writing, no data is stored in memory after it is written.\n*/\nclass CV_EXPORTS_W_SIMPLE FileNode\n{\npublic:\n    //! type of the file storage node\n    enum\n    {\n        NONE=0, //!< empty node\n        INT=1, //!< an integer\n        REAL=2, //!< floating-point number\n        FLOAT=REAL, //!< synonym or REAL\n        STR=3, //!< text string in UTF-8 encoding\n        STRING=STR, //!< synonym for STR\n        REF=4, //!< integer of size size_t. Typically used for storing complex dynamic structures where some elements reference the others\n        SEQ=5, //!< sequence\n        MAP=6, //!< mapping\n        TYPE_MASK=7,\n        FLOW=8, //!< compact representation of a sequence or mapping. Used only by YAML writer\n        USER=16, //!< a registered object (e.g. a matrix)\n        EMPTY=32, //!< empty structure (sequence or mapping)\n        NAMED=64 //!< the node has a name (i.e. it is element of a mapping)\n    };\n    //! the default constructor\n    CV_WRAP FileNode();\n    //! the full constructor wrapping CvFileNode structure.\n    FileNode(const CvFileStorage* fs, const CvFileNode* node);\n    //! the copy constructor\n    FileNode(const FileNode& node);\n    //! returns element of a mapping node\n    FileNode operator[](const string& nodename) const;\n    //! returns element of a mapping node\n    CV_WRAP FileNode operator[](const char* nodename) const;\n    //! returns element of a sequence node\n    CV_WRAP FileNode operator[](int i) const;\n    //! returns type of the node\n    CV_WRAP int type() const;\n\n    //! returns true if the node is empty\n    CV_WRAP bool empty() const;\n    //! returns true if the node is a \"none\" object\n    CV_WRAP bool isNone() const;\n    //! returns true if the node is a sequence\n    CV_WRAP bool isSeq() const;\n    //! returns true if the node is a mapping\n    CV_WRAP bool isMap() const;\n    //! returns true if the node is an integer\n    CV_WRAP bool isInt() const;\n    //! returns true if the node is a floating-point number\n    CV_WRAP bool isReal() const;\n    //! returns true if the node is a text string\n    CV_WRAP bool isString() const;\n    //! returns true if the node has a name\n    CV_WRAP bool isNamed() const;\n    //! returns the node name or an empty string if the node is nameless\n    CV_WRAP string name() const;\n    //! returns the number of elements in the node, if it is a sequence or mapping, or 1 otherwise.\n    CV_WRAP size_t size() const;\n    //! returns the node content as an integer. If the node stores floating-point number, it is rounded.\n    operator int() const;\n    //! returns the node content as float\n    operator float() const;\n    //! returns the node content as double\n    operator double() const;\n    //! returns the node content as text string\n    operator string() const;\n\n    //! returns pointer to the underlying file node\n    CvFileNode* operator *();\n    //! returns pointer to the underlying file node\n    const CvFileNode* operator* () const;\n\n    //! returns iterator pointing to the first node element\n    FileNodeIterator begin() const;\n    //! returns iterator pointing to the element following the last node element\n    FileNodeIterator end() const;\n\n    //! reads node elements to the buffer with the specified format\n    void readRaw( const string& fmt, uchar* vec, size_t len ) const;\n    //! reads the registered object and returns pointer to it\n    void* readObj() const;\n\n    // do not use wrapper pointer classes for better efficiency\n    const CvFileStorage* fs;\n    const CvFileNode* node;\n};\n\n\n/*!\n File Node Iterator\n\n The class is used for iterating sequences (usually) and mappings.\n */\nclass CV_EXPORTS FileNodeIterator\n{\npublic:\n    //! the default constructor\n    FileNodeIterator();\n    //! the full constructor set to the ofs-th element of the node\n    FileNodeIterator(const CvFileStorage* fs, const CvFileNode* node, size_t ofs=0);\n    //! the copy constructor\n    FileNodeIterator(const FileNodeIterator& it);\n    //! returns the currently observed element\n    FileNode operator *() const;\n    //! accesses the currently observed element methods\n    FileNode operator ->() const;\n\n    //! moves iterator to the next node\n    FileNodeIterator& operator ++ ();\n    //! moves iterator to the next node\n    FileNodeIterator operator ++ (int);\n    //! moves iterator to the previous node\n    FileNodeIterator& operator -- ();\n    //! moves iterator to the previous node\n    FileNodeIterator operator -- (int);\n    //! moves iterator forward by the specified offset (possibly negative)\n    FileNodeIterator& operator += (int ofs);\n    //! moves iterator backward by the specified offset (possibly negative)\n    FileNodeIterator& operator -= (int ofs);\n\n    //! reads the next maxCount elements (or less, if the sequence/mapping last element occurs earlier) to the buffer with the specified format\n    FileNodeIterator& readRaw( const string& fmt, uchar* vec,\n                               size_t maxCount=(size_t)INT_MAX );\n\n    const CvFileStorage* fs;\n    const CvFileNode* container;\n    CvSeqReader reader;\n    size_t remaining;\n};\n\n////////////// convenient wrappers for operating old-style dynamic structures //////////////\n\ntemplate<typename _Tp> class SeqIterator;\n\ntypedef Ptr<CvMemStorage> MemStorage;\n\n/*!\n Template Sequence Class derived from CvSeq\n\n The class provides more convenient access to sequence elements,\n STL-style operations and iterators.\n\n \\note The class is targeted for simple data types,\n    i.e. no constructors or destructors\n    are called for the sequence elements.\n*/\ntemplate<typename _Tp> class Seq\n{\npublic:\n    typedef SeqIterator<_Tp> iterator;\n    typedef SeqIterator<_Tp> const_iterator;\n\n    //! the default constructor\n    Seq();\n    //! the constructor for wrapping CvSeq structure. The real element type in CvSeq should match _Tp.\n    Seq(const CvSeq* seq);\n    //! creates the empty sequence that resides in the specified storage\n    Seq(MemStorage& storage, int headerSize = sizeof(CvSeq));\n    //! returns read-write reference to the specified element\n    _Tp& operator [](int idx);\n    //! returns read-only reference to the specified element\n    const _Tp& operator[](int idx) const;\n    //! returns iterator pointing to the beginning of the sequence\n    SeqIterator<_Tp> begin() const;\n    //! returns iterator pointing to the element following the last sequence element\n    SeqIterator<_Tp> end() const;\n    //! returns the number of elements in the sequence\n    size_t size() const;\n    //! returns the type of sequence elements (CV_8UC1 ... CV_64FC(CV_CN_MAX) ...)\n    int type() const;\n    //! returns the depth of sequence elements (CV_8U ... CV_64F)\n    int depth() const;\n    //! returns the number of channels in each sequence element\n    int channels() const;\n    //! returns the size of each sequence element\n    size_t elemSize() const;\n    //! returns index of the specified sequence element\n    size_t index(const _Tp& elem) const;\n    //! appends the specified element to the end of the sequence\n    void push_back(const _Tp& elem);\n    //! appends the specified element to the front of the sequence\n    void push_front(const _Tp& elem);\n    //! appends zero or more elements to the end of the sequence\n    void push_back(const _Tp* elems, size_t count);\n    //! appends zero or more elements to the front of the sequence\n    void push_front(const _Tp* elems, size_t count);\n    //! inserts the specified element to the specified position\n    void insert(int idx, const _Tp& elem);\n    //! inserts zero or more elements to the specified position\n    void insert(int idx, const _Tp* elems, size_t count);\n    //! removes element at the specified position\n    void remove(int idx);\n    //! removes the specified subsequence\n    void remove(const Range& r);\n\n    //! returns reference to the first sequence element\n    _Tp& front();\n    //! returns read-only reference to the first sequence element\n    const _Tp& front() const;\n    //! returns reference to the last sequence element\n    _Tp& back();\n    //! returns read-only reference to the last sequence element\n    const _Tp& back() const;\n    //! returns true iff the sequence contains no elements\n    bool empty() const;\n\n    //! removes all the elements from the sequence\n    void clear();\n    //! removes the first element from the sequence\n    void pop_front();\n    //! removes the last element from the sequence\n    void pop_back();\n    //! removes zero or more elements from the beginning of the sequence\n    void pop_front(_Tp* elems, size_t count);\n    //! removes zero or more elements from the end of the sequence\n    void pop_back(_Tp* elems, size_t count);\n\n    //! copies the whole sequence or the sequence slice to the specified vector\n    void copyTo(vector<_Tp>& vec, const Range& range=Range::all()) const;\n    //! returns the vector containing all the sequence elements\n    operator vector<_Tp>() const;\n\n    CvSeq* seq;\n};\n\n\n/*!\n STL-style Sequence Iterator inherited from the CvSeqReader structure\n*/\ntemplate<typename _Tp> class SeqIterator : public CvSeqReader\n{\npublic:\n    //! the default constructor\n    SeqIterator();\n    //! the constructor setting the iterator to the beginning or to the end of the sequence\n    SeqIterator(const Seq<_Tp>& seq, bool seekEnd=false);\n    //! positions the iterator within the sequence\n    void seek(size_t pos);\n    //! reports the current iterator position\n    size_t tell() const;\n    //! returns reference to the current sequence element\n    _Tp& operator *();\n    //! returns read-only reference to the current sequence element\n    const _Tp& operator *() const;\n    //! moves iterator to the next sequence element\n    SeqIterator& operator ++();\n    //! moves iterator to the next sequence element\n    SeqIterator operator ++(int) const;\n    //! moves iterator to the previous sequence element\n    SeqIterator& operator --();\n    //! moves iterator to the previous sequence element\n    SeqIterator operator --(int) const;\n\n    //! moves iterator forward by the specified offset (possibly negative)\n    SeqIterator& operator +=(int);\n    //! moves iterator backward by the specified offset (possibly negative)\n    SeqIterator& operator -=(int);\n\n    // this is index of the current element module seq->total*2\n    // (to distinguish between 0 and seq->total)\n    int index;\n};\n\n\nclass CV_EXPORTS Algorithm;\nclass CV_EXPORTS AlgorithmInfo;\nstruct CV_EXPORTS AlgorithmInfoData;\n\ntemplate<typename _Tp> struct ParamType {};\n\n/*!\n  Base class for high-level OpenCV algorithms\n*/\nclass CV_EXPORTS_W Algorithm\n{\npublic:\n    Algorithm();\n    virtual ~Algorithm();\n    string name() const;\n\n    template<typename _Tp> typename ParamType<_Tp>::member_type get(const string& name) const;\n    template<typename _Tp> typename ParamType<_Tp>::member_type get(const char* name) const;\n\n    CV_WRAP int getInt(const string& name) const;\n    CV_WRAP double getDouble(const string& name) const;\n    CV_WRAP bool getBool(const string& name) const;\n    CV_WRAP string getString(const string& name) const;\n    CV_WRAP Mat getMat(const string& name) const;\n    CV_WRAP vector<Mat> getMatVector(const string& name) const;\n    CV_WRAP Ptr<Algorithm> getAlgorithm(const string& name) const;\n\n    void set(const string& name, int value);\n    void set(const string& name, double value);\n    void set(const string& name, bool value);\n    void set(const string& name, const string& value);\n    void set(const string& name, const Mat& value);\n    void set(const string& name, const vector<Mat>& value);\n    void set(const string& name, const Ptr<Algorithm>& value);\n    template<typename _Tp> void set(const string& name, const Ptr<_Tp>& value);\n\n    CV_WRAP void setInt(const string& name, int value);\n    CV_WRAP void setDouble(const string& name, double value);\n    CV_WRAP void setBool(const string& name, bool value);\n    CV_WRAP void setString(const string& name, const string& value);\n    CV_WRAP void setMat(const string& name, const Mat& value);\n    CV_WRAP void setMatVector(const string& name, const vector<Mat>& value);\n    CV_WRAP void setAlgorithm(const string& name, const Ptr<Algorithm>& value);\n    template<typename _Tp> void setAlgorithm(const string& name, const Ptr<_Tp>& value);\n\n    void set(const char* name, int value);\n    void set(const char* name, double value);\n    void set(const char* name, bool value);\n    void set(const char* name, const string& value);\n    void set(const char* name, const Mat& value);\n    void set(const char* name, const vector<Mat>& value);\n    void set(const char* name, const Ptr<Algorithm>& value);\n    template<typename _Tp> void set(const char* name, const Ptr<_Tp>& value);\n\n    void setInt(const char* name, int value);\n    void setDouble(const char* name, double value);\n    void setBool(const char* name, bool value);\n    void setString(const char* name, const string& value);\n    void setMat(const char* name, const Mat& value);\n    void setMatVector(const char* name, const vector<Mat>& value);\n    void setAlgorithm(const char* name, const Ptr<Algorithm>& value);\n    template<typename _Tp> void setAlgorithm(const char* name, const Ptr<_Tp>& value);\n\n    CV_WRAP string paramHelp(const string& name) const;\n    int paramType(const char* name) const;\n    CV_WRAP int paramType(const string& name) const;\n    CV_WRAP void getParams(CV_OUT vector<string>& names) const;\n\n\n    virtual void write(FileStorage& fs) const;\n    virtual void read(const FileNode& fn);\n\n    typedef Algorithm* (*Constructor)(void);\n    typedef int (Algorithm::*Getter)() const;\n    typedef void (Algorithm::*Setter)(int);\n\n    CV_WRAP static void getList(CV_OUT vector<string>& algorithms);\n    CV_WRAP static Ptr<Algorithm> _create(const string& name);\n    template<typename _Tp> static Ptr<_Tp> create(const string& name);\n\n    virtual AlgorithmInfo* info() const /* TODO: make it = 0;*/ { return 0; }\n};\n\n\nclass CV_EXPORTS AlgorithmInfo\n{\npublic:\n    friend class Algorithm;\n    AlgorithmInfo(const string& name, Algorithm::Constructor create);\n    ~AlgorithmInfo();\n    void get(const Algorithm* algo, const char* name, int argType, void* value) const;\n    void addParam_(Algorithm& algo, const char* name, int argType,\n                   void* value, bool readOnly,\n                   Algorithm::Getter getter, Algorithm::Setter setter,\n                   const string& help=string());\n    string paramHelp(const char* name) const;\n    int paramType(const char* name) const;\n    void getParams(vector<string>& names) const;\n\n    void write(const Algorithm* algo, FileStorage& fs) const;\n    void read(Algorithm* algo, const FileNode& fn) const;\n    string name() const;\n\n    void addParam(Algorithm& algo, const char* name,\n                  int& value, bool readOnly=false,\n                  int (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(int)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  short& value, bool readOnly=false,\n                  int (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(int)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  bool& value, bool readOnly=false,\n                  int (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(int)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  double& value, bool readOnly=false,\n                  double (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(double)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  string& value, bool readOnly=false,\n                  string (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const string&)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  Mat& value, bool readOnly=false,\n                  Mat (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const Mat&)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  vector<Mat>& value, bool readOnly=false,\n                  vector<Mat> (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const vector<Mat>&)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  Ptr<Algorithm>& value, bool readOnly=false,\n                  Ptr<Algorithm> (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const Ptr<Algorithm>&)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  float& value, bool readOnly=false,\n                  float (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(float)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  unsigned int& value, bool readOnly=false,\n                  unsigned int (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(unsigned int)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  uint64& value, bool readOnly=false,\n                  uint64 (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(uint64)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  uchar& value, bool readOnly=false,\n                  uchar (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(uchar)=0,\n                  const string& help=string());\n    template<typename _Tp, typename _Base> void addParam(Algorithm& algo, const char* name,\n                  Ptr<_Tp>& value, bool readOnly=false,\n                  Ptr<_Tp> (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const Ptr<_Tp>&)=0,\n                  const string& help=string());\n    template<typename _Tp> void addParam(Algorithm& algo, const char* name,\n                  Ptr<_Tp>& value, bool readOnly=false,\n                  Ptr<_Tp> (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const Ptr<_Tp>&)=0,\n                  const string& help=string());\nprotected:\n    AlgorithmInfoData* data;\n    void set(Algorithm* algo, const char* name, int argType,\n              const void* value, bool force=false) const;\n};\n\n\nstruct CV_EXPORTS Param\n{\n    enum { INT=0, BOOLEAN=1, REAL=2, STRING=3, MAT=4, MAT_VECTOR=5, ALGORITHM=6, FLOAT=7, UNSIGNED_INT=8, UINT64=9, SHORT=10, UCHAR=11 };\n\n    Param();\n    Param(int _type, bool _readonly, int _offset,\n          Algorithm::Getter _getter=0,\n          Algorithm::Setter _setter=0,\n          const string& _help=string());\n    int type;\n    int offset;\n    bool readonly;\n    Algorithm::Getter getter;\n    Algorithm::Setter setter;\n    string help;\n};\n\ntemplate<> struct ParamType<bool>\n{\n    typedef bool const_param_type;\n    typedef bool member_type;\n\n    enum { type = Param::BOOLEAN };\n};\n\ntemplate<> struct ParamType<int>\n{\n    typedef int const_param_type;\n    typedef int member_type;\n\n    enum { type = Param::INT };\n};\n\ntemplate<> struct ParamType<short>\n{\n    typedef int const_param_type;\n    typedef int member_type;\n\n    enum { type = Param::SHORT };\n};\n\ntemplate<> struct ParamType<double>\n{\n    typedef double const_param_type;\n    typedef double member_type;\n\n    enum { type = Param::REAL };\n};\n\ntemplate<> struct ParamType<string>\n{\n    typedef const string& const_param_type;\n    typedef string member_type;\n\n    enum { type = Param::STRING };\n};\n\ntemplate<> struct ParamType<Mat>\n{\n    typedef const Mat& const_param_type;\n    typedef Mat member_type;\n\n    enum { type = Param::MAT };\n};\n\ntemplate<> struct ParamType<vector<Mat> >\n{\n    typedef const vector<Mat>& const_param_type;\n    typedef vector<Mat> member_type;\n\n    enum { type = Param::MAT_VECTOR };\n};\n\ntemplate<> struct ParamType<Algorithm>\n{\n    typedef const Ptr<Algorithm>& const_param_type;\n    typedef Ptr<Algorithm> member_type;\n\n    enum { type = Param::ALGORITHM };\n};\n\ntemplate<> struct ParamType<float>\n{\n    typedef float const_param_type;\n    typedef float member_type;\n\n    enum { type = Param::FLOAT };\n};\n\ntemplate<> struct ParamType<unsigned>\n{\n    typedef unsigned const_param_type;\n    typedef unsigned member_type;\n\n    enum { type = Param::UNSIGNED_INT };\n};\n\ntemplate<> struct ParamType<uint64>\n{\n    typedef uint64 const_param_type;\n    typedef uint64 member_type;\n\n    enum { type = Param::UINT64 };\n};\n\ntemplate<> struct ParamType<uchar>\n{\n    typedef uchar const_param_type;\n    typedef uchar member_type;\n\n    enum { type = Param::UCHAR };\n};\n\n/*!\n\"\\nThe CommandLineParser class is designed for command line arguments parsing\\n\"\n           \"Keys map: \\n\"\n           \"Before you start to work with CommandLineParser you have to create a map for keys.\\n\"\n           \"    It will look like this\\n\"\n           \"    const char* keys =\\n\"\n           \"    {\\n\"\n           \"        {    s|  string|  123asd |string parameter}\\n\"\n           \"        {    d|  digit |  100    |digit parameter }\\n\"\n           \"        {    c|noCamera|false    |without camera  }\\n\"\n           \"        {    1|        |some text|help            }\\n\"\n           \"        {    2|        |333      |another help    }\\n\"\n           \"    };\\n\"\n           \"Usage syntax: \\n\"\n           \"    \\\"{\\\" - start of parameter string.\\n\"\n           \"    \\\"}\\\" - end of parameter string\\n\"\n           \"    \\\"|\\\" - separator between short name, full name, default value and help\\n\"\n           \"Supported syntax: \\n\"\n           \"    --key1=arg1  <If a key with '--' must has an argument\\n\"\n           \"                  you have to assign it through '=' sign.> \\n\"\n           \"<If the key with '--' doesn't have any argument, it means that it is a bool key>\\n\"\n           \"    -key2=arg2   <If a key with '-' must has an argument \\n\"\n           \"                  you have to assign it through '=' sign.> \\n\"\n           \"If the key with '-' doesn't have any argument, it means that it is a bool key\\n\"\n           \"    key3                 <This key can't has any parameter> \\n\"\n           \"Usage: \\n\"\n           \"      Imagine that the input parameters are next:\\n\"\n           \"                -s=string_value --digit=250 --noCamera lena.jpg 10000\\n\"\n           \"    CommandLineParser parser(argc, argv, keys) - create a parser object\\n\"\n           \"    parser.get<string>(\\\"s\\\" or \\\"string\\\") will return you first parameter value\\n\"\n           \"    parser.get<string>(\\\"s\\\", false or \\\"string\\\", false) will return you first parameter value\\n\"\n           \"                                                                without spaces in end and begin\\n\"\n           \"    parser.get<int>(\\\"d\\\" or \\\"digit\\\") will return you second parameter value.\\n\"\n           \"                    It also works with 'unsigned int', 'double', and 'float' types>\\n\"\n           \"    parser.get<bool>(\\\"c\\\" or \\\"noCamera\\\") will return you true .\\n\"\n           \"                                If you enter this key in commandline>\\n\"\n           \"                                It return you false otherwise.\\n\"\n           \"    parser.get<string>(\\\"1\\\") will return you the first argument without parameter (lena.jpg) \\n\"\n           \"    parser.get<int>(\\\"2\\\") will return you the second argument without parameter (10000)\\n\"\n           \"                          It also works with 'unsigned int', 'double', and 'float' types \\n\"\n*/\nclass CV_EXPORTS CommandLineParser\n{\n    public:\n\n    //! the default constructor\n      CommandLineParser(int argc, const char* const argv[], const char* key_map);\n\n    //! get parameter, you can choose: delete spaces in end and begin or not\n    template<typename _Tp>\n    _Tp get(const std::string& name, bool space_delete=true)\n    {\n        if (!has(name))\n        {\n            return _Tp();\n        }\n        std::string str = getString(name);\n        return analyzeValue<_Tp>(str, space_delete);\n    }\n\n    //! print short name, full name, current value and help for all params\n    void printParams();\n\n    protected:\n    std::map<std::string, std::vector<std::string> > data;\n    std::string getString(const std::string& name);\n\n    bool has(const std::string& keys);\n\n    template<typename _Tp>\n    _Tp analyzeValue(const std::string& str, bool space_delete=false);\n\n    template<typename _Tp>\n    static _Tp getData(const std::string& str)\n    {\n        _Tp res = _Tp();\n        std::stringstream s1(str);\n        s1 >> res;\n        return res;\n    }\n\n    template<typename _Tp>\n     _Tp fromStringNumber(const std::string& str);//the default conversion function for numbers\n\n    };\n\ntemplate<> CV_EXPORTS\nbool CommandLineParser::get<bool>(const std::string& name, bool space_delete);\n\ntemplate<> CV_EXPORTS\nstd::string CommandLineParser::analyzeValue<std::string>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\nint CommandLineParser::analyzeValue<int>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\nunsigned int CommandLineParser::analyzeValue<unsigned int>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\nuint64 CommandLineParser::analyzeValue<uint64>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\nfloat CommandLineParser::analyzeValue<float>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\ndouble CommandLineParser::analyzeValue<double>(const std::string& str, bool space_delete);\n\n\n/////////////////////////////// Parallel Primitives //////////////////////////////////\n\n// a base body class\nclass CV_EXPORTS ParallelLoopBody\n{\npublic:\n    virtual ~ParallelLoopBody();\n    virtual void operator() (const Range& range) const = 0;\n};\n\nCV_EXPORTS void parallel_for_(const Range& range, const ParallelLoopBody& body, double nstripes=-1.);\n\n/////////////////////////// Synchronization Primitives ///////////////////////////////\n\nclass CV_EXPORTS Mutex\n{\npublic:\n    Mutex();\n    ~Mutex();\n    Mutex(const Mutex& m);\n    Mutex& operator = (const Mutex& m);\n\n    void lock();\n    bool trylock();\n    void unlock();\n\n    struct Impl;\nprotected:\n    Impl* impl;\n};\n\nclass CV_EXPORTS AutoLock\n{\npublic:\n    AutoLock(Mutex& m) : mutex(&m) { mutex->lock(); }\n    ~AutoLock() { mutex->unlock(); }\nprotected:\n    Mutex* mutex;\nprivate:\n    AutoLock(const AutoLock&);\n    AutoLock& operator = (const AutoLock&);\n};\n\nclass TLSDataContainer\n{\nprivate:\n    int key_;\nprotected:\n    CV_EXPORTS TLSDataContainer();\n    CV_EXPORTS ~TLSDataContainer(); // virtual is not required\npublic:\n    virtual void* createDataInstance() const = 0;\n    virtual void deleteDataInstance(void* data) const = 0;\n\n    CV_EXPORTS void* getData() const;\n};\n\ntemplate <typename T>\nclass TLSData : protected TLSDataContainer\n{\npublic:\n    inline TLSData() {}\n    inline ~TLSData() {}\n    inline T* get() const { return (T*)getData(); }\nprivate:\n    virtual void* createDataInstance() const { return new T; }\n    virtual void deleteDataInstance(void* data) const { delete (T*)data; }\n};\n\n}\n\n#endif // __cplusplus\n\n#include \"opencv2/core/operations.hpp\"\n#include \"opencv2/core/mat.hpp\"\n\n#endif /*__OPENCV_CORE_HPP__*/\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/core_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n\n#ifndef __OPENCV_CORE_C_H__\n#define __OPENCV_CORE_C_H__\n\n#include \"opencv2/core/types_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/****************************************************************************************\\\n*          Array allocation, deallocation, initialization and access to elements         *\n\\****************************************************************************************/\n\n/* <malloc> wrapper.\n   If there is no enough memory, the function\n   (as well as other OpenCV functions that call cvAlloc)\n   raises an error. */\nCVAPI(void*)  cvAlloc( size_t size );\n\n/* <free> wrapper.\n   Here and further all the memory releasing functions\n   (that all call cvFree) take double pointer in order to\n   to clear pointer to the data after releasing it.\n   Passing pointer to NULL pointer is Ok: nothing happens in this case\n*/\nCVAPI(void)   cvFree_( void* ptr );\n#define cvFree(ptr) (cvFree_(*(ptr)), *(ptr)=0)\n\n/* Allocates and initializes IplImage header */\nCVAPI(IplImage*)  cvCreateImageHeader( CvSize size, int depth, int channels );\n\n/* Inializes IplImage header */\nCVAPI(IplImage*) cvInitImageHeader( IplImage* image, CvSize size, int depth,\n                                   int channels, int origin CV_DEFAULT(0),\n                                   int align CV_DEFAULT(4));\n\n/* Creates IPL image (header and data) */\nCVAPI(IplImage*)  cvCreateImage( CvSize size, int depth, int channels );\n\n/* Releases (i.e. deallocates) IPL image header */\nCVAPI(void)  cvReleaseImageHeader( IplImage** image );\n\n/* Releases IPL image header and data */\nCVAPI(void)  cvReleaseImage( IplImage** image );\n\n/* Creates a copy of IPL image (widthStep may differ) */\nCVAPI(IplImage*) cvCloneImage( const IplImage* image );\n\n/* Sets a Channel Of Interest (only a few functions support COI) -\n   use cvCopy to extract the selected channel and/or put it back */\nCVAPI(void)  cvSetImageCOI( IplImage* image, int coi );\n\n/* Retrieves image Channel Of Interest */\nCVAPI(int)  cvGetImageCOI( const IplImage* image );\n\n/* Sets image ROI (region of interest) (COI is not changed) */\nCVAPI(void)  cvSetImageROI( IplImage* image, CvRect rect );\n\n/* Resets image ROI and COI */\nCVAPI(void)  cvResetImageROI( IplImage* image );\n\n/* Retrieves image ROI */\nCVAPI(CvRect) cvGetImageROI( const IplImage* image );\n\n/* Allocates and initializes CvMat header */\nCVAPI(CvMat*)  cvCreateMatHeader( int rows, int cols, int type );\n\n#define CV_AUTOSTEP  0x7fffffff\n\n/* Initializes CvMat header */\nCVAPI(CvMat*) cvInitMatHeader( CvMat* mat, int rows, int cols,\n                              int type, void* data CV_DEFAULT(NULL),\n                              int step CV_DEFAULT(CV_AUTOSTEP) );\n\n/* Allocates and initializes CvMat header and allocates data */\nCVAPI(CvMat*)  cvCreateMat( int rows, int cols, int type );\n\n/* Releases CvMat header and deallocates matrix data\n   (reference counting is used for data) */\nCVAPI(void)  cvReleaseMat( CvMat** mat );\n\n/* Decrements CvMat data reference counter and deallocates the data if\n   it reaches 0 */\nCV_INLINE  void  cvDecRefData( CvArr* arr )\n{\n    if( CV_IS_MAT( arr ))\n    {\n        CvMat* mat = (CvMat*)arr;\n        mat->data.ptr = NULL;\n        if( mat->refcount != NULL && --*mat->refcount == 0 )\n            cvFree( &mat->refcount );\n        mat->refcount = NULL;\n    }\n    else if( CV_IS_MATND( arr ))\n    {\n        CvMatND* mat = (CvMatND*)arr;\n        mat->data.ptr = NULL;\n        if( mat->refcount != NULL && --*mat->refcount == 0 )\n            cvFree( &mat->refcount );\n        mat->refcount = NULL;\n    }\n}\n\n/* Increments CvMat data reference counter */\nCV_INLINE  int  cvIncRefData( CvArr* arr )\n{\n    int refcount = 0;\n    if( CV_IS_MAT( arr ))\n    {\n        CvMat* mat = (CvMat*)arr;\n        if( mat->refcount != NULL )\n            refcount = ++*mat->refcount;\n    }\n    else if( CV_IS_MATND( arr ))\n    {\n        CvMatND* mat = (CvMatND*)arr;\n        if( mat->refcount != NULL )\n            refcount = ++*mat->refcount;\n    }\n    return refcount;\n}\n\n\n/* Creates an exact copy of the input matrix (except, may be, step value) */\nCVAPI(CvMat*) cvCloneMat( const CvMat* mat );\n\n\n/* Makes a new matrix from <rect> subrectangle of input array.\n   No data is copied */\nCVAPI(CvMat*) cvGetSubRect( const CvArr* arr, CvMat* submat, CvRect rect );\n#define cvGetSubArr cvGetSubRect\n\n/* Selects row span of the input array: arr(start_row:delta_row:end_row,:)\n    (end_row is not included into the span). */\nCVAPI(CvMat*) cvGetRows( const CvArr* arr, CvMat* submat,\n                        int start_row, int end_row,\n                        int delta_row CV_DEFAULT(1));\n\nCV_INLINE  CvMat*  cvGetRow( const CvArr* arr, CvMat* submat, int row )\n{\n    return cvGetRows( arr, submat, row, row + 1, 1 );\n}\n\n\n/* Selects column span of the input array: arr(:,start_col:end_col)\n   (end_col is not included into the span) */\nCVAPI(CvMat*) cvGetCols( const CvArr* arr, CvMat* submat,\n                        int start_col, int end_col );\n\nCV_INLINE  CvMat*  cvGetCol( const CvArr* arr, CvMat* submat, int col )\n{\n    return cvGetCols( arr, submat, col, col + 1 );\n}\n\n/* Select a diagonal of the input array.\n   (diag = 0 means the main diagonal, >0 means a diagonal above the main one,\n   <0 - below the main one).\n   The diagonal will be represented as a column (nx1 matrix). */\nCVAPI(CvMat*) cvGetDiag( const CvArr* arr, CvMat* submat,\n                            int diag CV_DEFAULT(0));\n\n/* low-level scalar <-> raw data conversion functions */\nCVAPI(void) cvScalarToRawData( const CvScalar* scalar, void* data, int type,\n                              int extend_to_12 CV_DEFAULT(0) );\n\nCVAPI(void) cvRawDataToScalar( const void* data, int type, CvScalar* scalar );\n\n/* Allocates and initializes CvMatND header */\nCVAPI(CvMatND*)  cvCreateMatNDHeader( int dims, const int* sizes, int type );\n\n/* Allocates and initializes CvMatND header and allocates data */\nCVAPI(CvMatND*)  cvCreateMatND( int dims, const int* sizes, int type );\n\n/* Initializes preallocated CvMatND header */\nCVAPI(CvMatND*)  cvInitMatNDHeader( CvMatND* mat, int dims, const int* sizes,\n                                    int type, void* data CV_DEFAULT(NULL) );\n\n/* Releases CvMatND */\nCV_INLINE  void  cvReleaseMatND( CvMatND** mat )\n{\n    cvReleaseMat( (CvMat**)mat );\n}\n\n/* Creates a copy of CvMatND (except, may be, steps) */\nCVAPI(CvMatND*) cvCloneMatND( const CvMatND* mat );\n\n/* Allocates and initializes CvSparseMat header and allocates data */\nCVAPI(CvSparseMat*)  cvCreateSparseMat( int dims, const int* sizes, int type );\n\n/* Releases CvSparseMat */\nCVAPI(void)  cvReleaseSparseMat( CvSparseMat** mat );\n\n/* Creates a copy of CvSparseMat (except, may be, zero items) */\nCVAPI(CvSparseMat*) cvCloneSparseMat( const CvSparseMat* mat );\n\n/* Initializes sparse array iterator\n   (returns the first node or NULL if the array is empty) */\nCVAPI(CvSparseNode*) cvInitSparseMatIterator( const CvSparseMat* mat,\n                                              CvSparseMatIterator* mat_iterator );\n\n// returns next sparse array node (or NULL if there is no more nodes)\nCV_INLINE CvSparseNode* cvGetNextSparseNode( CvSparseMatIterator* mat_iterator )\n{\n    if( mat_iterator->node->next )\n        return mat_iterator->node = mat_iterator->node->next;\n    else\n    {\n        int idx;\n        for( idx = ++mat_iterator->curidx; idx < mat_iterator->mat->hashsize; idx++ )\n        {\n            CvSparseNode* node = (CvSparseNode*)mat_iterator->mat->hashtable[idx];\n            if( node )\n            {\n                mat_iterator->curidx = idx;\n                return mat_iterator->node = node;\n            }\n        }\n        return NULL;\n    }\n}\n\n/**************** matrix iterator: used for n-ary operations on dense arrays *********/\n\n#define CV_MAX_ARR 10\n\ntypedef struct CvNArrayIterator\n{\n    int count; /* number of arrays */\n    int dims; /* number of dimensions to iterate */\n    CvSize size; /* maximal common linear size: { width = size, height = 1 } */\n    uchar* ptr[CV_MAX_ARR]; /* pointers to the array slices */\n    int stack[CV_MAX_DIM]; /* for internal use */\n    CvMatND* hdr[CV_MAX_ARR]; /* pointers to the headers of the\n                                 matrices that are processed */\n}\nCvNArrayIterator;\n\n#define CV_NO_DEPTH_CHECK     1\n#define CV_NO_CN_CHECK        2\n#define CV_NO_SIZE_CHECK      4\n\n/* initializes iterator that traverses through several arrays simulteneously\n   (the function together with cvNextArraySlice is used for\n    N-ari element-wise operations) */\nCVAPI(int) cvInitNArrayIterator( int count, CvArr** arrs,\n                                 const CvArr* mask, CvMatND* stubs,\n                                 CvNArrayIterator* array_iterator,\n                                 int flags CV_DEFAULT(0) );\n\n/* returns zero value if iteration is finished, non-zero (slice length) otherwise */\nCVAPI(int) cvNextNArraySlice( CvNArrayIterator* array_iterator );\n\n\n/* Returns type of array elements:\n   CV_8UC1 ... CV_64FC4 ... */\nCVAPI(int) cvGetElemType( const CvArr* arr );\n\n/* Retrieves number of an array dimensions and\n   optionally sizes of the dimensions */\nCVAPI(int) cvGetDims( const CvArr* arr, int* sizes CV_DEFAULT(NULL) );\n\n\n/* Retrieves size of a particular array dimension.\n   For 2d arrays cvGetDimSize(arr,0) returns number of rows (image height)\n   and cvGetDimSize(arr,1) returns number of columns (image width) */\nCVAPI(int) cvGetDimSize( const CvArr* arr, int index );\n\n\n/* ptr = &arr(idx0,idx1,...). All indexes are zero-based,\n   the major dimensions go first (e.g. (y,x) for 2D, (z,y,x) for 3D */\nCVAPI(uchar*) cvPtr1D( const CvArr* arr, int idx0, int* type CV_DEFAULT(NULL));\nCVAPI(uchar*) cvPtr2D( const CvArr* arr, int idx0, int idx1, int* type CV_DEFAULT(NULL) );\nCVAPI(uchar*) cvPtr3D( const CvArr* arr, int idx0, int idx1, int idx2,\n                      int* type CV_DEFAULT(NULL));\n\n/* For CvMat or IplImage number of indices should be 2\n   (row index (y) goes first, column index (x) goes next).\n   For CvMatND or CvSparseMat number of infices should match number of <dims> and\n   indices order should match the array dimension order. */\nCVAPI(uchar*) cvPtrND( const CvArr* arr, const int* idx, int* type CV_DEFAULT(NULL),\n                      int create_node CV_DEFAULT(1),\n                      unsigned* precalc_hashval CV_DEFAULT(NULL));\n\n/* value = arr(idx0,idx1,...) */\nCVAPI(CvScalar) cvGet1D( const CvArr* arr, int idx0 );\nCVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );\nCVAPI(CvScalar) cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 );\nCVAPI(CvScalar) cvGetND( const CvArr* arr, const int* idx );\n\n/* for 1-channel arrays */\nCVAPI(double) cvGetReal1D( const CvArr* arr, int idx0 );\nCVAPI(double) cvGetReal2D( const CvArr* arr, int idx0, int idx1 );\nCVAPI(double) cvGetReal3D( const CvArr* arr, int idx0, int idx1, int idx2 );\nCVAPI(double) cvGetRealND( const CvArr* arr, const int* idx );\n\n/* arr(idx0,idx1,...) = value */\nCVAPI(void) cvSet1D( CvArr* arr, int idx0, CvScalar value );\nCVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );\nCVAPI(void) cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value );\nCVAPI(void) cvSetND( CvArr* arr, const int* idx, CvScalar value );\n\n/* for 1-channel arrays */\nCVAPI(void) cvSetReal1D( CvArr* arr, int idx0, double value );\nCVAPI(void) cvSetReal2D( CvArr* arr, int idx0, int idx1, double value );\nCVAPI(void) cvSetReal3D( CvArr* arr, int idx0,\n                        int idx1, int idx2, double value );\nCVAPI(void) cvSetRealND( CvArr* arr, const int* idx, double value );\n\n/* clears element of ND dense array,\n   in case of sparse arrays it deletes the specified node */\nCVAPI(void) cvClearND( CvArr* arr, const int* idx );\n\n/* Converts CvArr (IplImage or CvMat,...) to CvMat.\n   If the last parameter is non-zero, function can\n   convert multi(>2)-dimensional array to CvMat as long as\n   the last array's dimension is continous. The resultant\n   matrix will be have appropriate (a huge) number of rows */\nCVAPI(CvMat*) cvGetMat( const CvArr* arr, CvMat* header,\n                       int* coi CV_DEFAULT(NULL),\n                       int allowND CV_DEFAULT(0));\n\n/* Converts CvArr (IplImage or CvMat) to IplImage */\nCVAPI(IplImage*) cvGetImage( const CvArr* arr, IplImage* image_header );\n\n\n/* Changes a shape of multi-dimensional array.\n   new_cn == 0 means that number of channels remains unchanged.\n   new_dims == 0 means that number and sizes of dimensions remain the same\n   (unless they need to be changed to set the new number of channels)\n   if new_dims == 1, there is no need to specify new dimension sizes\n   The resultant configuration should be achievable w/o data copying.\n   If the resultant array is sparse, CvSparseMat header should be passed\n   to the function else if the result is 1 or 2 dimensional,\n   CvMat header should be passed to the function\n   else CvMatND header should be passed */\nCVAPI(CvArr*) cvReshapeMatND( const CvArr* arr,\n                             int sizeof_header, CvArr* header,\n                             int new_cn, int new_dims, int* new_sizes );\n\n#define cvReshapeND( arr, header, new_cn, new_dims, new_sizes )   \\\n      cvReshapeMatND( (arr), sizeof(*(header)), (header),         \\\n                      (new_cn), (new_dims), (new_sizes))\n\nCVAPI(CvMat*) cvReshape( const CvArr* arr, CvMat* header,\n                        int new_cn, int new_rows CV_DEFAULT(0) );\n\n/* Repeats source 2d array several times in both horizontal and\n   vertical direction to fill destination array */\nCVAPI(void) cvRepeat( const CvArr* src, CvArr* dst );\n\n/* Allocates array data */\nCVAPI(void)  cvCreateData( CvArr* arr );\n\n/* Releases array data */\nCVAPI(void)  cvReleaseData( CvArr* arr );\n\n/* Attaches user data to the array header. The step is reffered to\n   the pre-last dimension. That is, all the planes of the array\n   must be joint (w/o gaps) */\nCVAPI(void)  cvSetData( CvArr* arr, void* data, int step );\n\n/* Retrieves raw data of CvMat, IplImage or CvMatND.\n   In the latter case the function raises an error if\n   the array can not be represented as a matrix */\nCVAPI(void) cvGetRawData( const CvArr* arr, uchar** data,\n                         int* step CV_DEFAULT(NULL),\n                         CvSize* roi_size CV_DEFAULT(NULL));\n\n/* Returns width and height of array in elements */\nCVAPI(CvSize) cvGetSize( const CvArr* arr );\n\n/* Copies source array to destination array */\nCVAPI(void)  cvCopy( const CvArr* src, CvArr* dst,\n                     const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Sets all or \"masked\" elements of input array\n   to the same value*/\nCVAPI(void)  cvSet( CvArr* arr, CvScalar value,\n                    const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Clears all the array elements (sets them to 0) */\nCVAPI(void)  cvSetZero( CvArr* arr );\n#define cvZero  cvSetZero\n\n\n/* Splits a multi-channel array into the set of single-channel arrays or\n   extracts particular [color] plane */\nCVAPI(void)  cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1,\n                      CvArr* dst2, CvArr* dst3 );\n\n/* Merges a set of single-channel arrays into the single multi-channel array\n   or inserts one particular [color] plane to the array */\nCVAPI(void)  cvMerge( const CvArr* src0, const CvArr* src1,\n                      const CvArr* src2, const CvArr* src3,\n                      CvArr* dst );\n\n/* Copies several channels from input arrays to\n   certain channels of output arrays */\nCVAPI(void)  cvMixChannels( const CvArr** src, int src_count,\n                            CvArr** dst, int dst_count,\n                            const int* from_to, int pair_count );\n\n/* Performs linear transformation on every source array element:\n   dst(x,y,c) = scale*src(x,y,c)+shift.\n   Arbitrary combination of input and output array depths are allowed\n   (number of channels must be the same), thus the function can be used\n   for type conversion */\nCVAPI(void)  cvConvertScale( const CvArr* src, CvArr* dst,\n                             double scale CV_DEFAULT(1),\n                             double shift CV_DEFAULT(0) );\n#define cvCvtScale cvConvertScale\n#define cvScale  cvConvertScale\n#define cvConvert( src, dst )  cvConvertScale( (src), (dst), 1, 0 )\n\n\n/* Performs linear transformation on every source array element,\n   stores absolute value of the result:\n   dst(x,y,c) = abs(scale*src(x,y,c)+shift).\n   destination array must have 8u type.\n   In other cases one may use cvConvertScale + cvAbsDiffS */\nCVAPI(void)  cvConvertScaleAbs( const CvArr* src, CvArr* dst,\n                                double scale CV_DEFAULT(1),\n                                double shift CV_DEFAULT(0) );\n#define cvCvtScaleAbs  cvConvertScaleAbs\n\n\n/* checks termination criteria validity and\n   sets eps to default_eps (if it is not set),\n   max_iter to default_max_iters (if it is not set)\n*/\nCVAPI(CvTermCriteria) cvCheckTermCriteria( CvTermCriteria criteria,\n                                           double default_eps,\n                                           int default_max_iters );\n\n/****************************************************************************************\\\n*                   Arithmetic, logic and comparison operations                          *\n\\****************************************************************************************/\n\n/* dst(mask) = src1(mask) + src2(mask) */\nCVAPI(void)  cvAdd( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                    const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(mask) = src(mask) + value */\nCVAPI(void)  cvAddS( const CvArr* src, CvScalar value, CvArr* dst,\n                     const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(mask) = src1(mask) - src2(mask) */\nCVAPI(void)  cvSub( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                    const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(mask) = src(mask) - value = src(mask) + (-value) */\nCV_INLINE  void  cvSubS( const CvArr* src, CvScalar value, CvArr* dst,\n                         const CvArr* mask CV_DEFAULT(NULL))\n{\n    cvAddS( src, cvScalar( -value.val[0], -value.val[1], -value.val[2], -value.val[3]),\n            dst, mask );\n}\n\n/* dst(mask) = value - src(mask) */\nCVAPI(void)  cvSubRS( const CvArr* src, CvScalar value, CvArr* dst,\n                      const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src1(idx) * src2(idx) * scale\n   (scaled element-wise multiplication of 2 arrays) */\nCVAPI(void)  cvMul( const CvArr* src1, const CvArr* src2,\n                    CvArr* dst, double scale CV_DEFAULT(1) );\n\n/* element-wise division/inversion with scaling:\n    dst(idx) = src1(idx) * scale / src2(idx)\n    or dst(idx) = scale / src2(idx) if src1 == 0 */\nCVAPI(void)  cvDiv( const CvArr* src1, const CvArr* src2,\n                    CvArr* dst, double scale CV_DEFAULT(1));\n\n/* dst = src1 * scale + src2 */\nCVAPI(void)  cvScaleAdd( const CvArr* src1, CvScalar scale,\n                         const CvArr* src2, CvArr* dst );\n#define cvAXPY( A, real_scalar, B, C ) cvScaleAdd(A, cvRealScalar(real_scalar), B, C)\n\n/* dst = src1 * alpha + src2 * beta + gamma */\nCVAPI(void)  cvAddWeighted( const CvArr* src1, double alpha,\n                            const CvArr* src2, double beta,\n                            double gamma, CvArr* dst );\n\n/* result = sum_i(src1(i) * src2(i)) (results for all channels are accumulated together) */\nCVAPI(double)  cvDotProduct( const CvArr* src1, const CvArr* src2 );\n\n/* dst(idx) = src1(idx) & src2(idx) */\nCVAPI(void) cvAnd( const CvArr* src1, const CvArr* src2,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src(idx) & value */\nCVAPI(void) cvAndS( const CvArr* src, CvScalar value,\n                   CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src1(idx) | src2(idx) */\nCVAPI(void) cvOr( const CvArr* src1, const CvArr* src2,\n                 CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src(idx) | value */\nCVAPI(void) cvOrS( const CvArr* src, CvScalar value,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src1(idx) ^ src2(idx) */\nCVAPI(void) cvXor( const CvArr* src1, const CvArr* src2,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src(idx) ^ value */\nCVAPI(void) cvXorS( const CvArr* src, CvScalar value,\n                   CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = ~src(idx) */\nCVAPI(void) cvNot( const CvArr* src, CvArr* dst );\n\n/* dst(idx) = lower(idx) <= src(idx) < upper(idx) */\nCVAPI(void) cvInRange( const CvArr* src, const CvArr* lower,\n                      const CvArr* upper, CvArr* dst );\n\n/* dst(idx) = lower <= src(idx) < upper */\nCVAPI(void) cvInRangeS( const CvArr* src, CvScalar lower,\n                       CvScalar upper, CvArr* dst );\n\n#define CV_CMP_EQ   0\n#define CV_CMP_GT   1\n#define CV_CMP_GE   2\n#define CV_CMP_LT   3\n#define CV_CMP_LE   4\n#define CV_CMP_NE   5\n\n/* The comparison operation support single-channel arrays only.\n   Destination image should be 8uC1 or 8sC1 */\n\n/* dst(idx) = src1(idx) _cmp_op_ src2(idx) */\nCVAPI(void) cvCmp( const CvArr* src1, const CvArr* src2, CvArr* dst, int cmp_op );\n\n/* dst(idx) = src1(idx) _cmp_op_ value */\nCVAPI(void) cvCmpS( const CvArr* src, double value, CvArr* dst, int cmp_op );\n\n/* dst(idx) = min(src1(idx),src2(idx)) */\nCVAPI(void) cvMin( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/* dst(idx) = max(src1(idx),src2(idx)) */\nCVAPI(void) cvMax( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/* dst(idx) = min(src(idx),value) */\nCVAPI(void) cvMinS( const CvArr* src, double value, CvArr* dst );\n\n/* dst(idx) = max(src(idx),value) */\nCVAPI(void) cvMaxS( const CvArr* src, double value, CvArr* dst );\n\n/* dst(x,y,c) = abs(src1(x,y,c) - src2(x,y,c)) */\nCVAPI(void) cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/* dst(x,y,c) = abs(src(x,y,c) - value(c)) */\nCVAPI(void) cvAbsDiffS( const CvArr* src, CvArr* dst, CvScalar value );\n#define cvAbs( src, dst ) cvAbsDiffS( (src), (dst), cvScalarAll(0))\n\n/****************************************************************************************\\\n*                                Math operations                                         *\n\\****************************************************************************************/\n\n/* Does cartesian->polar coordinates conversion.\n   Either of output components (magnitude or angle) is optional */\nCVAPI(void)  cvCartToPolar( const CvArr* x, const CvArr* y,\n                            CvArr* magnitude, CvArr* angle CV_DEFAULT(NULL),\n                            int angle_in_degrees CV_DEFAULT(0));\n\n/* Does polar->cartesian coordinates conversion.\n   Either of output components (magnitude or angle) is optional.\n   If magnitude is missing it is assumed to be all 1's */\nCVAPI(void)  cvPolarToCart( const CvArr* magnitude, const CvArr* angle,\n                            CvArr* x, CvArr* y,\n                            int angle_in_degrees CV_DEFAULT(0));\n\n/* Does powering: dst(idx) = src(idx)^power */\nCVAPI(void)  cvPow( const CvArr* src, CvArr* dst, double power );\n\n/* Does exponention: dst(idx) = exp(src(idx)).\n   Overflow is not handled yet. Underflow is handled.\n   Maximal relative error is ~7e-6 for single-precision input */\nCVAPI(void)  cvExp( const CvArr* src, CvArr* dst );\n\n/* Calculates natural logarithms: dst(idx) = log(abs(src(idx))).\n   Logarithm of 0 gives large negative number(~-700)\n   Maximal relative error is ~3e-7 for single-precision output\n*/\nCVAPI(void)  cvLog( const CvArr* src, CvArr* dst );\n\n/* Fast arctangent calculation */\nCVAPI(float) cvFastArctan( float y, float x );\n\n/* Fast cubic root calculation */\nCVAPI(float)  cvCbrt( float value );\n\n/* Checks array values for NaNs, Infs or simply for too large numbers\n   (if CV_CHECK_RANGE is set). If CV_CHECK_QUIET is set,\n   no runtime errors is raised (function returns zero value in case of \"bad\" values).\n   Otherwise cvError is called */\n#define  CV_CHECK_RANGE    1\n#define  CV_CHECK_QUIET    2\nCVAPI(int)  cvCheckArr( const CvArr* arr, int flags CV_DEFAULT(0),\n                        double min_val CV_DEFAULT(0), double max_val CV_DEFAULT(0));\n#define cvCheckArray cvCheckArr\n\n#define CV_RAND_UNI      0\n#define CV_RAND_NORMAL   1\nCVAPI(void) cvRandArr( CvRNG* rng, CvArr* arr, int dist_type,\n                      CvScalar param1, CvScalar param2 );\n\nCVAPI(void) cvRandShuffle( CvArr* mat, CvRNG* rng,\n                           double iter_factor CV_DEFAULT(1.));\n\n#define CV_SORT_EVERY_ROW 0\n#define CV_SORT_EVERY_COLUMN 1\n#define CV_SORT_ASCENDING 0\n#define CV_SORT_DESCENDING 16\n\nCVAPI(void) cvSort( const CvArr* src, CvArr* dst CV_DEFAULT(NULL),\n                    CvArr* idxmat CV_DEFAULT(NULL),\n                    int flags CV_DEFAULT(0));\n\n/* Finds real roots of a cubic equation */\nCVAPI(int) cvSolveCubic( const CvMat* coeffs, CvMat* roots );\n\n/* Finds all real and complex roots of a polynomial equation */\nCVAPI(void) cvSolvePoly(const CvMat* coeffs, CvMat *roots2,\n      int maxiter CV_DEFAULT(20), int fig CV_DEFAULT(100));\n\n/****************************************************************************************\\\n*                                Matrix operations                                       *\n\\****************************************************************************************/\n\n/* Calculates cross product of two 3d vectors */\nCVAPI(void)  cvCrossProduct( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/* Matrix transform: dst = A*B + C, C is optional */\n#define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( (src1), (src2), 1., (src3), 1., (dst), 0 )\n#define cvMatMul( src1, src2, dst )  cvMatMulAdd( (src1), (src2), NULL, (dst))\n\n#define CV_GEMM_A_T 1\n#define CV_GEMM_B_T 2\n#define CV_GEMM_C_T 4\n/* Extended matrix transform:\n   dst = alpha*op(A)*op(B) + beta*op(C), where op(X) is X or X^T */\nCVAPI(void)  cvGEMM( const CvArr* src1, const CvArr* src2, double alpha,\n                     const CvArr* src3, double beta, CvArr* dst,\n                     int tABC CV_DEFAULT(0));\n#define cvMatMulAddEx cvGEMM\n\n/* Transforms each element of source array and stores\n   resultant vectors in destination array */\nCVAPI(void)  cvTransform( const CvArr* src, CvArr* dst,\n                          const CvMat* transmat,\n                          const CvMat* shiftvec CV_DEFAULT(NULL));\n#define cvMatMulAddS cvTransform\n\n/* Does perspective transform on every element of input array */\nCVAPI(void)  cvPerspectiveTransform( const CvArr* src, CvArr* dst,\n                                     const CvMat* mat );\n\n/* Calculates (A-delta)*(A-delta)^T (order=0) or (A-delta)^T*(A-delta) (order=1) */\nCVAPI(void) cvMulTransposed( const CvArr* src, CvArr* dst, int order,\n                             const CvArr* delta CV_DEFAULT(NULL),\n                             double scale CV_DEFAULT(1.) );\n\n/* Tranposes matrix. Square matrices can be transposed in-place */\nCVAPI(void)  cvTranspose( const CvArr* src, CvArr* dst );\n#define cvT cvTranspose\n\n/* Completes the symmetric matrix from the lower (LtoR=0) or from the upper (LtoR!=0) part */\nCVAPI(void)  cvCompleteSymm( CvMat* matrix, int LtoR CV_DEFAULT(0) );\n\n/* Mirror array data around horizontal (flip=0),\n   vertical (flip=1) or both(flip=-1) axises:\n   cvFlip(src) flips images vertically and sequences horizontally (inplace) */\nCVAPI(void)  cvFlip( const CvArr* src, CvArr* dst CV_DEFAULT(NULL),\n                     int flip_mode CV_DEFAULT(0));\n#define cvMirror cvFlip\n\n\n#define CV_SVD_MODIFY_A   1\n#define CV_SVD_U_T        2\n#define CV_SVD_V_T        4\n\n/* Performs Singular Value Decomposition of a matrix */\nCVAPI(void)   cvSVD( CvArr* A, CvArr* W, CvArr* U CV_DEFAULT(NULL),\n                     CvArr* V CV_DEFAULT(NULL), int flags CV_DEFAULT(0));\n\n/* Performs Singular Value Back Substitution (solves A*X = B):\n   flags must be the same as in cvSVD */\nCVAPI(void)   cvSVBkSb( const CvArr* W, const CvArr* U,\n                        const CvArr* V, const CvArr* B,\n                        CvArr* X, int flags );\n\n#define CV_LU  0\n#define CV_SVD 1\n#define CV_SVD_SYM 2\n#define CV_CHOLESKY 3\n#define CV_QR  4\n#define CV_NORMAL 16\n\n/* Inverts matrix */\nCVAPI(double)  cvInvert( const CvArr* src, CvArr* dst,\n                         int method CV_DEFAULT(CV_LU));\n#define cvInv cvInvert\n\n/* Solves linear system (src1)*(dst) = (src2)\n   (returns 0 if src1 is a singular and CV_LU method is used) */\nCVAPI(int)  cvSolve( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                     int method CV_DEFAULT(CV_LU));\n\n/* Calculates determinant of input matrix */\nCVAPI(double) cvDet( const CvArr* mat );\n\n/* Calculates trace of the matrix (sum of elements on the main diagonal) */\nCVAPI(CvScalar) cvTrace( const CvArr* mat );\n\n/* Finds eigen values and vectors of a symmetric matrix */\nCVAPI(void)  cvEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,\n                        double eps CV_DEFAULT(0),\n                        int lowindex CV_DEFAULT(-1),\n                        int highindex CV_DEFAULT(-1));\n\n///* Finds selected eigen values and vectors of a symmetric matrix */\n//CVAPI(void)  cvSelectedEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,\n//                                int lowindex, int highindex );\n\n/* Makes an identity matrix (mat_ij = i == j) */\nCVAPI(void)  cvSetIdentity( CvArr* mat, CvScalar value CV_DEFAULT(cvRealScalar(1)) );\n\n/* Fills matrix with given range of numbers */\nCVAPI(CvArr*)  cvRange( CvArr* mat, double start, double end );\n\n/* Calculates covariation matrix for a set of vectors */\n/* transpose([v1-avg, v2-avg,...]) * [v1-avg,v2-avg,...] */\n#define CV_COVAR_SCRAMBLED 0\n\n/* [v1-avg, v2-avg,...] * transpose([v1-avg,v2-avg,...]) */\n#define CV_COVAR_NORMAL    1\n\n/* do not calc average (i.e. mean vector) - use the input vector instead\n   (useful for calculating covariance matrix by parts) */\n#define CV_COVAR_USE_AVG   2\n\n/* scale the covariance matrix coefficients by number of the vectors */\n#define CV_COVAR_SCALE     4\n\n/* all the input vectors are stored in a single matrix, as its rows */\n#define CV_COVAR_ROWS      8\n\n/* all the input vectors are stored in a single matrix, as its columns */\n#define CV_COVAR_COLS     16\n\nCVAPI(void)  cvCalcCovarMatrix( const CvArr** vects, int count,\n                                CvArr* cov_mat, CvArr* avg, int flags );\n\n#define CV_PCA_DATA_AS_ROW 0\n#define CV_PCA_DATA_AS_COL 1\n#define CV_PCA_USE_AVG 2\nCVAPI(void)  cvCalcPCA( const CvArr* data, CvArr* mean,\n                        CvArr* eigenvals, CvArr* eigenvects, int flags );\n\nCVAPI(void)  cvProjectPCA( const CvArr* data, const CvArr* mean,\n                           const CvArr* eigenvects, CvArr* result );\n\nCVAPI(void)  cvBackProjectPCA( const CvArr* proj, const CvArr* mean,\n                               const CvArr* eigenvects, CvArr* result );\n\n/* Calculates Mahalanobis(weighted) distance */\nCVAPI(double)  cvMahalanobis( const CvArr* vec1, const CvArr* vec2, const CvArr* mat );\n#define cvMahalonobis  cvMahalanobis\n\n/****************************************************************************************\\\n*                                    Array Statistics                                    *\n\\****************************************************************************************/\n\n/* Finds sum of array elements */\nCVAPI(CvScalar)  cvSum( const CvArr* arr );\n\n/* Calculates number of non-zero pixels */\nCVAPI(int)  cvCountNonZero( const CvArr* arr );\n\n/* Calculates mean value of array elements */\nCVAPI(CvScalar)  cvAvg( const CvArr* arr, const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Calculates mean and standard deviation of pixel values */\nCVAPI(void)  cvAvgSdv( const CvArr* arr, CvScalar* mean, CvScalar* std_dev,\n                       const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Finds global minimum, maximum and their positions */\nCVAPI(void)  cvMinMaxLoc( const CvArr* arr, double* min_val, double* max_val,\n                          CvPoint* min_loc CV_DEFAULT(NULL),\n                          CvPoint* max_loc CV_DEFAULT(NULL),\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n/* types of array norm */\n#define CV_C            1\n#define CV_L1           2\n#define CV_L2           4\n#define CV_NORM_MASK    7\n#define CV_RELATIVE     8\n#define CV_DIFF         16\n#define CV_MINMAX       32\n\n#define CV_DIFF_C       (CV_DIFF | CV_C)\n#define CV_DIFF_L1      (CV_DIFF | CV_L1)\n#define CV_DIFF_L2      (CV_DIFF | CV_L2)\n#define CV_RELATIVE_C   (CV_RELATIVE | CV_C)\n#define CV_RELATIVE_L1  (CV_RELATIVE | CV_L1)\n#define CV_RELATIVE_L2  (CV_RELATIVE | CV_L2)\n\n/* Finds norm, difference norm or relative difference norm for an array (or two arrays) */\nCVAPI(double)  cvNorm( const CvArr* arr1, const CvArr* arr2 CV_DEFAULT(NULL),\n                       int norm_type CV_DEFAULT(CV_L2),\n                       const CvArr* mask CV_DEFAULT(NULL) );\n\nCVAPI(void)  cvNormalize( const CvArr* src, CvArr* dst,\n                          double a CV_DEFAULT(1.), double b CV_DEFAULT(0.),\n                          int norm_type CV_DEFAULT(CV_L2),\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n\n#define CV_REDUCE_SUM 0\n#define CV_REDUCE_AVG 1\n#define CV_REDUCE_MAX 2\n#define CV_REDUCE_MIN 3\n\nCVAPI(void)  cvReduce( const CvArr* src, CvArr* dst, int dim CV_DEFAULT(-1),\n                       int op CV_DEFAULT(CV_REDUCE_SUM) );\n\n/****************************************************************************************\\\n*                      Discrete Linear Transforms and Related Functions                  *\n\\****************************************************************************************/\n\n#define CV_DXT_FORWARD  0\n#define CV_DXT_INVERSE  1\n#define CV_DXT_SCALE    2 /* divide result by size of array */\n#define CV_DXT_INV_SCALE (CV_DXT_INVERSE + CV_DXT_SCALE)\n#define CV_DXT_INVERSE_SCALE CV_DXT_INV_SCALE\n#define CV_DXT_ROWS     4 /* transform each row individually */\n#define CV_DXT_MUL_CONJ 8 /* conjugate the second argument of cvMulSpectrums */\n\n/* Discrete Fourier Transform:\n    complex->complex,\n    real->ccs (forward),\n    ccs->real (inverse) */\nCVAPI(void)  cvDFT( const CvArr* src, CvArr* dst, int flags,\n                    int nonzero_rows CV_DEFAULT(0) );\n#define cvFFT cvDFT\n\n/* Multiply results of DFTs: DFT(X)*DFT(Y) or DFT(X)*conj(DFT(Y)) */\nCVAPI(void)  cvMulSpectrums( const CvArr* src1, const CvArr* src2,\n                             CvArr* dst, int flags );\n\n/* Finds optimal DFT vector size >= size0 */\nCVAPI(int)  cvGetOptimalDFTSize( int size0 );\n\n/* Discrete Cosine Transform */\nCVAPI(void)  cvDCT( const CvArr* src, CvArr* dst, int flags );\n\n/****************************************************************************************\\\n*                              Dynamic data structures                                   *\n\\****************************************************************************************/\n\n/* Calculates length of sequence slice (with support of negative indices). */\nCVAPI(int) cvSliceLength( CvSlice slice, const CvSeq* seq );\n\n\n/* Creates new memory storage.\n   block_size == 0 means that default,\n   somewhat optimal size, is used (currently, it is 64K) */\nCVAPI(CvMemStorage*)  cvCreateMemStorage( int block_size CV_DEFAULT(0));\n\n\n/* Creates a memory storage that will borrow memory blocks from parent storage */\nCVAPI(CvMemStorage*)  cvCreateChildMemStorage( CvMemStorage* parent );\n\n\n/* Releases memory storage. All the children of a parent must be released before\n   the parent. A child storage returns all the blocks to parent when it is released */\nCVAPI(void)  cvReleaseMemStorage( CvMemStorage** storage );\n\n\n/* Clears memory storage. This is the only way(!!!) (besides cvRestoreMemStoragePos)\n   to reuse memory allocated for the storage - cvClearSeq,cvClearSet ...\n   do not free any memory.\n   A child storage returns all the blocks to the parent when it is cleared */\nCVAPI(void)  cvClearMemStorage( CvMemStorage* storage );\n\n/* Remember a storage \"free memory\" position */\nCVAPI(void)  cvSaveMemStoragePos( const CvMemStorage* storage, CvMemStoragePos* pos );\n\n/* Restore a storage \"free memory\" position */\nCVAPI(void)  cvRestoreMemStoragePos( CvMemStorage* storage, CvMemStoragePos* pos );\n\n/* Allocates continuous buffer of the specified size in the storage */\nCVAPI(void*) cvMemStorageAlloc( CvMemStorage* storage, size_t size );\n\n/* Allocates string in memory storage */\nCVAPI(CvString) cvMemStorageAllocString( CvMemStorage* storage, const char* ptr,\n                                         int len CV_DEFAULT(-1) );\n\n/* Creates new empty sequence that will reside in the specified storage */\nCVAPI(CvSeq*)  cvCreateSeq( int seq_flags, size_t header_size,\n                            size_t elem_size, CvMemStorage* storage );\n\n/* Changes default size (granularity) of sequence blocks.\n   The default size is ~1Kbyte */\nCVAPI(void)  cvSetSeqBlockSize( CvSeq* seq, int delta_elems );\n\n\n/* Adds new element to the end of sequence. Returns pointer to the element */\nCVAPI(schar*)  cvSeqPush( CvSeq* seq, const void* element CV_DEFAULT(NULL));\n\n\n/* Adds new element to the beginning of sequence. Returns pointer to it */\nCVAPI(schar*)  cvSeqPushFront( CvSeq* seq, const void* element CV_DEFAULT(NULL));\n\n\n/* Removes the last element from sequence and optionally saves it */\nCVAPI(void)  cvSeqPop( CvSeq* seq, void* element CV_DEFAULT(NULL));\n\n\n/* Removes the first element from sequence and optioanally saves it */\nCVAPI(void)  cvSeqPopFront( CvSeq* seq, void* element CV_DEFAULT(NULL));\n\n\n#define CV_FRONT 1\n#define CV_BACK 0\n/* Adds several new elements to the end of sequence */\nCVAPI(void)  cvSeqPushMulti( CvSeq* seq, const void* elements,\n                             int count, int in_front CV_DEFAULT(0) );\n\n/* Removes several elements from the end of sequence and optionally saves them */\nCVAPI(void)  cvSeqPopMulti( CvSeq* seq, void* elements,\n                            int count, int in_front CV_DEFAULT(0) );\n\n/* Inserts a new element in the middle of sequence.\n   cvSeqInsert(seq,0,elem) == cvSeqPushFront(seq,elem) */\nCVAPI(schar*)  cvSeqInsert( CvSeq* seq, int before_index,\n                            const void* element CV_DEFAULT(NULL));\n\n/* Removes specified sequence element */\nCVAPI(void)  cvSeqRemove( CvSeq* seq, int index );\n\n\n/* Removes all the elements from the sequence. The freed memory\n   can be reused later only by the same sequence unless cvClearMemStorage\n   or cvRestoreMemStoragePos is called */\nCVAPI(void)  cvClearSeq( CvSeq* seq );\n\n\n/* Retrieves pointer to specified sequence element.\n   Negative indices are supported and mean counting from the end\n   (e.g -1 means the last sequence element) */\nCVAPI(schar*)  cvGetSeqElem( const CvSeq* seq, int index );\n\n/* Calculates index of the specified sequence element.\n   Returns -1 if element does not belong to the sequence */\nCVAPI(int)  cvSeqElemIdx( const CvSeq* seq, const void* element,\n                         CvSeqBlock** block CV_DEFAULT(NULL) );\n\n/* Initializes sequence writer. The new elements will be added to the end of sequence */\nCVAPI(void)  cvStartAppendToSeq( CvSeq* seq, CvSeqWriter* writer );\n\n\n/* Combination of cvCreateSeq and cvStartAppendToSeq */\nCVAPI(void)  cvStartWriteSeq( int seq_flags, int header_size,\n                              int elem_size, CvMemStorage* storage,\n                              CvSeqWriter* writer );\n\n/* Closes sequence writer, updates sequence header and returns pointer\n   to the resultant sequence\n   (which may be useful if the sequence was created using cvStartWriteSeq))\n*/\nCVAPI(CvSeq*)  cvEndWriteSeq( CvSeqWriter* writer );\n\n\n/* Updates sequence header. May be useful to get access to some of previously\n   written elements via cvGetSeqElem or sequence reader */\nCVAPI(void)   cvFlushSeqWriter( CvSeqWriter* writer );\n\n\n/* Initializes sequence reader.\n   The sequence can be read in forward or backward direction */\nCVAPI(void) cvStartReadSeq( const CvSeq* seq, CvSeqReader* reader,\n                           int reverse CV_DEFAULT(0) );\n\n\n/* Returns current sequence reader position (currently observed sequence element) */\nCVAPI(int)  cvGetSeqReaderPos( CvSeqReader* reader );\n\n\n/* Changes sequence reader position. It may seek to an absolute or\n   to relative to the current position */\nCVAPI(void)   cvSetSeqReaderPos( CvSeqReader* reader, int index,\n                                 int is_relative CV_DEFAULT(0));\n\n/* Copies sequence content to a continuous piece of memory */\nCVAPI(void*)  cvCvtSeqToArray( const CvSeq* seq, void* elements,\n                               CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ) );\n\n/* Creates sequence header for array.\n   After that all the operations on sequences that do not alter the content\n   can be applied to the resultant sequence */\nCVAPI(CvSeq*) cvMakeSeqHeaderForArray( int seq_type, int header_size,\n                                       int elem_size, void* elements, int total,\n                                       CvSeq* seq, CvSeqBlock* block );\n\n/* Extracts sequence slice (with or without copying sequence elements) */\nCVAPI(CvSeq*) cvSeqSlice( const CvSeq* seq, CvSlice slice,\n                         CvMemStorage* storage CV_DEFAULT(NULL),\n                         int copy_data CV_DEFAULT(0));\n\nCV_INLINE CvSeq* cvCloneSeq( const CvSeq* seq, CvMemStorage* storage CV_DEFAULT(NULL))\n{\n    return cvSeqSlice( seq, CV_WHOLE_SEQ, storage, 1 );\n}\n\n/* Removes sequence slice */\nCVAPI(void)  cvSeqRemoveSlice( CvSeq* seq, CvSlice slice );\n\n/* Inserts a sequence or array into another sequence */\nCVAPI(void)  cvSeqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr );\n\n/* a < b ? -1 : a > b ? 1 : 0 */\ntypedef int (CV_CDECL* CvCmpFunc)(const void* a, const void* b, void* userdata );\n\n/* Sorts sequence in-place given element comparison function */\nCVAPI(void) cvSeqSort( CvSeq* seq, CvCmpFunc func, void* userdata CV_DEFAULT(NULL) );\n\n/* Finds element in a [sorted] sequence */\nCVAPI(schar*) cvSeqSearch( CvSeq* seq, const void* elem, CvCmpFunc func,\n                           int is_sorted, int* elem_idx,\n                           void* userdata CV_DEFAULT(NULL) );\n\n/* Reverses order of sequence elements in-place */\nCVAPI(void) cvSeqInvert( CvSeq* seq );\n\n/* Splits sequence into one or more equivalence classes using the specified criteria */\nCVAPI(int)  cvSeqPartition( const CvSeq* seq, CvMemStorage* storage,\n                            CvSeq** labels, CvCmpFunc is_equal, void* userdata );\n\n/************ Internal sequence functions ************/\nCVAPI(void)  cvChangeSeqBlock( void* reader, int direction );\nCVAPI(void)  cvCreateSeqBlock( CvSeqWriter* writer );\n\n\n/* Creates a new set */\nCVAPI(CvSet*)  cvCreateSet( int set_flags, int header_size,\n                            int elem_size, CvMemStorage* storage );\n\n/* Adds new element to the set and returns pointer to it */\nCVAPI(int)  cvSetAdd( CvSet* set_header, CvSetElem* elem CV_DEFAULT(NULL),\n                      CvSetElem** inserted_elem CV_DEFAULT(NULL) );\n\n/* Fast variant of cvSetAdd */\nCV_INLINE  CvSetElem* cvSetNew( CvSet* set_header )\n{\n    CvSetElem* elem = set_header->free_elems;\n    if( elem )\n    {\n        set_header->free_elems = elem->next_free;\n        elem->flags = elem->flags & CV_SET_ELEM_IDX_MASK;\n        set_header->active_count++;\n    }\n    else\n        cvSetAdd( set_header, NULL, (CvSetElem**)&elem );\n    return elem;\n}\n\n/* Removes set element given its pointer */\nCV_INLINE  void cvSetRemoveByPtr( CvSet* set_header, void* elem )\n{\n    CvSetElem* _elem = (CvSetElem*)elem;\n    assert( _elem->flags >= 0 /*&& (elem->flags & CV_SET_ELEM_IDX_MASK) < set_header->total*/ );\n    _elem->next_free = set_header->free_elems;\n    _elem->flags = (_elem->flags & CV_SET_ELEM_IDX_MASK) | CV_SET_ELEM_FREE_FLAG;\n    set_header->free_elems = _elem;\n    set_header->active_count--;\n}\n\n/* Removes element from the set by its index  */\nCVAPI(void)   cvSetRemove( CvSet* set_header, int index );\n\n/* Returns a set element by index. If the element doesn't belong to the set,\n   NULL is returned */\nCV_INLINE CvSetElem* cvGetSetElem( const CvSet* set_header, int idx )\n{\n    CvSetElem* elem = (CvSetElem*)(void *)cvGetSeqElem( (CvSeq*)set_header, idx );\n    return elem && CV_IS_SET_ELEM( elem ) ? elem : 0;\n}\n\n/* Removes all the elements from the set */\nCVAPI(void)  cvClearSet( CvSet* set_header );\n\n/* Creates new graph */\nCVAPI(CvGraph*)  cvCreateGraph( int graph_flags, int header_size,\n                                int vtx_size, int edge_size,\n                                CvMemStorage* storage );\n\n/* Adds new vertex to the graph */\nCVAPI(int)  cvGraphAddVtx( CvGraph* graph, const CvGraphVtx* vtx CV_DEFAULT(NULL),\n                           CvGraphVtx** inserted_vtx CV_DEFAULT(NULL) );\n\n\n/* Removes vertex from the graph together with all incident edges */\nCVAPI(int)  cvGraphRemoveVtx( CvGraph* graph, int index );\nCVAPI(int)  cvGraphRemoveVtxByPtr( CvGraph* graph, CvGraphVtx* vtx );\n\n\n/* Link two vertices specifed by indices or pointers if they\n   are not connected or return pointer to already existing edge\n   connecting the vertices.\n   Functions return 1 if a new edge was created, 0 otherwise */\nCVAPI(int)  cvGraphAddEdge( CvGraph* graph,\n                            int start_idx, int end_idx,\n                            const CvGraphEdge* edge CV_DEFAULT(NULL),\n                            CvGraphEdge** inserted_edge CV_DEFAULT(NULL) );\n\nCVAPI(int)  cvGraphAddEdgeByPtr( CvGraph* graph,\n                               CvGraphVtx* start_vtx, CvGraphVtx* end_vtx,\n                               const CvGraphEdge* edge CV_DEFAULT(NULL),\n                               CvGraphEdge** inserted_edge CV_DEFAULT(NULL) );\n\n/* Remove edge connecting two vertices */\nCVAPI(void)  cvGraphRemoveEdge( CvGraph* graph, int start_idx, int end_idx );\nCVAPI(void)  cvGraphRemoveEdgeByPtr( CvGraph* graph, CvGraphVtx* start_vtx,\n                                     CvGraphVtx* end_vtx );\n\n/* Find edge connecting two vertices */\nCVAPI(CvGraphEdge*)  cvFindGraphEdge( const CvGraph* graph, int start_idx, int end_idx );\nCVAPI(CvGraphEdge*)  cvFindGraphEdgeByPtr( const CvGraph* graph,\n                                           const CvGraphVtx* start_vtx,\n                                           const CvGraphVtx* end_vtx );\n#define cvGraphFindEdge cvFindGraphEdge\n#define cvGraphFindEdgeByPtr cvFindGraphEdgeByPtr\n\n/* Remove all vertices and edges from the graph */\nCVAPI(void)  cvClearGraph( CvGraph* graph );\n\n\n/* Count number of edges incident to the vertex */\nCVAPI(int)  cvGraphVtxDegree( const CvGraph* graph, int vtx_idx );\nCVAPI(int)  cvGraphVtxDegreeByPtr( const CvGraph* graph, const CvGraphVtx* vtx );\n\n\n/* Retrieves graph vertex by given index */\n#define cvGetGraphVtx( graph, idx ) (CvGraphVtx*)cvGetSetElem((CvSet*)(graph), (idx))\n\n/* Retrieves index of a graph vertex given its pointer */\n#define cvGraphVtxIdx( graph, vtx ) ((vtx)->flags & CV_SET_ELEM_IDX_MASK)\n\n/* Retrieves index of a graph edge given its pointer */\n#define cvGraphEdgeIdx( graph, edge ) ((edge)->flags & CV_SET_ELEM_IDX_MASK)\n\n#define cvGraphGetVtxCount( graph ) ((graph)->active_count)\n#define cvGraphGetEdgeCount( graph ) ((graph)->edges->active_count)\n\n#define  CV_GRAPH_VERTEX        1\n#define  CV_GRAPH_TREE_EDGE     2\n#define  CV_GRAPH_BACK_EDGE     4\n#define  CV_GRAPH_FORWARD_EDGE  8\n#define  CV_GRAPH_CROSS_EDGE    16\n#define  CV_GRAPH_ANY_EDGE      30\n#define  CV_GRAPH_NEW_TREE      32\n#define  CV_GRAPH_BACKTRACKING  64\n#define  CV_GRAPH_OVER          -1\n\n#define  CV_GRAPH_ALL_ITEMS    -1\n\n/* flags for graph vertices and edges */\n#define  CV_GRAPH_ITEM_VISITED_FLAG  (1 << 30)\n#define  CV_IS_GRAPH_VERTEX_VISITED(vtx) \\\n    (((CvGraphVtx*)(vtx))->flags & CV_GRAPH_ITEM_VISITED_FLAG)\n#define  CV_IS_GRAPH_EDGE_VISITED(edge) \\\n    (((CvGraphEdge*)(edge))->flags & CV_GRAPH_ITEM_VISITED_FLAG)\n#define  CV_GRAPH_SEARCH_TREE_NODE_FLAG   (1 << 29)\n#define  CV_GRAPH_FORWARD_EDGE_FLAG       (1 << 28)\n\ntypedef struct CvGraphScanner\n{\n    CvGraphVtx* vtx;       /* current graph vertex (or current edge origin) */\n    CvGraphVtx* dst;       /* current graph edge destination vertex */\n    CvGraphEdge* edge;     /* current edge */\n\n    CvGraph* graph;        /* the graph */\n    CvSeq*   stack;        /* the graph vertex stack */\n    int      index;        /* the lower bound of certainly visited vertices */\n    int      mask;         /* event mask */\n}\nCvGraphScanner;\n\n/* Creates new graph scanner. */\nCVAPI(CvGraphScanner*)  cvCreateGraphScanner( CvGraph* graph,\n                                             CvGraphVtx* vtx CV_DEFAULT(NULL),\n                                             int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS));\n\n/* Releases graph scanner. */\nCVAPI(void) cvReleaseGraphScanner( CvGraphScanner** scanner );\n\n/* Get next graph element */\nCVAPI(int)  cvNextGraphItem( CvGraphScanner* scanner );\n\n/* Creates a copy of graph */\nCVAPI(CvGraph*) cvCloneGraph( const CvGraph* graph, CvMemStorage* storage );\n\n/****************************************************************************************\\\n*                                     Drawing                                            *\n\\****************************************************************************************/\n\n/****************************************************************************************\\\n*       Drawing functions work with images/matrices of arbitrary type.                   *\n*       For color images the channel order is BGR[A]                                     *\n*       Antialiasing is supported only for 8-bit image now.                              *\n*       All the functions include parameter color that means rgb value (that may be      *\n*       constructed with CV_RGB macro) for color images and brightness                   *\n*       for grayscale images.                                                            *\n*       If a drawn figure is partially or completely outside of the image, it is clipped.*\n\\****************************************************************************************/\n\n#define CV_RGB( r, g, b )  cvScalar( (b), (g), (r), 0 )\n#define CV_FILLED -1\n\n#define CV_AA 16\n\n/* Draws 4-connected, 8-connected or antialiased line segment connecting two points */\nCVAPI(void)  cvLine( CvArr* img, CvPoint pt1, CvPoint pt2,\n                     CvScalar color, int thickness CV_DEFAULT(1),\n                     int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n/* Draws a rectangle given two opposite corners of the rectangle (pt1 & pt2),\n   if thickness<0 (e.g. thickness == CV_FILLED), the filled box is drawn */\nCVAPI(void)  cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2,\n                          CvScalar color, int thickness CV_DEFAULT(1),\n                          int line_type CV_DEFAULT(8),\n                          int shift CV_DEFAULT(0));\n\n/* Draws a rectangle specified by a CvRect structure */\nCVAPI(void)  cvRectangleR( CvArr* img, CvRect r,\n                           CvScalar color, int thickness CV_DEFAULT(1),\n                           int line_type CV_DEFAULT(8),\n                           int shift CV_DEFAULT(0));\n\n\n/* Draws a circle with specified center and radius.\n   Thickness works in the same way as with cvRectangle */\nCVAPI(void)  cvCircle( CvArr* img, CvPoint center, int radius,\n                       CvScalar color, int thickness CV_DEFAULT(1),\n                       int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\n/* Draws ellipse outline, filled ellipse, elliptic arc or filled elliptic sector,\n   depending on <thickness>, <start_angle> and <end_angle> parameters. The resultant figure\n   is rotated by <angle>. All the angles are in degrees */\nCVAPI(void)  cvEllipse( CvArr* img, CvPoint center, CvSize axes,\n                        double angle, double start_angle, double end_angle,\n                        CvScalar color, int thickness CV_DEFAULT(1),\n                        int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\nCV_INLINE  void  cvEllipseBox( CvArr* img, CvBox2D box, CvScalar color,\n                               int thickness CV_DEFAULT(1),\n                               int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) )\n{\n    CvSize axes;\n    axes.width = cvRound(box.size.width*0.5);\n    axes.height = cvRound(box.size.height*0.5);\n\n    cvEllipse( img, cvPointFrom32f( box.center ), axes, box.angle,\n               0, 360, color, thickness, line_type, shift );\n}\n\n/* Fills convex or monotonous polygon. */\nCVAPI(void)  cvFillConvexPoly( CvArr* img, const CvPoint* pts, int npts, CvScalar color,\n                               int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\n/* Fills an area bounded by one or more arbitrary polygons */\nCVAPI(void)  cvFillPoly( CvArr* img, CvPoint** pts, const int* npts,\n                         int contours, CvScalar color,\n                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n/* Draws one or more polygonal curves */\nCVAPI(void)  cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours,\n                         int is_closed, CvScalar color, int thickness CV_DEFAULT(1),\n                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n#define cvDrawRect cvRectangle\n#define cvDrawLine cvLine\n#define cvDrawCircle cvCircle\n#define cvDrawEllipse cvEllipse\n#define cvDrawPolyLine cvPolyLine\n\n/* Clips the line segment connecting *pt1 and *pt2\n   by the rectangular window\n   (0<=x<img_size.width, 0<=y<img_size.height). */\nCVAPI(int) cvClipLine( CvSize img_size, CvPoint* pt1, CvPoint* pt2 );\n\n/* Initializes line iterator. Initially, line_iterator->ptr will point\n   to pt1 (or pt2, see left_to_right description) location in the image.\n   Returns the number of pixels on the line between the ending points. */\nCVAPI(int)  cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2,\n                                CvLineIterator* line_iterator,\n                                int connectivity CV_DEFAULT(8),\n                                int left_to_right CV_DEFAULT(0));\n\n/* Moves iterator to the next line point */\n#define CV_NEXT_LINE_POINT( line_iterator )                     \\\n{                                                               \\\n    int _line_iterator_mask = (line_iterator).err < 0 ? -1 : 0; \\\n    (line_iterator).err += (line_iterator).minus_delta +        \\\n        ((line_iterator).plus_delta & _line_iterator_mask);     \\\n    (line_iterator).ptr += (line_iterator).minus_step +         \\\n        ((line_iterator).plus_step & _line_iterator_mask);      \\\n}\n\n\n/* basic font types */\n#define CV_FONT_HERSHEY_SIMPLEX         0\n#define CV_FONT_HERSHEY_PLAIN           1\n#define CV_FONT_HERSHEY_DUPLEX          2\n#define CV_FONT_HERSHEY_COMPLEX         3\n#define CV_FONT_HERSHEY_TRIPLEX         4\n#define CV_FONT_HERSHEY_COMPLEX_SMALL   5\n#define CV_FONT_HERSHEY_SCRIPT_SIMPLEX  6\n#define CV_FONT_HERSHEY_SCRIPT_COMPLEX  7\n\n/* font flags */\n#define CV_FONT_ITALIC                 16\n\n#define CV_FONT_VECTOR0    CV_FONT_HERSHEY_SIMPLEX\n\n\n/* Font structure */\ntypedef struct CvFont\n{\n  const char* nameFont;   //Qt:nameFont\n  CvScalar color;       //Qt:ColorFont -> cvScalar(blue_component, green_component, red\\_component[, alpha_component])\n    int         font_face;    //Qt: bool italic         /* =CV_FONT_* */\n    const int*  ascii;      /* font data and metrics */\n    const int*  greek;\n    const int*  cyrillic;\n    float       hscale, vscale;\n    float       shear;      /* slope coefficient: 0 - normal, >0 - italic */\n    int         thickness;    //Qt: weight               /* letters thickness */\n    float       dx;       /* horizontal interval between letters */\n    int         line_type;    //Qt: PointSize\n}\nCvFont;\n\n/* Initializes font structure used further in cvPutText */\nCVAPI(void)  cvInitFont( CvFont* font, int font_face,\n                         double hscale, double vscale,\n                         double shear CV_DEFAULT(0),\n                         int thickness CV_DEFAULT(1),\n                         int line_type CV_DEFAULT(8));\n\nCV_INLINE CvFont cvFont( double scale, int thickness CV_DEFAULT(1) )\n{\n    CvFont font;\n    cvInitFont( &font, CV_FONT_HERSHEY_PLAIN, scale, scale, 0, thickness, CV_AA );\n    return font;\n}\n\n/* Renders text stroke with specified font and color at specified location.\n   CvFont should be initialized with cvInitFont */\nCVAPI(void)  cvPutText( CvArr* img, const char* text, CvPoint org,\n                        const CvFont* font, CvScalar color );\n\n/* Calculates bounding box of text stroke (useful for alignment) */\nCVAPI(void)  cvGetTextSize( const char* text_string, const CvFont* font,\n                            CvSize* text_size, int* baseline );\n\n\n\n/* Unpacks color value, if arrtype is CV_8UC?, <color> is treated as\n   packed color value, otherwise the first channels (depending on arrtype)\n   of destination scalar are set to the same value = <color> */\nCVAPI(CvScalar)  cvColorToScalar( double packed_color, int arrtype );\n\n/* Returns the polygon points which make up the given ellipse.  The ellipse is define by\n   the box of size 'axes' rotated 'angle' around the 'center'.  A partial sweep\n   of the ellipse arc can be done by spcifying arc_start and arc_end to be something\n   other than 0 and 360, respectively.  The input array 'pts' must be large enough to\n   hold the result.  The total number of points stored into 'pts' is returned by this\n   function. */\nCVAPI(int) cvEllipse2Poly( CvPoint center, CvSize axes,\n                 int angle, int arc_start, int arc_end, CvPoint * pts, int delta );\n\n/* Draws contour outlines or filled interiors on the image */\nCVAPI(void)  cvDrawContours( CvArr *img, CvSeq* contour,\n                             CvScalar external_color, CvScalar hole_color,\n                             int max_level, int thickness CV_DEFAULT(1),\n                             int line_type CV_DEFAULT(8),\n                             CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/* Does look-up transformation. Elements of the source array\n   (that should be 8uC1 or 8sC1) are used as indexes in lutarr 256-element table */\nCVAPI(void) cvLUT( const CvArr* src, CvArr* dst, const CvArr* lut );\n\n\n/******************* Iteration through the sequence tree *****************/\ntypedef struct CvTreeNodeIterator\n{\n    const void* node;\n    int level;\n    int max_level;\n}\nCvTreeNodeIterator;\n\nCVAPI(void) cvInitTreeNodeIterator( CvTreeNodeIterator* tree_iterator,\n                                   const void* first, int max_level );\nCVAPI(void*) cvNextTreeNode( CvTreeNodeIterator* tree_iterator );\nCVAPI(void*) cvPrevTreeNode( CvTreeNodeIterator* tree_iterator );\n\n/* Inserts sequence into tree with specified \"parent\" sequence.\n   If parent is equal to frame (e.g. the most external contour),\n   then added contour will have null pointer to parent. */\nCVAPI(void) cvInsertNodeIntoTree( void* node, void* parent, void* frame );\n\n/* Removes contour from tree (together with the contour children). */\nCVAPI(void) cvRemoveNodeFromTree( void* node, void* frame );\n\n/* Gathers pointers to all the sequences,\n   accessible from the <first>, to the single sequence */\nCVAPI(CvSeq*) cvTreeToNodeSeq( const void* first, int header_size,\n                              CvMemStorage* storage );\n\n/* The function implements the K-means algorithm for clustering an array of sample\n   vectors in a specified number of classes */\n#define CV_KMEANS_USE_INITIAL_LABELS    1\nCVAPI(int) cvKMeans2( const CvArr* samples, int cluster_count, CvArr* labels,\n                      CvTermCriteria termcrit, int attempts CV_DEFAULT(1),\n                      CvRNG* rng CV_DEFAULT(0), int flags CV_DEFAULT(0),\n                      CvArr* _centers CV_DEFAULT(0), double* compactness CV_DEFAULT(0) );\n\n/****************************************************************************************\\\n*                                    System functions                                    *\n\\****************************************************************************************/\n\n/* Add the function pointers table with associated information to the IPP primitives list */\nCVAPI(int)  cvRegisterModule( const CvModuleInfo* module_info );\n\n/* Loads optimized functions from IPP, MKL etc. or switches back to pure C code */\nCVAPI(int)  cvUseOptimized( int on_off );\n\n/* Retrieves information about the registered modules and loaded optimized plugins */\nCVAPI(void)  cvGetModuleInfo( const char* module_name,\n                              const char** version,\n                              const char** loaded_addon_plugins );\n\ntypedef void* (CV_CDECL *CvAllocFunc)(size_t size, void* userdata);\ntypedef int (CV_CDECL *CvFreeFunc)(void* pptr, void* userdata);\n\n/* Set user-defined memory managment functions (substitutors for malloc and free) that\n   will be called by cvAlloc, cvFree and higher-level functions (e.g. cvCreateImage) */\nCVAPI(void) cvSetMemoryManager( CvAllocFunc alloc_func CV_DEFAULT(NULL),\n                               CvFreeFunc free_func CV_DEFAULT(NULL),\n                               void* userdata CV_DEFAULT(NULL));\n\n\ntypedef IplImage* (CV_STDCALL* Cv_iplCreateImageHeader)\n                            (int,int,int,char*,char*,int,int,int,int,int,\n                            IplROI*,IplImage*,void*,IplTileInfo*);\ntypedef void (CV_STDCALL* Cv_iplAllocateImageData)(IplImage*,int,int);\ntypedef void (CV_STDCALL* Cv_iplDeallocate)(IplImage*,int);\ntypedef IplROI* (CV_STDCALL* Cv_iplCreateROI)(int,int,int,int,int);\ntypedef IplImage* (CV_STDCALL* Cv_iplCloneImage)(const IplImage*);\n\n/* Makes OpenCV use IPL functions for IplImage allocation/deallocation */\nCVAPI(void) cvSetIPLAllocators( Cv_iplCreateImageHeader create_header,\n                               Cv_iplAllocateImageData allocate_data,\n                               Cv_iplDeallocate deallocate,\n                               Cv_iplCreateROI create_roi,\n                               Cv_iplCloneImage clone_image );\n\n#define CV_TURN_ON_IPL_COMPATIBILITY()                                  \\\n    cvSetIPLAllocators( iplCreateImageHeader, iplAllocateImage,         \\\n                        iplDeallocate, iplCreateROI, iplCloneImage )\n\n/****************************************************************************************\\\n*                                    Data Persistence                                    *\n\\****************************************************************************************/\n\n/********************************** High-level functions ********************************/\n\n/* opens existing or creates new file storage */\nCVAPI(CvFileStorage*)  cvOpenFileStorage( const char* filename, CvMemStorage* memstorage,\n                                          int flags, const char* encoding CV_DEFAULT(NULL) );\n\n/* closes file storage and deallocates buffers */\nCVAPI(void) cvReleaseFileStorage( CvFileStorage** fs );\n\n/* returns attribute value or 0 (NULL) if there is no such attribute */\nCVAPI(const char*) cvAttrValue( const CvAttrList* attr, const char* attr_name );\n\n/* starts writing compound structure (map or sequence) */\nCVAPI(void) cvStartWriteStruct( CvFileStorage* fs, const char* name,\n                                int struct_flags, const char* type_name CV_DEFAULT(NULL),\n                                CvAttrList attributes CV_DEFAULT(cvAttrList()));\n\n/* finishes writing compound structure */\nCVAPI(void) cvEndWriteStruct( CvFileStorage* fs );\n\n/* writes an integer */\nCVAPI(void) cvWriteInt( CvFileStorage* fs, const char* name, int value );\n\n/* writes a floating-point number */\nCVAPI(void) cvWriteReal( CvFileStorage* fs, const char* name, double value );\n\n/* writes a string */\nCVAPI(void) cvWriteString( CvFileStorage* fs, const char* name,\n                           const char* str, int quote CV_DEFAULT(0) );\n\n/* writes a comment */\nCVAPI(void) cvWriteComment( CvFileStorage* fs, const char* comment,\n                            int eol_comment );\n\n/* writes instance of a standard type (matrix, image, sequence, graph etc.)\n   or user-defined type */\nCVAPI(void) cvWrite( CvFileStorage* fs, const char* name, const void* ptr,\n                         CvAttrList attributes CV_DEFAULT(cvAttrList()));\n\n/* starts the next stream */\nCVAPI(void) cvStartNextStream( CvFileStorage* fs );\n\n/* helper function: writes multiple integer or floating-point numbers */\nCVAPI(void) cvWriteRawData( CvFileStorage* fs, const void* src,\n                                int len, const char* dt );\n\n/* returns the hash entry corresponding to the specified literal key string or 0\n   if there is no such a key in the storage */\nCVAPI(CvStringHashNode*) cvGetHashedKey( CvFileStorage* fs, const char* name,\n                                        int len CV_DEFAULT(-1),\n                                        int create_missing CV_DEFAULT(0));\n\n/* returns file node with the specified key within the specified map\n   (collection of named nodes) */\nCVAPI(CvFileNode*) cvGetRootFileNode( const CvFileStorage* fs,\n                                     int stream_index CV_DEFAULT(0) );\n\n/* returns file node with the specified key within the specified map\n   (collection of named nodes) */\nCVAPI(CvFileNode*) cvGetFileNode( CvFileStorage* fs, CvFileNode* map,\n                                 const CvStringHashNode* key,\n                                 int create_missing CV_DEFAULT(0) );\n\n/* this is a slower version of cvGetFileNode that takes the key as a literal string */\nCVAPI(CvFileNode*) cvGetFileNodeByName( const CvFileStorage* fs,\n                                       const CvFileNode* map,\n                                       const char* name );\n\nCV_INLINE int cvReadInt( const CvFileNode* node, int default_value CV_DEFAULT(0) )\n{\n    return !node ? default_value :\n        CV_NODE_IS_INT(node->tag) ? node->data.i :\n        CV_NODE_IS_REAL(node->tag) ? cvRound(node->data.f) : 0x7fffffff;\n}\n\n\nCV_INLINE int cvReadIntByName( const CvFileStorage* fs, const CvFileNode* map,\n                         const char* name, int default_value CV_DEFAULT(0) )\n{\n    return cvReadInt( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n\nCV_INLINE double cvReadReal( const CvFileNode* node, double default_value CV_DEFAULT(0.) )\n{\n    return !node ? default_value :\n        CV_NODE_IS_INT(node->tag) ? (double)node->data.i :\n        CV_NODE_IS_REAL(node->tag) ? node->data.f : 1e300;\n}\n\n\nCV_INLINE double cvReadRealByName( const CvFileStorage* fs, const CvFileNode* map,\n                        const char* name, double default_value CV_DEFAULT(0.) )\n{\n    return cvReadReal( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n\nCV_INLINE const char* cvReadString( const CvFileNode* node,\n                        const char* default_value CV_DEFAULT(NULL) )\n{\n    return !node ? default_value : CV_NODE_IS_STRING(node->tag) ? node->data.str.ptr : 0;\n}\n\n\nCV_INLINE const char* cvReadStringByName( const CvFileStorage* fs, const CvFileNode* map,\n                        const char* name, const char* default_value CV_DEFAULT(NULL) )\n{\n    return cvReadString( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n\n/* decodes standard or user-defined object and returns it */\nCVAPI(void*) cvRead( CvFileStorage* fs, CvFileNode* node,\n                        CvAttrList* attributes CV_DEFAULT(NULL));\n\n/* decodes standard or user-defined object and returns it */\nCV_INLINE void* cvReadByName( CvFileStorage* fs, const CvFileNode* map,\n                              const char* name, CvAttrList* attributes CV_DEFAULT(NULL) )\n{\n    return cvRead( fs, cvGetFileNodeByName( fs, map, name ), attributes );\n}\n\n\n/* starts reading data from sequence or scalar numeric node */\nCVAPI(void) cvStartReadRawData( const CvFileStorage* fs, const CvFileNode* src,\n                               CvSeqReader* reader );\n\n/* reads multiple numbers and stores them to array */\nCVAPI(void) cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader,\n                               int count, void* dst, const char* dt );\n\n/* combination of two previous functions for easier reading of whole sequences */\nCVAPI(void) cvReadRawData( const CvFileStorage* fs, const CvFileNode* src,\n                          void* dst, const char* dt );\n\n/* writes a copy of file node to file storage */\nCVAPI(void) cvWriteFileNode( CvFileStorage* fs, const char* new_node_name,\n                            const CvFileNode* node, int embed );\n\n/* returns name of file node */\nCVAPI(const char*) cvGetFileNodeName( const CvFileNode* node );\n\n/*********************************** Adding own types ***********************************/\n\nCVAPI(void) cvRegisterType( const CvTypeInfo* info );\nCVAPI(void) cvUnregisterType( const char* type_name );\nCVAPI(CvTypeInfo*) cvFirstType(void);\nCVAPI(CvTypeInfo*) cvFindType( const char* type_name );\nCVAPI(CvTypeInfo*) cvTypeOf( const void* struct_ptr );\n\n/* universal functions */\nCVAPI(void) cvRelease( void** struct_ptr );\nCVAPI(void*) cvClone( const void* struct_ptr );\n\n/* simple API for reading/writing data */\nCVAPI(void) cvSave( const char* filename, const void* struct_ptr,\n                    const char* name CV_DEFAULT(NULL),\n                    const char* comment CV_DEFAULT(NULL),\n                    CvAttrList attributes CV_DEFAULT(cvAttrList()));\nCVAPI(void*) cvLoad( const char* filename,\n                     CvMemStorage* memstorage CV_DEFAULT(NULL),\n                     const char* name CV_DEFAULT(NULL),\n                     const char** real_name CV_DEFAULT(NULL) );\n\n/*********************************** Measuring Execution Time ***************************/\n\n/* helper functions for RNG initialization and accurate time measurement:\n   uses internal clock counter on x86 */\nCVAPI(int64)  cvGetTickCount( void );\nCVAPI(double) cvGetTickFrequency( void );\n\n/*********************************** CPU capabilities ***********************************/\n\n#define CV_CPU_NONE    0\n#define CV_CPU_MMX     1\n#define CV_CPU_SSE     2\n#define CV_CPU_SSE2    3\n#define CV_CPU_SSE3    4\n#define CV_CPU_SSSE3   5\n#define CV_CPU_SSE4_1  6\n#define CV_CPU_SSE4_2  7\n#define CV_CPU_POPCNT  8\n#define CV_CPU_AVX    10\n#define CV_HARDWARE_MAX_FEATURE 255\n\nCVAPI(int) cvCheckHardwareSupport(int feature);\n\n/*********************************** Multi-Threading ************************************/\n\n/* retrieve/set the number of threads used in OpenMP implementations */\nCVAPI(int)  cvGetNumThreads( void );\nCVAPI(void) cvSetNumThreads( int threads CV_DEFAULT(0) );\n/* get index of the thread being executed */\nCVAPI(int)  cvGetThreadNum( void );\n\n\n/********************************** Error Handling **************************************/\n\n/* Get current OpenCV error status */\nCVAPI(int) cvGetErrStatus( void );\n\n/* Sets error status silently */\nCVAPI(void) cvSetErrStatus( int status );\n\n#define CV_ErrModeLeaf     0   /* Print error and exit program */\n#define CV_ErrModeParent   1   /* Print error and continue */\n#define CV_ErrModeSilent   2   /* Don't print and continue */\n\n/* Retrives current error processing mode */\nCVAPI(int)  cvGetErrMode( void );\n\n/* Sets error processing mode, returns previously used mode */\nCVAPI(int) cvSetErrMode( int mode );\n\n/* Sets error status and performs some additonal actions (displaying message box,\n writing message to stderr, terminating application etc.)\n depending on the current error mode */\nCVAPI(void) cvError( int status, const char* func_name,\n                    const char* err_msg, const char* file_name, int line );\n\n/* Retrieves textual description of the error given its code */\nCVAPI(const char*) cvErrorStr( int status );\n\n/* Retrieves detailed information about the last error occured */\nCVAPI(int) cvGetErrInfo( const char** errcode_desc, const char** description,\n                        const char** filename, int* line );\n\n/* Maps IPP error codes to the counterparts from OpenCV */\nCVAPI(int) cvErrorFromIppStatus( int ipp_status );\n\ntypedef int (CV_CDECL *CvErrorCallback)( int status, const char* func_name,\n                                        const char* err_msg, const char* file_name, int line, void* userdata );\n\n/* Assigns a new error-handling function */\nCVAPI(CvErrorCallback) cvRedirectError( CvErrorCallback error_handler,\n                                       void* userdata CV_DEFAULT(NULL),\n                                       void** prev_userdata CV_DEFAULT(NULL) );\n\n/*\n Output to:\n cvNulDevReport - nothing\n cvStdErrReport - console(fprintf(stderr,...))\n cvGuiBoxReport - MessageBox(WIN32)\n */\nCVAPI(int) cvNulDevReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\nCVAPI(int) cvStdErrReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\nCVAPI(int) cvGuiBoxReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\n#define OPENCV_ERROR(status,func,context)                           \\\ncvError((status),(func),(context),__FILE__,__LINE__)\n\n#define OPENCV_ERRCHK(func,context)                                 \\\n{if (cvGetErrStatus() >= 0)                         \\\n{OPENCV_ERROR(CV_StsBackTrace,(func),(context));}}\n\n#define OPENCV_ASSERT(expr,func,context)                            \\\n{if (! (expr))                                      \\\n{OPENCV_ERROR(CV_StsInternal,(func),(context));}}\n\n#define OPENCV_RSTERR() (cvSetErrStatus(CV_StsOk))\n\n#define OPENCV_CALL( Func )                                         \\\n{                                                                   \\\nFunc;                                                           \\\n}\n\n\n/* CV_FUNCNAME macro defines icvFuncName constant which is used by CV_ERROR macro */\n#ifdef CV_NO_FUNC_NAMES\n#define CV_FUNCNAME( Name )\n#define cvFuncName \"\"\n#else\n#define CV_FUNCNAME( Name )  \\\nstatic char cvFuncName[] = Name\n#endif\n\n\n/*\n CV_ERROR macro unconditionally raises error with passed code and message.\n After raising error, control will be transferred to the exit label.\n */\n#define CV_ERROR( Code, Msg )                                       \\\n{                                                                   \\\n    cvError( (Code), cvFuncName, Msg, __FILE__, __LINE__ );        \\\n    __CV_EXIT__;                                                   \\\n}\n\n/* Simplified form of CV_ERROR */\n#define CV_ERROR_FROM_CODE( code )   \\\n    CV_ERROR( code, \"\" )\n\n/*\n CV_CHECK macro checks error status after CV (or IPL)\n function call. If error detected, control will be transferred to the exit\n label.\n */\n#define CV_CHECK()                                                  \\\n{                                                                   \\\n    if( cvGetErrStatus() < 0 )                                      \\\n        CV_ERROR( CV_StsBackTrace, \"Inner function failed.\" );      \\\n}\n\n\n/*\n CV_CALL macro calls CV (or IPL) function, checks error status and\n signals a error if the function failed. Useful in \"parent node\"\n error procesing mode\n */\n#define CV_CALL( Func )                                             \\\n{                                                                   \\\n    Func;                                                           \\\n    CV_CHECK();                                                     \\\n}\n\n\n/* Runtime assertion macro */\n#define CV_ASSERT( Condition )                                          \\\n{                                                                       \\\n    if( !(Condition) )                                                  \\\n        CV_ERROR( CV_StsInternal, \"Assertion: \" #Condition \" failed\" ); \\\n}\n\n#define __CV_BEGIN__       {\n#define __CV_END__         goto exit; exit: ; }\n#define __CV_EXIT__        goto exit\n\n#ifdef __cplusplus\n}\n\n// classes for automatic module/RTTI data registration/unregistration\nstruct CV_EXPORTS CvModule\n{\n    CvModule( CvModuleInfo* _info );\n    ~CvModule();\n    CvModuleInfo* info;\n\n    static CvModuleInfo* first;\n    static CvModuleInfo* last;\n};\n\nstruct CV_EXPORTS CvType\n{\n    CvType( const char* type_name,\n            CvIsInstanceFunc is_instance, CvReleaseFunc release=0,\n            CvReadFunc read=0, CvWriteFunc write=0, CvCloneFunc clone=0 );\n    ~CvType();\n    CvTypeInfo* info;\n\n    static CvTypeInfo* first;\n    static CvTypeInfo* last;\n};\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/cuda_devptrs.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_DEVPTRS_HPP__\n#define __OPENCV_CORE_DEVPTRS_HPP__\n\n#ifdef __cplusplus\n\n#ifdef __CUDACC__\n    #define __CV_GPU_HOST_DEVICE__ __host__ __device__ __forceinline__\n#else\n    #define __CV_GPU_HOST_DEVICE__\n#endif\n\nnamespace cv\n{\n    namespace gpu\n    {\n        // Simple lightweight structures that encapsulates information about an image on device.\n        // It is intended to pass to nvcc-compiled code. GpuMat depends on headers that nvcc can't compile\n\n        template <bool expr> struct StaticAssert;\n        template <> struct StaticAssert<true> {static __CV_GPU_HOST_DEVICE__ void check(){}};\n\n        template<typename T> struct DevPtr\n        {\n            typedef T elem_type;\n            typedef int index_type;\n\n            enum { elem_size = sizeof(elem_type) };\n\n            T* data;\n\n            __CV_GPU_HOST_DEVICE__ DevPtr() : data(0) {}\n            __CV_GPU_HOST_DEVICE__ DevPtr(T* data_) : data(data_) {}\n\n            __CV_GPU_HOST_DEVICE__ size_t elemSize() const { return elem_size; }\n            __CV_GPU_HOST_DEVICE__ operator       T*()       { return data; }\n            __CV_GPU_HOST_DEVICE__ operator const T*() const { return data; }\n        };\n\n        template<typename T> struct PtrSz : public DevPtr<T>\n        {\n            __CV_GPU_HOST_DEVICE__ PtrSz() : size(0) {}\n            __CV_GPU_HOST_DEVICE__ PtrSz(T* data_, size_t size_) : DevPtr<T>(data_), size(size_) {}\n\n            size_t size;\n        };\n\n        template<typename T> struct PtrStep : public DevPtr<T>\n        {\n            __CV_GPU_HOST_DEVICE__ PtrStep() : step(0) {}\n            __CV_GPU_HOST_DEVICE__ PtrStep(T* data_, size_t step_) : DevPtr<T>(data_), step(step_) {}\n\n            /** \\brief stride between two consecutive rows in bytes. Step is stored always and everywhere in bytes!!! */\n            size_t step;\n\n            __CV_GPU_HOST_DEVICE__       T* ptr(int y = 0)       { return (      T*)( (      char*)DevPtr<T>::data + y * step); }\n            __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return (const T*)( (const char*)DevPtr<T>::data + y * step); }\n\n            __CV_GPU_HOST_DEVICE__       T& operator ()(int y, int x)       { return ptr(y)[x]; }\n            __CV_GPU_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; }\n        };\n\n        template <typename T> struct PtrStepSz : public PtrStep<T>\n        {\n            __CV_GPU_HOST_DEVICE__ PtrStepSz() : cols(0), rows(0) {}\n            __CV_GPU_HOST_DEVICE__ PtrStepSz(int rows_, int cols_, T* data_, size_t step_)\n                : PtrStep<T>(data_, step_), cols(cols_), rows(rows_) {}\n\n            template <typename U>\n            explicit PtrStepSz(const PtrStepSz<U>& d) : PtrStep<T>((T*)d.data, d.step), cols(d.cols), rows(d.rows){}\n\n            int cols;\n            int rows;\n        };\n\n        typedef PtrStepSz<unsigned char> PtrStepSzb;\n        typedef PtrStepSz<float> PtrStepSzf;\n        typedef PtrStepSz<int> PtrStepSzi;\n\n        typedef PtrStep<unsigned char> PtrStepb;\n        typedef PtrStep<float> PtrStepf;\n        typedef PtrStep<int> PtrStepi;\n\n\n#if defined __GNUC__\n    #define __CV_GPU_DEPR_BEFORE__\n    #define __CV_GPU_DEPR_AFTER__ __attribute__ ((deprecated))\n#elif defined(__MSVC__) //|| defined(__CUDACC__)\n    #pragma deprecated(DevMem2D_)\n    #define __CV_GPU_DEPR_BEFORE__ __declspec(deprecated)\n    #define __CV_GPU_DEPR_AFTER__\n#else\n    #define __CV_GPU_DEPR_BEFORE__\n    #define __CV_GPU_DEPR_AFTER__\n#endif\n\n        template <typename T> struct __CV_GPU_DEPR_BEFORE__ DevMem2D_ : public PtrStepSz<T>\n        {\n            DevMem2D_() {}\n            DevMem2D_(int rows_, int cols_, T* data_, size_t step_) : PtrStepSz<T>(rows_, cols_, data_, step_) {}\n\n            template <typename U>\n            explicit __CV_GPU_DEPR_BEFORE__ DevMem2D_(const DevMem2D_<U>& d) : PtrStepSz<T>(d.rows, d.cols, (T*)d.data, d.step) {}\n        } __CV_GPU_DEPR_AFTER__ ;\n\n        typedef DevMem2D_<unsigned char> DevMem2Db;\n        typedef DevMem2Db DevMem2D;\n        typedef DevMem2D_<float> DevMem2Df;\n        typedef DevMem2D_<int> DevMem2Di;\n\n        template<typename T> struct PtrElemStep_ : public PtrStep<T>\n        {\n            PtrElemStep_(const DevMem2D_<T>& mem) : PtrStep<T>(mem.data, mem.step)\n            {\n                StaticAssert<256 % sizeof(T) == 0>::check();\n\n                PtrStep<T>::step /= PtrStep<T>::elem_size;\n            }\n            __CV_GPU_HOST_DEVICE__ T* ptr(int y = 0) { return PtrStep<T>::data + y * PtrStep<T>::step; }\n            __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return PtrStep<T>::data + y * PtrStep<T>::step; }\n\n            __CV_GPU_HOST_DEVICE__ T& operator ()(int y, int x) { return ptr(y)[x]; }\n            __CV_GPU_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; }\n        };\n\n        template<typename T> struct PtrStep_ : public PtrStep<T>\n        {\n            PtrStep_() {}\n            PtrStep_(const DevMem2D_<T>& mem) : PtrStep<T>(mem.data, mem.step) {}\n        };\n\n        typedef PtrElemStep_<unsigned char> PtrElemStep;\n        typedef PtrElemStep_<float> PtrElemStepf;\n        typedef PtrElemStep_<int> PtrElemStepi;\n\n//#undef __CV_GPU_DEPR_BEFORE__\n//#undef __CV_GPU_DEPR_AFTER__\n\n        namespace device\n        {\n            using cv::gpu::PtrSz;\n            using cv::gpu::PtrStep;\n            using cv::gpu::PtrStepSz;\n\n            using cv::gpu::PtrStepSzb;\n            using cv::gpu::PtrStepSzf;\n            using cv::gpu::PtrStepSzi;\n\n            using cv::gpu::PtrStepb;\n            using cv::gpu::PtrStepf;\n            using cv::gpu::PtrStepi;\n        }\n    }\n}\n\n#endif // __cplusplus\n\n#endif /* __OPENCV_CORE_DEVPTRS_HPP__ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/devmem2d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#include \"opencv2/core/cuda_devptrs.hpp\"\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/eigen.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_EIGEN_HPP__\n#define __OPENCV_CORE_EIGEN_HPP__\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/core/core.hpp\"\n\n#if defined _MSC_VER && _MSC_VER >= 1200\n#pragma warning( disable: 4714 ) //__forceinline is not inlined\n#pragma warning( disable: 4127 ) //conditional expression is constant\n#pragma warning( disable: 4244 ) //conversion from '__int64' to 'int', possible loss of data\n#endif\n\nnamespace cv\n{\n\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols>\nvoid eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src, Mat& dst )\n{\n    if( !(src.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _src(src.cols(), src.rows(), DataType<_Tp>::type,\n              (void*)src.data(), src.stride()*sizeof(_Tp));\n        transpose(_src, dst);\n    }\n    else\n    {\n        Mat _src(src.rows(), src.cols(), DataType<_Tp>::type,\n                 (void*)src.data(), src.stride()*sizeof(_Tp));\n        _src.copyTo(dst);\n    }\n}\n\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols>\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst )\n{\n    CV_DbgAssert(src.rows == _rows && src.cols == _cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else if( src.cols == src.rows )\n        {\n            src.convertTo(_dst, _dst.type());\n            transpose(_dst, _dst);\n        }\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols>\nvoid cv2eigen( const Matx<_Tp, _rows, _cols>& src,\n               Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst )\n{\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(_cols, _rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(_rows, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\ntemplate<typename _Tp>\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )\n{\n    dst.resize(src.rows, src.cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n             dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else if( src.cols == src.rows )\n        {\n            src.convertTo(_dst, _dst.type());\n            transpose(_dst, _dst);\n        }\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows, int _cols>\nvoid cv2eigen( const Matx<_Tp, _rows, _cols>& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )\n{\n    dst.resize(_rows, _cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(_cols, _rows, DataType<_Tp>::type,\n             dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(_rows, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\ntemplate<typename _Tp>\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst )\n{\n    CV_Assert(src.cols == 1);\n    dst.resize(src.rows);\n\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows>\nvoid cv2eigen( const Matx<_Tp, _rows, 1>& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst )\n{\n    dst.resize(_rows);\n\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(1, _rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(_rows, 1, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.copyTo(_dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n\ntemplate<typename _Tp>\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst )\n{\n    CV_Assert(src.rows == 1);\n    dst.resize(src.cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n//Matx\ntemplate<typename _Tp, int _cols>\nvoid cv2eigen( const Matx<_Tp, 1, _cols>& src,\n               Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst )\n{\n    dst.resize(_cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(_cols, 1, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(1, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/gpumat.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_GPUMAT_HPP__\n#define __OPENCV_GPUMAT_HPP__\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/cuda_devptrs.hpp\"\n\nnamespace cv { namespace gpu\n{\n    //////////////////////////////// Initialization & Info ////////////////////////\n\n    //! This is the only function that do not throw exceptions if the library is compiled without Cuda.\n    CV_EXPORTS int getCudaEnabledDeviceCount();\n\n    //! Functions below throw cv::Expception if the library is compiled without Cuda.\n\n    CV_EXPORTS void setDevice(int device);\n    CV_EXPORTS int getDevice();\n\n    //! Explicitly destroys and cleans up all resources associated with the current device in the current process.\n    //! Any subsequent API call to this device will reinitialize the device.\n    CV_EXPORTS void resetDevice();\n\n    enum FeatureSet\n    {\n        FEATURE_SET_COMPUTE_10 = 10,\n        FEATURE_SET_COMPUTE_11 = 11,\n        FEATURE_SET_COMPUTE_12 = 12,\n        FEATURE_SET_COMPUTE_13 = 13,\n        FEATURE_SET_COMPUTE_20 = 20,\n        FEATURE_SET_COMPUTE_21 = 21,\n        FEATURE_SET_COMPUTE_30 = 30,\n        FEATURE_SET_COMPUTE_35 = 35,\n\n        GLOBAL_ATOMICS = FEATURE_SET_COMPUTE_11,\n        SHARED_ATOMICS = FEATURE_SET_COMPUTE_12,\n        NATIVE_DOUBLE = FEATURE_SET_COMPUTE_13,\n        WARP_SHUFFLE_FUNCTIONS = FEATURE_SET_COMPUTE_30,\n        DYNAMIC_PARALLELISM = FEATURE_SET_COMPUTE_35\n    };\n\n    // Checks whether current device supports the given feature\n    CV_EXPORTS bool deviceSupports(FeatureSet feature_set);\n\n    // Gives information about what GPU archs this OpenCV GPU module was\n    // compiled for\n    class CV_EXPORTS TargetArchs\n    {\n    public:\n        static bool builtWith(FeatureSet feature_set);\n        static bool has(int major, int minor);\n        static bool hasPtx(int major, int minor);\n        static bool hasBin(int major, int minor);\n        static bool hasEqualOrLessPtx(int major, int minor);\n        static bool hasEqualOrGreater(int major, int minor);\n        static bool hasEqualOrGreaterPtx(int major, int minor);\n        static bool hasEqualOrGreaterBin(int major, int minor);\n    private:\n        TargetArchs();\n    };\n\n    // Gives information about the given GPU\n    class CV_EXPORTS DeviceInfo\n    {\n    public:\n        // Creates DeviceInfo object for the current GPU\n        DeviceInfo() : device_id_(getDevice()) { query(); }\n\n        // Creates DeviceInfo object for the given GPU\n        DeviceInfo(int device_id) : device_id_(device_id) { query(); }\n\n        std::string name() const { return name_; }\n\n        // Return compute capability versions\n        int majorVersion() const { return majorVersion_; }\n        int minorVersion() const { return minorVersion_; }\n\n        int multiProcessorCount() const { return multi_processor_count_; }\n\n        size_t sharedMemPerBlock() const;\n\n        void queryMemory(size_t& totalMemory, size_t& freeMemory) const;\n        size_t freeMemory() const;\n        size_t totalMemory() const;\n\n        // Checks whether device supports the given feature\n        bool supports(FeatureSet feature_set) const;\n\n        // Checks whether the GPU module can be run on the given device\n        bool isCompatible() const;\n\n        int deviceID() const { return device_id_; }\n\n    private:\n        void query();\n\n        int device_id_;\n\n        std::string name_;\n        int multi_processor_count_;\n        int majorVersion_;\n        int minorVersion_;\n    };\n\n    CV_EXPORTS void printCudaDeviceInfo(int device);\n    CV_EXPORTS void printShortCudaDeviceInfo(int device);\n\n    //////////////////////////////// GpuMat ///////////////////////////////\n\n    //! Smart pointer for GPU memory with reference counting. Its interface is mostly similar with cv::Mat.\n    class CV_EXPORTS GpuMat\n    {\n    public:\n        //! default constructor\n        GpuMat();\n\n        //! constructs GpuMatrix of the specified size and type (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)\n        GpuMat(int rows, int cols, int type);\n        GpuMat(Size size, int type);\n\n        //! constucts GpuMatrix and fills it with the specified value _s.\n        GpuMat(int rows, int cols, int type, Scalar s);\n        GpuMat(Size size, int type, Scalar s);\n\n        //! copy constructor\n        GpuMat(const GpuMat& m);\n\n        //! constructor for GpuMatrix headers pointing to user-allocated data\n        GpuMat(int rows, int cols, int type, void* data, size_t step = Mat::AUTO_STEP);\n        GpuMat(Size size, int type, void* data, size_t step = Mat::AUTO_STEP);\n\n        //! creates a matrix header for a part of the bigger matrix\n        GpuMat(const GpuMat& m, Range rowRange, Range colRange);\n        GpuMat(const GpuMat& m, Rect roi);\n\n        //! builds GpuMat from Mat. Perfom blocking upload to device.\n        explicit GpuMat(const Mat& m);\n\n        //! destructor - calls release()\n        ~GpuMat();\n\n        //! assignment operators\n        GpuMat& operator = (const GpuMat& m);\n\n        //! pefroms blocking upload data to GpuMat.\n        void upload(const Mat& m);\n\n        //! downloads data from device to host memory. Blocking calls.\n        void download(Mat& m) const;\n\n        //! returns a new GpuMatrix header for the specified row\n        GpuMat row(int y) const;\n        //! returns a new GpuMatrix header for the specified column\n        GpuMat col(int x) const;\n        //! ... for the specified row span\n        GpuMat rowRange(int startrow, int endrow) const;\n        GpuMat rowRange(Range r) const;\n        //! ... for the specified column span\n        GpuMat colRange(int startcol, int endcol) const;\n        GpuMat colRange(Range r) const;\n\n        //! returns deep copy of the GpuMatrix, i.e. the data is copied\n        GpuMat clone() const;\n        //! copies the GpuMatrix content to \"m\".\n        // It calls m.create(this->size(), this->type()).\n        void copyTo(GpuMat& m) const;\n        //! copies those GpuMatrix elements to \"m\" that are marked with non-zero mask elements.\n        void copyTo(GpuMat& m, const GpuMat& mask) const;\n        //! converts GpuMatrix to another datatype with optional scalng. See cvConvertScale.\n        void convertTo(GpuMat& m, int rtype, double alpha = 1, double beta = 0) const;\n\n        void assignTo(GpuMat& m, int type=-1) const;\n\n        //! sets every GpuMatrix element to s\n        GpuMat& operator = (Scalar s);\n        //! sets some of the GpuMatrix elements to s, according to the mask\n        GpuMat& setTo(Scalar s, const GpuMat& mask = GpuMat());\n        //! creates alternative GpuMatrix header for the same data, with different\n        // number of channels and/or different number of rows. see cvReshape.\n        GpuMat reshape(int cn, int rows = 0) const;\n\n        //! allocates new GpuMatrix data unless the GpuMatrix already has specified size and type.\n        // previous data is unreferenced if needed.\n        void create(int rows, int cols, int type);\n        void create(Size size, int type);\n        //! decreases reference counter;\n        // deallocate the data when reference counter reaches 0.\n        void release();\n\n        //! swaps with other smart pointer\n        void swap(GpuMat& mat);\n\n        //! locates GpuMatrix header within a parent GpuMatrix. See below\n        void locateROI(Size& wholeSize, Point& ofs) const;\n        //! moves/resizes the current GpuMatrix ROI inside the parent GpuMatrix.\n        GpuMat& adjustROI(int dtop, int dbottom, int dleft, int dright);\n        //! extracts a rectangular sub-GpuMatrix\n        // (this is a generalized form of row, rowRange etc.)\n        GpuMat operator()(Range rowRange, Range colRange) const;\n        GpuMat operator()(Rect roi) const;\n\n        //! returns true iff the GpuMatrix data is continuous\n        // (i.e. when there are no gaps between successive rows).\n        // similar to CV_IS_GpuMat_CONT(cvGpuMat->type)\n        bool isContinuous() const;\n        //! returns element size in bytes,\n        // similar to CV_ELEM_SIZE(cvMat->type)\n        size_t elemSize() const;\n        //! returns the size of element channel in bytes.\n        size_t elemSize1() const;\n        //! returns element type, similar to CV_MAT_TYPE(cvMat->type)\n        int type() const;\n        //! returns element type, similar to CV_MAT_DEPTH(cvMat->type)\n        int depth() const;\n        //! returns element type, similar to CV_MAT_CN(cvMat->type)\n        int channels() const;\n        //! returns step/elemSize1()\n        size_t step1() const;\n        //! returns GpuMatrix size:\n        // width == number of columns, height == number of rows\n        Size size() const;\n        //! returns true if GpuMatrix data is NULL\n        bool empty() const;\n\n        //! returns pointer to y-th row\n        uchar* ptr(int y = 0);\n        const uchar* ptr(int y = 0) const;\n\n        //! template version of the above method\n        template<typename _Tp> _Tp* ptr(int y = 0);\n        template<typename _Tp> const _Tp* ptr(int y = 0) const;\n\n        template <typename _Tp> operator PtrStepSz<_Tp>() const;\n        template <typename _Tp> operator PtrStep<_Tp>() const;\n\n        // Deprecated function\n        __CV_GPU_DEPR_BEFORE__ template <typename _Tp> operator DevMem2D_<_Tp>() const __CV_GPU_DEPR_AFTER__;\n        __CV_GPU_DEPR_BEFORE__ template <typename _Tp> operator PtrStep_<_Tp>() const __CV_GPU_DEPR_AFTER__;\n        #undef __CV_GPU_DEPR_BEFORE__\n        #undef __CV_GPU_DEPR_AFTER__\n\n        /*! includes several bit-fields:\n        - the magic signature\n        - continuity flag\n        - depth\n        - number of channels\n        */\n        int flags;\n\n        //! the number of rows and columns\n        int rows, cols;\n\n        //! a distance between successive rows in bytes; includes the gap if any\n        size_t step;\n\n        //! pointer to the data\n        uchar* data;\n\n        //! pointer to the reference counter;\n        // when GpuMatrix points to user-allocated data, the pointer is NULL\n        int* refcount;\n\n        //! helper fields used in locateROI and adjustROI\n        uchar* datastart;\n        uchar* dataend;\n    };\n\n    //! Creates continuous GPU matrix\n    CV_EXPORTS void createContinuous(int rows, int cols, int type, GpuMat& m);\n    CV_EXPORTS GpuMat createContinuous(int rows, int cols, int type);\n    CV_EXPORTS void createContinuous(Size size, int type, GpuMat& m);\n    CV_EXPORTS GpuMat createContinuous(Size size, int type);\n\n    //! Ensures that size of the given matrix is not less than (rows, cols) size\n    //! and matrix type is match specified one too\n    CV_EXPORTS void ensureSizeIsEnough(int rows, int cols, int type, GpuMat& m);\n    CV_EXPORTS void ensureSizeIsEnough(Size size, int type, GpuMat& m);\n\n    CV_EXPORTS GpuMat allocMatFromBuf(int rows, int cols, int type, GpuMat &mat);\n\n    ////////////////////////////////////////////////////////////////////////\n    // Error handling\n\n    CV_EXPORTS void error(const char* error_string, const char* file, const int line, const char* func = \"\");\n\n    ////////////////////////////////////////////////////////////////////////\n    ////////////////////////////////////////////////////////////////////////\n    ////////////////////////////////////////////////////////////////////////\n\n    inline GpuMat::GpuMat()\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n    }\n\n    inline GpuMat::GpuMat(int rows_, int cols_, int type_)\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n        if (rows_ > 0 && cols_ > 0)\n            create(rows_, cols_, type_);\n    }\n\n    inline GpuMat::GpuMat(Size size_, int type_)\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n        if (size_.height > 0 && size_.width > 0)\n            create(size_.height, size_.width, type_);\n    }\n\n    inline GpuMat::GpuMat(int rows_, int cols_, int type_, Scalar s_)\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n        if (rows_ > 0 && cols_ > 0)\n        {\n            create(rows_, cols_, type_);\n            setTo(s_);\n        }\n    }\n\n    inline GpuMat::GpuMat(Size size_, int type_, Scalar s_)\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n        if (size_.height > 0 && size_.width > 0)\n        {\n            create(size_.height, size_.width, type_);\n            setTo(s_);\n        }\n    }\n\n    inline GpuMat::~GpuMat()\n    {\n        release();\n    }\n\n    inline GpuMat GpuMat::clone() const\n    {\n        GpuMat m;\n        copyTo(m);\n        return m;\n    }\n\n    inline void GpuMat::assignTo(GpuMat& m, int _type) const\n    {\n        if (_type < 0)\n            m = *this;\n        else\n            convertTo(m, _type);\n    }\n\n    inline size_t GpuMat::step1() const\n    {\n        return step / elemSize1();\n    }\n\n    inline bool GpuMat::empty() const\n    {\n        return data == 0;\n    }\n\n    template<typename _Tp> inline _Tp* GpuMat::ptr(int y)\n    {\n        return (_Tp*)ptr(y);\n    }\n\n    template<typename _Tp> inline const _Tp* GpuMat::ptr(int y) const\n    {\n        return (const _Tp*)ptr(y);\n    }\n\n    inline void swap(GpuMat& a, GpuMat& b)\n    {\n        a.swap(b);\n    }\n\n    inline GpuMat GpuMat::row(int y) const\n    {\n        return GpuMat(*this, Range(y, y+1), Range::all());\n    }\n\n    inline GpuMat GpuMat::col(int x) const\n    {\n        return GpuMat(*this, Range::all(), Range(x, x+1));\n    }\n\n    inline GpuMat GpuMat::rowRange(int startrow, int endrow) const\n    {\n        return GpuMat(*this, Range(startrow, endrow), Range::all());\n    }\n\n    inline GpuMat GpuMat::rowRange(Range r) const\n    {\n        return GpuMat(*this, r, Range::all());\n    }\n\n    inline GpuMat GpuMat::colRange(int startcol, int endcol) const\n    {\n        return GpuMat(*this, Range::all(), Range(startcol, endcol));\n    }\n\n    inline GpuMat GpuMat::colRange(Range r) const\n    {\n        return GpuMat(*this, Range::all(), r);\n    }\n\n    inline void GpuMat::create(Size size_, int type_)\n    {\n        create(size_.height, size_.width, type_);\n    }\n\n    inline GpuMat GpuMat::operator()(Range _rowRange, Range _colRange) const\n    {\n        return GpuMat(*this, _rowRange, _colRange);\n    }\n\n    inline GpuMat GpuMat::operator()(Rect roi) const\n    {\n        return GpuMat(*this, roi);\n    }\n\n    inline bool GpuMat::isContinuous() const\n    {\n        return (flags & Mat::CONTINUOUS_FLAG) != 0;\n    }\n\n    inline size_t GpuMat::elemSize() const\n    {\n        return CV_ELEM_SIZE(flags);\n    }\n\n    inline size_t GpuMat::elemSize1() const\n    {\n        return CV_ELEM_SIZE1(flags);\n    }\n\n    inline int GpuMat::type() const\n    {\n        return CV_MAT_TYPE(flags);\n    }\n\n    inline int GpuMat::depth() const\n    {\n        return CV_MAT_DEPTH(flags);\n    }\n\n    inline int GpuMat::channels() const\n    {\n        return CV_MAT_CN(flags);\n    }\n\n    inline Size GpuMat::size() const\n    {\n        return Size(cols, rows);\n    }\n\n    inline uchar* GpuMat::ptr(int y)\n    {\n        CV_DbgAssert((unsigned)y < (unsigned)rows);\n        return data + step * y;\n    }\n\n    inline const uchar* GpuMat::ptr(int y) const\n    {\n        CV_DbgAssert((unsigned)y < (unsigned)rows);\n        return data + step * y;\n    }\n\n    inline GpuMat& GpuMat::operator = (Scalar s)\n    {\n        setTo(s);\n        return *this;\n    }\n\n    template <class T> inline GpuMat::operator PtrStepSz<T>() const\n    {\n        return PtrStepSz<T>(rows, cols, (T*)data, step);\n    }\n\n    template <class T> inline GpuMat::operator PtrStep<T>() const\n    {\n        return PtrStep<T>((T*)data, step);\n    }\n\n    template <class T> inline GpuMat::operator DevMem2D_<T>() const\n    {\n        return DevMem2D_<T>(rows, cols, (T*)data, step);\n    }\n\n    template <class T> inline GpuMat::operator PtrStep_<T>() const\n    {\n        return PtrStep_<T>(static_cast< DevMem2D_<T> >(*this));\n    }\n\n    inline GpuMat createContinuous(int rows, int cols, int type)\n    {\n        GpuMat m;\n        createContinuous(rows, cols, type, m);\n        return m;\n    }\n\n    inline void createContinuous(Size size, int type, GpuMat& m)\n    {\n        createContinuous(size.height, size.width, type, m);\n    }\n\n    inline GpuMat createContinuous(Size size, int type)\n    {\n        GpuMat m;\n        createContinuous(size, type, m);\n        return m;\n    }\n\n    inline void ensureSizeIsEnough(Size size, int type, GpuMat& m)\n    {\n        ensureSizeIsEnough(size.height, size.width, type, m);\n    }\n}}\n\n#endif // __cplusplus\n\n#endif // __OPENCV_GPUMAT_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/internal.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n/* The header is for internal use and it is likely to change.\n   It contains some macro definitions that are used in cxcore, cv, cvaux\n   and, probably, other libraries. If you need some of this functionality,\n   the safe way is to copy it into your code and rename the macros.\n*/\n#ifndef __OPENCV_CORE_INTERNAL_HPP__\n#define __OPENCV_CORE_INTERNAL_HPP__\n\n#include <vector>\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/types_c.h\"\n\n#if defined WIN32 || defined _WIN32\n#  ifndef WIN32\n#    define WIN32\n#  endif\n#  ifndef _WIN32\n#    define _WIN32\n#  endif\n#endif\n\n#if !defined WIN32 && !defined WINCE\n#  include <pthread.h>\n#endif\n\n#ifdef __BORLANDC__\n#  ifndef WIN32\n#    define WIN32\n#  endif\n#  ifndef _WIN32\n#    define _WIN32\n#  endif\n#  define CV_DLL\n#  undef _CV_ALWAYS_PROFILE_\n#  define _CV_ALWAYS_NO_PROFILE_\n#endif\n\n#ifndef FALSE\n#  define FALSE 0\n#endif\n#ifndef TRUE\n#  define TRUE 1\n#endif\n\n#define __BEGIN__ __CV_BEGIN__\n#define __END__ __CV_END__\n#define EXIT __CV_EXIT__\n\n#ifdef HAVE_IPP\n#  include \"ipp.h\"\n\nCV_INLINE IppiSize ippiSize(int width, int height)\n{\n    IppiSize size = { width, height };\n    return size;\n}\n#endif\n\n#ifndef IPPI_CALL\n#  define IPPI_CALL(func) CV_Assert((func) >= 0)\n#endif\n\n#if defined __SSE2__ || defined _M_X64  || (defined _M_IX86_FP && _M_IX86_FP >= 2)\n#  include \"emmintrin.h\"\n#  define CV_SSE 1\n#  define CV_SSE2 1\n#  if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include \"pmmintrin.h\"\n#    define CV_SSE3 1\n#  endif\n#  if defined __SSSE3__  || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include \"tmmintrin.h\"\n#    define CV_SSSE3 1\n#  endif\n#  if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include <smmintrin.h>\n#    define CV_SSE4_1 1\n#  endif\n#  if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include <nmmintrin.h>\n#    define CV_SSE4_2 1\n#  endif\n#  if defined __AVX__ || (defined _MSC_FULL_VER && _MSC_FULL_VER >= 160040219)\n// MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX\n// See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32\n#    include <immintrin.h>\n#    define CV_AVX 1\n#    if defined(_XCR_XFEATURE_ENABLED_MASK)\n#      define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK)\n#    else\n#      define __xgetbv() 0\n#    endif\n#  endif\n#endif\n\n\n#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)\n# include <Intrin.h>\n# include \"arm_neon.h\"\n# define CV_NEON 1\n# define CPU_HAS_NEON_FEATURE (true)\n#elif defined(__ARM_NEON__)\n#  include <arm_neon.h>\n#  define CV_NEON 1\n#  define CPU_HAS_NEON_FEATURE (true)\n#endif\n\n#ifndef CV_SSE\n#  define CV_SSE 0\n#endif\n#ifndef CV_SSE2\n#  define CV_SSE2 0\n#endif\n#ifndef CV_SSE3\n#  define CV_SSE3 0\n#endif\n#ifndef CV_SSSE3\n#  define CV_SSSE3 0\n#endif\n#ifndef CV_SSE4_1\n#  define CV_SSE4_1 0\n#endif\n#ifndef CV_SSE4_2\n#  define CV_SSE4_2 0\n#endif\n#ifndef CV_AVX\n#  define CV_AVX 0\n#endif\n#ifndef CV_NEON\n#  define CV_NEON 0\n#endif\n\n#ifdef HAVE_TBB\n#  include \"tbb/tbb_stddef.h\"\n#  if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202\n#    include \"tbb/tbb.h\"\n#    include \"tbb/task.h\"\n#    undef min\n#    undef max\n#  else\n#    undef HAVE_TBB\n#  endif\n#endif\n\n#ifdef HAVE_EIGEN\n#  if defined __GNUC__ && defined __APPLE__\n#    pragma GCC diagnostic ignored \"-Wshadow\"\n#  endif\n#  include <Eigen/Core>\n#  include \"opencv2/core/eigen.hpp\"\n#endif\n\n#ifdef __cplusplus\n\nnamespace cv\n{\n#ifdef HAVE_TBB\n\n    typedef tbb::blocked_range<int> BlockedRange;\n\n    template<typename Body> static inline\n    void parallel_for( const BlockedRange& range, const Body& body )\n    {\n        tbb::parallel_for(range, body);\n    }\n\n    template<typename Iterator, typename Body> static inline\n    void parallel_do( Iterator first, Iterator last, const Body& body )\n    {\n        tbb::parallel_do(first, last, body);\n    }\n\n    typedef tbb::split Split;\n\n    template<typename Body> static inline\n    void parallel_reduce( const BlockedRange& range, Body& body )\n    {\n        tbb::parallel_reduce(range, body);\n    }\n\n    typedef tbb::concurrent_vector<Rect> ConcurrentRectVector;\n    typedef tbb::concurrent_vector<double> ConcurrentDoubleVector;\n#else\n    class BlockedRange\n    {\n    public:\n        BlockedRange() : _begin(0), _end(0), _grainsize(0) {}\n        BlockedRange(int b, int e, int g=1) : _begin(b), _end(e), _grainsize(g) {}\n        int begin() const { return _begin; }\n        int end() const { return _end; }\n        int grainsize() const { return _grainsize; }\n\n    protected:\n        int _begin, _end, _grainsize;\n    };\n\n    template<typename Body> static inline\n    void parallel_for( const BlockedRange& range, const Body& body )\n    {\n        body(range);\n    }\n    typedef std::vector<Rect> ConcurrentRectVector;\n    typedef std::vector<double> ConcurrentDoubleVector;\n\n    template<typename Iterator, typename Body> static inline\n    void parallel_do( Iterator first, Iterator last, const Body& body )\n    {\n        for( ; first != last; ++first )\n            body(*first);\n    }\n\n    class Split {};\n\n    template<typename Body> static inline\n    void parallel_reduce( const BlockedRange& range, Body& body )\n    {\n        body(range);\n    }\n#endif\n\n    // Returns a static string if there is a parallel framework,\n    // NULL otherwise.\n    CV_EXPORTS const char* currentParallelFramework();\n} //namespace cv\n\n#define CV_INIT_ALGORITHM(classname, algname, memberinit) \\\n    static ::cv::Algorithm* create##classname() \\\n    { \\\n        return new classname; \\\n    } \\\n    \\\n    static ::cv::AlgorithmInfo& classname##_info() \\\n    { \\\n        static ::cv::AlgorithmInfo classname##_info_var(algname, create##classname); \\\n        return classname##_info_var; \\\n    } \\\n    \\\n    static ::cv::AlgorithmInfo& classname##_info_auto = classname##_info(); \\\n    \\\n    ::cv::AlgorithmInfo* classname::info() const \\\n    { \\\n        static volatile bool initialized = false; \\\n        \\\n        if( !initialized ) \\\n        { \\\n            initialized = true; \\\n            classname obj; \\\n            memberinit; \\\n        } \\\n        return &classname##_info(); \\\n    }\n\n#endif //__cplusplus\n\n/* maximal size of vector to run matrix operations on it inline (i.e. w/o ipp calls) */\n#define  CV_MAX_INLINE_MAT_OP_SIZE  10\n\n/* maximal linear size of matrix to allocate it on stack. */\n#define  CV_MAX_LOCAL_MAT_SIZE  32\n\n/* maximal size of local memory storage */\n#define  CV_MAX_LOCAL_SIZE  \\\n    (CV_MAX_LOCAL_MAT_SIZE*CV_MAX_LOCAL_MAT_SIZE*(int)sizeof(double))\n\n/* default image row align (in bytes) */\n#define  CV_DEFAULT_IMAGE_ROW_ALIGN  4\n\n/* matrices are continuous by default */\n#define  CV_DEFAULT_MAT_ROW_ALIGN  1\n\n/* maximum size of dynamic memory buffer.\n   cvAlloc reports an error if a larger block is requested. */\n#define  CV_MAX_ALLOC_SIZE    (((size_t)1 << (sizeof(size_t)*8-2)))\n\n/* the alignment of all the allocated buffers */\n#define  CV_MALLOC_ALIGN    16\n\n/* default alignment for dynamic data strucutures, resided in storages. */\n#define  CV_STRUCT_ALIGN    ((int)sizeof(double))\n\n/* default storage block size */\n#define  CV_STORAGE_BLOCK_SIZE   ((1<<16) - 128)\n\n/* default memory block for sparse array elements */\n#define  CV_SPARSE_MAT_BLOCK    (1<<12)\n\n/* initial hash table size */\n#define  CV_SPARSE_HASH_SIZE0    (1<<10)\n\n/* maximal average node_count/hash_size ratio beyond which hash table is resized */\n#define  CV_SPARSE_HASH_RATIO    3\n\n/* max length of strings */\n#define  CV_MAX_STRLEN  1024\n\n#if 0 /*def  CV_CHECK_FOR_NANS*/\n#  define CV_CHECK_NANS( arr ) cvCheckArray((arr))\n#else\n#  define CV_CHECK_NANS( arr )\n#endif\n\n/****************************************************************************************\\\n*                                  Common declarations                                   *\n\\****************************************************************************************/\n\n#ifdef __GNUC__\n#  define CV_DECL_ALIGNED(x) __attribute__ ((aligned (x)))\n#elif defined _MSC_VER\n#  define CV_DECL_ALIGNED(x) __declspec(align(x))\n#else\n#  define CV_DECL_ALIGNED(x)\n#endif\n\n#ifndef CV_IMPL\n#  define CV_IMPL CV_EXTERN_C\n#endif\n\n#define CV_DBG_BREAK() { volatile int* crashMe = 0; *crashMe = 0; }\n\n/* default step, set in case of continuous data\n   to work around checks for valid step in some ipp functions */\n#define  CV_STUB_STEP     (1 << 30)\n\n#define  CV_SIZEOF_FLOAT ((int)sizeof(float))\n#define  CV_SIZEOF_SHORT ((int)sizeof(short))\n\n#define  CV_ORIGIN_TL  0\n#define  CV_ORIGIN_BL  1\n\n/* IEEE754 constants and macros */\n#define  CV_POS_INF       0x7f800000\n#define  CV_NEG_INF       0x807fffff /* CV_TOGGLE_FLT(0xff800000) */\n#define  CV_1F            0x3f800000\n#define  CV_TOGGLE_FLT(x) ((x)^((int)(x) < 0 ? 0x7fffffff : 0))\n#define  CV_TOGGLE_DBL(x) \\\n    ((x)^((int64)(x) < 0 ? CV_BIG_INT(0x7fffffffffffffff) : 0))\n\n#define  CV_NOP(a)      (a)\n#define  CV_ADD(a, b)   ((a) + (b))\n#define  CV_SUB(a, b)   ((a) - (b))\n#define  CV_MUL(a, b)   ((a) * (b))\n#define  CV_AND(a, b)   ((a) & (b))\n#define  CV_OR(a, b)    ((a) | (b))\n#define  CV_XOR(a, b)   ((a) ^ (b))\n#define  CV_ANDN(a, b)  (~(a) & (b))\n#define  CV_ORN(a, b)   (~(a) | (b))\n#define  CV_SQR(a)      ((a) * (a))\n\n#define  CV_LT(a, b)    ((a) < (b))\n#define  CV_LE(a, b)    ((a) <= (b))\n#define  CV_EQ(a, b)    ((a) == (b))\n#define  CV_NE(a, b)    ((a) != (b))\n#define  CV_GT(a, b)    ((a) > (b))\n#define  CV_GE(a, b)    ((a) >= (b))\n\n#define  CV_NONZERO(a)      ((a) != 0)\n#define  CV_NONZERO_FLT(a)  (((a)+(a)) != 0)\n\n/* general-purpose saturation macros */\n#define  CV_CAST_8U(t)  (uchar)(!((t) & ~255) ? (t) : (t) > 0 ? 255 : 0)\n#define  CV_CAST_8S(t)  (schar)(!(((t)+128) & ~255) ? (t) : (t) > 0 ? 127 : -128)\n#define  CV_CAST_16U(t) (ushort)(!((t) & ~65535) ? (t) : (t) > 0 ? 65535 : 0)\n#define  CV_CAST_16S(t) (short)(!(((t)+32768) & ~65535) ? (t) : (t) > 0 ? 32767 : -32768)\n#define  CV_CAST_32S(t) (int)(t)\n#define  CV_CAST_64S(t) (int64)(t)\n#define  CV_CAST_32F(t) (float)(t)\n#define  CV_CAST_64F(t) (double)(t)\n\n#define  CV_PASTE2(a,b) a##b\n#define  CV_PASTE(a,b)  CV_PASTE2(a,b)\n\n#define  CV_EMPTY\n#define  CV_MAKE_STR(a) #a\n\n#define  CV_ZERO_OBJ(x) memset((x), 0, sizeof(*(x)))\n\n#define  CV_DIM(static_array) ((int)(sizeof(static_array)/sizeof((static_array)[0])))\n\n#define  cvUnsupportedFormat \"Unsupported format\"\n\nCV_INLINE void* cvAlignPtr( const void* ptr, int align CV_DEFAULT(32) )\n{\n    assert( (align & (align-1)) == 0 );\n    return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) );\n}\n\nCV_INLINE int cvAlign( int size, int align )\n{\n    assert( (align & (align-1)) == 0 && size < INT_MAX );\n    return (size + align - 1) & -align;\n}\n\nCV_INLINE  CvSize  cvGetMatSize( const CvMat* mat )\n{\n    CvSize size;\n    size.width = mat->cols;\n    size.height = mat->rows;\n    return size;\n}\n\n#define  CV_DESCALE(x,n)     (((x) + (1 << ((n)-1))) >> (n))\n#define  CV_FLT_TO_FIX(x,n)  cvRound((x)*(1<<(n)))\n\n/****************************************************************************************\\\n\n  Generic implementation of QuickSort algorithm.\n  ----------------------------------------------\n  Using this macro user can declare customized sort function that can be much faster\n  than built-in qsort function because of lower overhead on elements\n  comparison and exchange. The macro takes less_than (or LT) argument - a macro or function\n  that takes 2 arguments returns non-zero if the first argument should be before the second\n  one in the sorted sequence and zero otherwise.\n\n  Example:\n\n    Suppose that the task is to sort points by ascending of y coordinates and if\n    y's are equal x's should ascend.\n\n    The code is:\n    ------------------------------------------------------------------------------\n           #define cmp_pts( pt1, pt2 ) \\\n               ((pt1).y < (pt2).y || ((pt1).y < (pt2).y && (pt1).x < (pt2).x))\n\n           [static] CV_IMPLEMENT_QSORT( icvSortPoints, CvPoint, cmp_pts )\n    ------------------------------------------------------------------------------\n\n    After that the function \"void icvSortPoints( CvPoint* array, size_t total, int aux );\"\n    is available to user.\n\n  aux is an additional parameter, which can be used when comparing elements.\n  The current implementation was derived from *BSD system qsort():\n\n    * Copyright (c) 1992, 1993\n    *  The Regents of the University of California.  All rights reserved.\n    *\n    * Redistribution and use in source and binary forms, with or without\n    * modification, are permitted provided that the following conditions\n    * are met:\n    * 1. Redistributions of source code must retain the above copyright\n    *    notice, this list of conditions and the following disclaimer.\n    * 2. Redistributions in binary form must reproduce the above copyright\n    *    notice, this list of conditions and the following disclaimer in the\n    *    documentation and/or other materials provided with the distribution.\n    * 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 University of\n    *  California, Berkeley and its contributors.\n    * 4. Neither the name of the University nor the names of its contributors\n    *    may be used to endorse or promote products derived from this software\n    *    without specific prior written permission.\n    *\n    * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n    * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n    * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    * SUCH DAMAGE.\n\n\\****************************************************************************************/\n\n#define CV_IMPLEMENT_QSORT_EX( func_name, T, LT, user_data_type )                   \\\nvoid func_name( T *array, size_t total, user_data_type aux )                        \\\n{                                                                                   \\\n    int isort_thresh = 7;                                                           \\\n    T t;                                                                            \\\n    int sp = 0;                                                                     \\\n                                                                                    \\\n    struct                                                                          \\\n    {                                                                               \\\n        T *lb;                                                                      \\\n        T *ub;                                                                      \\\n    }                                                                               \\\n    stack[48];                                                                      \\\n                                                                                    \\\n    aux = aux;                                                                      \\\n                                                                                    \\\n    if( total <= 1 )                                                                \\\n        return;                                                                     \\\n                                                                                    \\\n    stack[0].lb = array;                                                            \\\n    stack[0].ub = array + (total - 1);                                              \\\n                                                                                    \\\n    while( sp >= 0 )                                                                \\\n    {                                                                               \\\n        T* left = stack[sp].lb;                                                     \\\n        T* right = stack[sp--].ub;                                                  \\\n                                                                                    \\\n        for(;;)                                                                     \\\n        {                                                                           \\\n            int i, n = (int)(right - left) + 1, m;                                  \\\n            T* ptr;                                                                 \\\n            T* ptr2;                                                                \\\n                                                                                    \\\n            if( n <= isort_thresh )                                                 \\\n            {                                                                       \\\n            insert_sort:                                                            \\\n                for( ptr = left + 1; ptr <= right; ptr++ )                          \\\n                {                                                                   \\\n                    for( ptr2 = ptr; ptr2 > left && LT(ptr2[0],ptr2[-1]); ptr2--)   \\\n                        CV_SWAP( ptr2[0], ptr2[-1], t );                            \\\n                }                                                                   \\\n                break;                                                              \\\n            }                                                                       \\\n            else                                                                    \\\n            {                                                                       \\\n                T* left0;                                                           \\\n                T* left1;                                                           \\\n                T* right0;                                                          \\\n                T* right1;                                                          \\\n                T* pivot;                                                           \\\n                T* a;                                                               \\\n                T* b;                                                               \\\n                T* c;                                                               \\\n                int swap_cnt = 0;                                                   \\\n                                                                                    \\\n                left0 = left;                                                       \\\n                right0 = right;                                                     \\\n                pivot = left + (n/2);                                               \\\n                                                                                    \\\n                if( n > 40 )                                                        \\\n                {                                                                   \\\n                    int d = n / 8;                                                  \\\n                    a = left, b = left + d, c = left + 2*d;                         \\\n                    left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))     \\\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \\\n                                                                                    \\\n                    a = pivot - d, b = pivot, c = pivot + d;                        \\\n                    pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))    \\\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \\\n                                                                                    \\\n                    a = right - 2*d, b = right - d, c = right;                      \\\n                    right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))    \\\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \\\n                }                                                                   \\\n                                                                                    \\\n                a = left, b = pivot, c = right;                                     \\\n                pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))        \\\n                                   : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));       \\\n                if( pivot != left0 )                                                \\\n                {                                                                   \\\n                    CV_SWAP( *pivot, *left0, t );                                   \\\n                    pivot = left0;                                                  \\\n                }                                                                   \\\n                left = left1 = left0 + 1;                                           \\\n                right = right1 = right0;                                            \\\n                                                                                    \\\n                for(;;)                                                             \\\n                {                                                                   \\\n                    while( left <= right && !LT(*pivot, *left) )                    \\\n                    {                                                               \\\n                        if( !LT(*left, *pivot) )                                    \\\n                        {                                                           \\\n                            if( left > left1 )                                      \\\n                                CV_SWAP( *left1, *left, t );                        \\\n                            swap_cnt = 1;                                           \\\n                            left1++;                                                \\\n                        }                                                           \\\n                        left++;                                                     \\\n                    }                                                               \\\n                                                                                    \\\n                    while( left <= right && !LT(*right, *pivot) )                   \\\n                    {                                                               \\\n                        if( !LT(*pivot, *right) )                                   \\\n                        {                                                           \\\n                            if( right < right1 )                                    \\\n                                CV_SWAP( *right1, *right, t );                      \\\n                            swap_cnt = 1;                                           \\\n                            right1--;                                               \\\n                        }                                                           \\\n                        right--;                                                    \\\n                    }                                                               \\\n                                                                                    \\\n                    if( left > right )                                              \\\n                        break;                                                      \\\n                    CV_SWAP( *left, *right, t );                                    \\\n                    swap_cnt = 1;                                                   \\\n                    left++;                                                         \\\n                    right--;                                                        \\\n                }                                                                   \\\n                                                                                    \\\n                if( swap_cnt == 0 )                                                 \\\n                {                                                                   \\\n                    left = left0, right = right0;                                   \\\n                    goto insert_sort;                                               \\\n                }                                                                   \\\n                                                                                    \\\n                n = MIN( (int)(left1 - left0), (int)(left - left1) );               \\\n                for( i = 0; i < n; i++ )                                            \\\n                    CV_SWAP( left0[i], left[i-n], t );                              \\\n                                                                                    \\\n                n = MIN( (int)(right0 - right1), (int)(right1 - right) );           \\\n                for( i = 0; i < n; i++ )                                            \\\n                    CV_SWAP( left[i], right0[i-n+1], t );                           \\\n                n = (int)(left - left1);                                            \\\n                m = (int)(right1 - right);                                          \\\n                if( n > 1 )                                                         \\\n                {                                                                   \\\n                    if( m > 1 )                                                     \\\n                    {                                                               \\\n                        if( n > m )                                                 \\\n                        {                                                           \\\n                            stack[++sp].lb = left0;                                 \\\n                            stack[sp].ub = left0 + n - 1;                           \\\n                            left = right0 - m + 1, right = right0;                  \\\n                        }                                                           \\\n                        else                                                        \\\n                        {                                                           \\\n                            stack[++sp].lb = right0 - m + 1;                        \\\n                            stack[sp].ub = right0;                                  \\\n                            left = left0, right = left0 + n - 1;                    \\\n                        }                                                           \\\n                    }                                                               \\\n                    else                                                            \\\n                        left = left0, right = left0 + n - 1;                        \\\n                }                                                                   \\\n                else if( m > 1 )                                                    \\\n                    left = right0 - m + 1, right = right0;                          \\\n                else                                                                \\\n                    break;                                                          \\\n            }                                                                       \\\n        }                                                                           \\\n    }                                                                               \\\n}\n\n#define CV_IMPLEMENT_QSORT( func_name, T, cmp )  \\\n    CV_IMPLEMENT_QSORT_EX( func_name, T, cmp, int )\n\n/****************************************************************************************\\\n*                     Structures and macros for integration with IPP                     *\n\\****************************************************************************************/\n\n/* IPP-compatible return codes */\ntypedef enum CvStatus\n{\n    CV_BADMEMBLOCK_ERR          = -113,\n    CV_INPLACE_NOT_SUPPORTED_ERR= -112,\n    CV_UNMATCHED_ROI_ERR        = -111,\n    CV_NOTFOUND_ERR             = -110,\n    CV_BADCONVERGENCE_ERR       = -109,\n\n    CV_BADDEPTH_ERR             = -107,\n    CV_BADROI_ERR               = -106,\n    CV_BADHEADER_ERR            = -105,\n    CV_UNMATCHED_FORMATS_ERR    = -104,\n    CV_UNSUPPORTED_COI_ERR      = -103,\n    CV_UNSUPPORTED_CHANNELS_ERR = -102,\n    CV_UNSUPPORTED_DEPTH_ERR    = -101,\n    CV_UNSUPPORTED_FORMAT_ERR   = -100,\n\n    CV_BADARG_ERR               = -49,  //ipp comp\n    CV_NOTDEFINED_ERR           = -48,  //ipp comp\n\n    CV_BADCHANNELS_ERR          = -47,  //ipp comp\n    CV_BADRANGE_ERR             = -44,  //ipp comp\n    CV_BADSTEP_ERR              = -29,  //ipp comp\n\n    CV_BADFLAG_ERR              =  -12,\n    CV_DIV_BY_ZERO_ERR          =  -11, //ipp comp\n    CV_BADCOEF_ERR              =  -10,\n\n    CV_BADFACTOR_ERR            =  -7,\n    CV_BADPOINT_ERR             =  -6,\n    CV_BADSCALE_ERR             =  -4,\n    CV_OUTOFMEM_ERR             =  -3,\n    CV_NULLPTR_ERR              =  -2,\n    CV_BADSIZE_ERR              =  -1,\n    CV_NO_ERR                   =   0,\n    CV_OK                       =   CV_NO_ERR\n}\nCvStatus;\n\n#define CV_NOTHROW throw()\n\ntypedef struct CvFuncTable\n{\n    void*   fn_2d[CV_DEPTH_MAX];\n}\nCvFuncTable;\n\ntypedef struct CvBigFuncTable\n{\n    void*   fn_2d[CV_DEPTH_MAX*4];\n} CvBigFuncTable;\n\n#define CV_INIT_FUNC_TAB( tab, FUNCNAME, FLAG )         \\\n    (tab).fn_2d[CV_8U] = (void*)FUNCNAME##_8u##FLAG;    \\\n    (tab).fn_2d[CV_8S] = 0;                             \\\n    (tab).fn_2d[CV_16U] = (void*)FUNCNAME##_16u##FLAG;  \\\n    (tab).fn_2d[CV_16S] = (void*)FUNCNAME##_16s##FLAG;  \\\n    (tab).fn_2d[CV_32S] = (void*)FUNCNAME##_32s##FLAG;  \\\n    (tab).fn_2d[CV_32F] = (void*)FUNCNAME##_32f##FLAG;  \\\n    (tab).fn_2d[CV_64F] = (void*)FUNCNAME##_64f##FLAG\n\n#ifdef __cplusplus\n\n// < Deprecated\n\nclass CV_EXPORTS CvOpenGlFuncTab\n{\npublic:\n    virtual ~CvOpenGlFuncTab();\n\n    virtual void genBuffers(int n, unsigned int* buffers) const = 0;\n    virtual void deleteBuffers(int n, const unsigned int* buffers) const = 0;\n\n    virtual void bufferData(unsigned int target, ptrdiff_t size, const void* data, unsigned int usage) const = 0;\n    virtual void bufferSubData(unsigned int target, ptrdiff_t offset, ptrdiff_t size, const void* data) const = 0;\n\n    virtual void bindBuffer(unsigned int target, unsigned int buffer) const = 0;\n\n    virtual void* mapBuffer(unsigned int target, unsigned int access) const = 0;\n    virtual void unmapBuffer(unsigned int target) const = 0;\n\n    virtual void generateBitmapFont(const std::string& family, int height, int weight, bool italic, bool underline, int start, int count, int base) const = 0;\n\n    virtual bool isGlContextInitialized() const = 0;\n};\n\nCV_EXPORTS void icvSetOpenGlFuncTab(const CvOpenGlFuncTab* tab);\n\nCV_EXPORTS bool icvCheckGlError(const char* file, const int line, const char* func = \"\");\n\n// >\n\nnamespace cv { namespace ogl {\nCV_EXPORTS bool checkError(const char* file, const int line, const char* func = \"\");\n}}\n\n#define CV_CheckGlError() CV_DbgAssert( (cv::ogl::checkError(__FILE__, __LINE__, CV_Func)) )\n\n#endif //__cplusplus\n\n#endif // __OPENCV_CORE_INTERNAL_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/mat.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_MATRIX_OPERATIONS_HPP__\n#define __OPENCV_CORE_MATRIX_OPERATIONS_HPP__\n\n#ifndef SKIP_INCLUDES\n#include <limits.h>\n#include <string.h>\n#endif // SKIP_INCLUDES\n\n#ifdef __cplusplus\n\nnamespace cv\n{\n\n//////////////////////////////// Mat ////////////////////////////////\n\ninline void Mat::initEmpty()\n{\n    flags = MAGIC_VAL;\n    dims = rows = cols = 0;\n    data = datastart = dataend = datalimit = 0;\n    refcount = 0;\n    allocator = 0;\n}\n\ninline Mat::Mat() : size(&rows)\n{\n    initEmpty();\n}\n\ninline Mat::Mat(int _rows, int _cols, int _type) : size(&rows)\n{\n    initEmpty();\n    create(_rows, _cols, _type);\n}\n\ninline Mat::Mat(int _rows, int _cols, int _type, const Scalar& _s) : size(&rows)\n{\n    initEmpty();\n    create(_rows, _cols, _type);\n    *this = _s;\n}\n\ninline Mat::Mat(Size _sz, int _type) : size(&rows)\n{\n    initEmpty();\n    create( _sz.height, _sz.width, _type );\n}\n\ninline Mat::Mat(Size _sz, int _type, const Scalar& _s) : size(&rows)\n{\n    initEmpty();\n    create(_sz.height, _sz.width, _type);\n    *this = _s;\n}\n\ninline Mat::Mat(int _dims, const int* _sz, int _type) : size(&rows)\n{\n    initEmpty();\n    create(_dims, _sz, _type);\n}\n\ninline Mat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s) : size(&rows)\n{\n    initEmpty();\n    create(_dims, _sz, _type);\n    *this = _s;\n}\n\ninline Mat::Mat(const Mat& m)\n    : flags(m.flags), dims(m.dims), rows(m.rows), cols(m.cols), data(m.data),\n    refcount(m.refcount), datastart(m.datastart), dataend(m.dataend),\n    datalimit(m.datalimit), allocator(m.allocator), size(&rows)\n{\n    if( refcount )\n        CV_XADD(refcount, 1);\n    if( m.dims <= 2 )\n    {\n        step[0] = m.step[0]; step[1] = m.step[1];\n    }\n    else\n    {\n        dims = 0;\n        copySize(m);\n    }\n}\n\ninline Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step)\n    : flags(MAGIC_VAL + (_type & TYPE_MASK)), dims(2), rows(_rows), cols(_cols),\n    data((uchar*)_data), refcount(0), datastart((uchar*)_data), dataend(0),\n    datalimit(0), allocator(0), size(&rows)\n{\n    size_t esz = CV_ELEM_SIZE(_type), minstep = cols*esz;\n    if( _step == AUTO_STEP )\n    {\n        _step = minstep;\n        flags |= CONTINUOUS_FLAG;\n    }\n    else\n    {\n        if( rows == 1 ) _step = minstep;\n        CV_DbgAssert( _step >= minstep );\n        flags |= _step == minstep ? CONTINUOUS_FLAG : 0;\n    }\n    step[0] = _step; step[1] = esz;\n    datalimit = datastart + _step*rows;\n    dataend = datalimit - _step + minstep;\n}\n\ninline Mat::Mat(Size _sz, int _type, void* _data, size_t _step)\n    : flags(MAGIC_VAL + (_type & TYPE_MASK)), dims(2), rows(_sz.height), cols(_sz.width),\n    data((uchar*)_data), refcount(0), datastart((uchar*)_data), dataend(0),\n    datalimit(0), allocator(0), size(&rows)\n{\n    size_t esz = CV_ELEM_SIZE(_type), minstep = cols*esz;\n    if( _step == AUTO_STEP )\n    {\n        _step = minstep;\n        flags |= CONTINUOUS_FLAG;\n    }\n    else\n    {\n        if( rows == 1 ) _step = minstep;\n        CV_DbgAssert( _step >= minstep );\n        flags |= _step == minstep ? CONTINUOUS_FLAG : 0;\n    }\n    step[0] = _step; step[1] = esz;\n    datalimit = datastart + _step*rows;\n    dataend = datalimit - _step + minstep;\n}\n\n\ntemplate<typename _Tp> inline Mat::Mat(const vector<_Tp>& vec, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows((int)vec.size()), cols(1), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if(vec.empty())\n        return;\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)&vec[0];\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n        Mat((int)vec.size(), 1, DataType<_Tp>::type, (uchar*)&vec[0]).copyTo(*this);\n}\n\n\ntemplate<typename _Tp, int n> inline Mat::Mat(const Vec<_Tp, n>& vec, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows(n), cols(1), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)vec.val;\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n        Mat(n, 1, DataType<_Tp>::type, (void*)vec.val).copyTo(*this);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline Mat::Mat(const Matx<_Tp,m,n>& M, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows(m), cols(n), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = cols*sizeof(_Tp);\n        step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)M.val;\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n        Mat(m, n, DataType<_Tp>::type, (uchar*)M.val).copyTo(*this);\n}\n\n\ntemplate<typename _Tp> inline Mat::Mat(const Point_<_Tp>& pt, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows(2), cols(1), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)&pt.x;\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n    {\n        create(2, 1, DataType<_Tp>::type);\n        ((_Tp*)data)[0] = pt.x;\n        ((_Tp*)data)[1] = pt.y;\n    }\n}\n\n\ntemplate<typename _Tp> inline Mat::Mat(const Point3_<_Tp>& pt, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows(3), cols(1), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)&pt.x;\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n    {\n        create(3, 1, DataType<_Tp>::type);\n        ((_Tp*)data)[0] = pt.x;\n        ((_Tp*)data)[1] = pt.y;\n        ((_Tp*)data)[2] = pt.z;\n    }\n}\n\n\ntemplate<typename _Tp> inline Mat::Mat(const MatCommaInitializer_<_Tp>& commaInitializer)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(0), rows(0), cols(0), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    *this = *commaInitializer;\n}\n\ninline Mat::~Mat()\n{\n    release();\n    if( step.p != step.buf )\n        fastFree(step.p);\n}\n\ninline Mat& Mat::operator = (const Mat& m)\n{\n    if( this != &m )\n    {\n        if( m.refcount )\n            CV_XADD(m.refcount, 1);\n        release();\n        flags = m.flags;\n        if( dims <= 2 && m.dims <= 2 )\n        {\n            dims = m.dims;\n            rows = m.rows;\n            cols = m.cols;\n            step[0] = m.step[0];\n            step[1] = m.step[1];\n        }\n        else\n            copySize(m);\n        data = m.data;\n        datastart = m.datastart;\n        dataend = m.dataend;\n        datalimit = m.datalimit;\n        refcount = m.refcount;\n        allocator = m.allocator;\n    }\n    return *this;\n}\n\ninline Mat Mat::row(int y) const { return Mat(*this, Range(y, y+1), Range::all()); }\ninline Mat Mat::col(int x) const { return Mat(*this, Range::all(), Range(x, x+1)); }\ninline Mat Mat::rowRange(int startrow, int endrow) const\n    { return Mat(*this, Range(startrow, endrow), Range::all()); }\ninline Mat Mat::rowRange(const Range& r) const\n    { return Mat(*this, r, Range::all()); }\ninline Mat Mat::colRange(int startcol, int endcol) const\n    { return Mat(*this, Range::all(), Range(startcol, endcol)); }\ninline Mat Mat::colRange(const Range& r) const\n    { return Mat(*this, Range::all(), r); }\n\ninline Mat Mat::diag(const Mat& d)\n{\n    CV_Assert( d.cols == 1 || d.rows == 1 );\n    int len = d.rows + d.cols - 1;\n    Mat m(len, len, d.type(), Scalar(0)), md = m.diag();\n    if( d.cols == 1 )\n        d.copyTo(md);\n    else\n        transpose(d, md);\n    return m;\n}\n\ninline Mat Mat::clone() const\n{\n    Mat m;\n    copyTo(m);\n    return m;\n}\n\ninline void Mat::assignTo( Mat& m, int _type ) const\n{\n    if( _type < 0 )\n        m = *this;\n    else\n        convertTo(m, _type);\n}\n\ninline void Mat::create(int _rows, int _cols, int _type)\n{\n    _type &= TYPE_MASK;\n    if( dims <= 2 && rows == _rows && cols == _cols && type() == _type && data )\n        return;\n    int sz[] = {_rows, _cols};\n    create(2, sz, _type);\n}\n\ninline void Mat::create(Size _sz, int _type)\n{\n    create(_sz.height, _sz.width, _type);\n}\n\ninline void Mat::addref()\n{ if( refcount ) CV_XADD(refcount, 1); }\n\ninline void Mat::release()\n{\n    if( refcount && CV_XADD(refcount, -1) == 1 )\n        deallocate();\n    data = datastart = dataend = datalimit = 0;\n    size.p[0] = 0;\n    refcount = 0;\n}\n\ninline Mat Mat::operator()( Range _rowRange, Range _colRange ) const\n{\n    return Mat(*this, _rowRange, _colRange);\n}\n\ninline Mat Mat::operator()( const Rect& roi ) const\n{ return Mat(*this, roi); }\n\ninline Mat Mat::operator()(const Range* ranges) const\n{\n    return Mat(*this, ranges);\n}\n\ninline Mat::operator CvMat() const\n{\n    CV_DbgAssert(dims <= 2);\n    CvMat m = cvMat(rows, dims == 1 ? 1 : cols, type(), data);\n    m.step = (int)step[0];\n    m.type = (m.type & ~CONTINUOUS_FLAG) | (flags & CONTINUOUS_FLAG);\n    return m;\n}\n\ninline bool Mat::isContinuous() const { return (flags & CONTINUOUS_FLAG) != 0; }\ninline bool Mat::isSubmatrix() const { return (flags & SUBMATRIX_FLAG) != 0; }\ninline size_t Mat::elemSize() const { return dims > 0 ? step.p[dims-1] : 0; }\ninline size_t Mat::elemSize1() const { return CV_ELEM_SIZE1(flags); }\ninline int Mat::type() const { return CV_MAT_TYPE(flags); }\ninline int Mat::depth() const { return CV_MAT_DEPTH(flags); }\ninline int Mat::channels() const { return CV_MAT_CN(flags); }\ninline size_t Mat::step1(int i) const { return step.p[i]/elemSize1(); }\ninline bool Mat::empty() const { return data == 0 || total() == 0; }\ninline size_t Mat::total() const\n{\n    if( dims <= 2 )\n        return (size_t)rows*cols;\n    size_t p = 1;\n    for( int i = 0; i < dims; i++ )\n        p *= size[i];\n    return p;\n}\n\ninline uchar* Mat::ptr(int y)\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return data + step.p[0]*y;\n}\n\ninline const uchar* Mat::ptr(int y) const\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return data + step.p[0]*y;\n}\n\ntemplate<typename _Tp> inline _Tp* Mat::ptr(int y)\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return (_Tp*)(data + step.p[0]*y);\n}\n\ntemplate<typename _Tp> inline const _Tp* Mat::ptr(int y) const\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return (const _Tp*)(data + step.p[0]*y);\n}\n\n\ninline uchar* Mat::ptr(int i0, int i1)\n{\n    CV_DbgAssert( dims >= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] );\n    return data + i0*step.p[0] + i1*step.p[1];\n}\n\ninline const uchar* Mat::ptr(int i0, int i1) const\n{\n    CV_DbgAssert( dims >= 2 && data &&\n                 (unsigned)i0 < (unsigned)size.p[0] &&\n                 (unsigned)i1 < (unsigned)size.p[1] );\n    return data + i0*step.p[0] + i1*step.p[1];\n}\n\ntemplate<typename _Tp> inline _Tp* Mat::ptr(int i0, int i1)\n{\n    CV_DbgAssert( dims >= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] );\n    return (_Tp*)(data + i0*step.p[0] + i1*step.p[1]);\n}\n\ntemplate<typename _Tp> inline const _Tp* Mat::ptr(int i0, int i1) const\n{\n    CV_DbgAssert( dims >= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] );\n    return (const _Tp*)(data + i0*step.p[0] + i1*step.p[1]);\n}\n\ninline uchar* Mat::ptr(int i0, int i1, int i2)\n{\n    CV_DbgAssert( dims >= 3 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  (unsigned)i2 < (unsigned)size.p[2] );\n    return data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2];\n}\n\ninline const uchar* Mat::ptr(int i0, int i1, int i2) const\n{\n    CV_DbgAssert( dims >= 3 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  (unsigned)i2 < (unsigned)size.p[2] );\n    return data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2];\n}\n\ntemplate<typename _Tp> inline _Tp* Mat::ptr(int i0, int i1, int i2)\n{\n    CV_DbgAssert( dims >= 3 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  (unsigned)i2 < (unsigned)size.p[2] );\n    return (_Tp*)(data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2]);\n}\n\ntemplate<typename _Tp> inline const _Tp* Mat::ptr(int i0, int i1, int i2) const\n{\n    CV_DbgAssert( dims >= 3 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  (unsigned)i2 < (unsigned)size.p[2] );\n    return (const _Tp*)(data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2]);\n}\n\ninline uchar* Mat::ptr(const int* idx)\n{\n    int i, d = dims;\n    uchar* p = data;\n    CV_DbgAssert( d >= 1 && p );\n    for( i = 0; i < d; i++ )\n    {\n        CV_DbgAssert( (unsigned)idx[i] < (unsigned)size.p[i] );\n        p += idx[i]*step.p[i];\n    }\n    return p;\n}\n\ninline const uchar* Mat::ptr(const int* idx) const\n{\n    int i, d = dims;\n    uchar* p = data;\n    CV_DbgAssert( d >= 1 && p );\n    for( i = 0; i < d; i++ )\n    {\n        CV_DbgAssert( (unsigned)idx[i] < (unsigned)size.p[i] );\n        p += idx[i]*step.p[i];\n    }\n    return p;\n}\n\ntemplate<typename _Tp> inline _Tp& Mat::at(int i0, int i1)\n{\n    CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] &&\n        (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&\n        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((_Tp*)(data + step.p[0]*i0))[i1];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat::at(int i0, int i1) const\n{\n    CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] &&\n        (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&\n        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((const _Tp*)(data + step.p[0]*i0))[i1];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat::at(Point pt)\n{\n    CV_DbgAssert( dims <= 2 && data && (unsigned)pt.y < (unsigned)size.p[0] &&\n        (unsigned)(pt.x*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&\n        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((_Tp*)(data + step.p[0]*pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat::at(Point pt) const\n{\n    CV_DbgAssert( dims <= 2 && data && (unsigned)pt.y < (unsigned)size.p[0] &&\n        (unsigned)(pt.x*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&\n        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((const _Tp*)(data + step.p[0]*pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat::at(int i0)\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                 (unsigned)i0 < (unsigned)(size.p[0]*size.p[1]) &&\n                 elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    if( isContinuous() || size.p[0] == 1 )\n        return ((_Tp*)data)[i0];\n    if( size.p[1] == 1 )\n        return *(_Tp*)(data + step.p[0]*i0);\n    int i = i0/cols, j = i0 - i*cols;\n    return ((_Tp*)(data + step.p[0]*i))[j];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat::at(int i0) const\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                 (unsigned)i0 < (unsigned)(size.p[0]*size.p[1]) &&\n                 elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    if( isContinuous() || size.p[0] == 1 )\n        return ((const _Tp*)data)[i0];\n    if( size.p[1] == 1 )\n        return *(const _Tp*)(data + step.p[0]*i0);\n    int i = i0/cols, j = i0 - i*cols;\n    return ((const _Tp*)(data + step.p[0]*i))[j];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat::at(int i0, int i1, int i2)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(i0, i1, i2);\n}\ntemplate<typename _Tp> inline const _Tp& Mat::at(int i0, int i1, int i2) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(i0, i1, i2);\n}\ntemplate<typename _Tp> inline _Tp& Mat::at(const int* idx)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(idx);\n}\ntemplate<typename _Tp> inline const _Tp& Mat::at(const int* idx) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(idx);\n}\ntemplate<typename _Tp, int n> _Tp& Mat::at(const Vec<int, n>& idx)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(idx.val);\n}\ntemplate<typename _Tp, int n> inline const _Tp& Mat::at(const Vec<int, n>& idx) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(idx.val);\n}\n\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> Mat::begin() const\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    return MatConstIterator_<_Tp>((const Mat_<_Tp>*)this);\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> Mat::end() const\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    MatConstIterator_<_Tp> it((const Mat_<_Tp>*)this);\n    it += total();\n    return it;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> Mat::begin()\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    return MatIterator_<_Tp>((Mat_<_Tp>*)this);\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> Mat::end()\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    MatIterator_<_Tp> it((Mat_<_Tp>*)this);\n    it += total();\n    return it;\n}\n\ntemplate<typename _Tp> inline Mat::operator vector<_Tp>() const\n{\n    vector<_Tp> v;\n    copyTo(v);\n    return v;\n}\n\ntemplate<typename _Tp, int n> inline Mat::operator Vec<_Tp, n>() const\n{\n    CV_Assert( data && dims <= 2 && (rows == 1 || cols == 1) &&\n               rows + cols - 1 == n && channels() == 1 );\n\n    if( isContinuous() && type() == DataType<_Tp>::type )\n        return Vec<_Tp, n>((_Tp*)data);\n    Vec<_Tp, n> v; Mat tmp(rows, cols, DataType<_Tp>::type, v.val);\n    convertTo(tmp, tmp.type());\n    return v;\n}\n\ntemplate<typename _Tp, int m, int n> inline Mat::operator Matx<_Tp, m, n>() const\n{\n    CV_Assert( data && dims <= 2 && rows == m && cols == n && channels() == 1 );\n\n    if( isContinuous() && type() == DataType<_Tp>::type )\n        return Matx<_Tp, m, n>((_Tp*)data);\n    Matx<_Tp, m, n> mtx; Mat tmp(rows, cols, DataType<_Tp>::type, mtx.val);\n    convertTo(tmp, tmp.type());\n    return mtx;\n}\n\n\ntemplate<typename _Tp> inline void Mat::push_back(const _Tp& elem)\n{\n    if( !data )\n    {\n        *this = Mat(1, 1, DataType<_Tp>::type, (void*)&elem).clone();\n        return;\n    }\n    CV_Assert(DataType<_Tp>::type == type() && cols == 1\n              /* && dims == 2 (cols == 1 implies dims == 2) */);\n    uchar* tmp = dataend + step[0];\n    if( !isSubmatrix() && isContinuous() && tmp <= datalimit )\n    {\n        *(_Tp*)(data + (size.p[0]++)*step.p[0]) = elem;\n        dataend = tmp;\n    }\n    else\n        push_back_(&elem);\n}\n\ntemplate<typename _Tp> inline void Mat::push_back(const Mat_<_Tp>& m)\n{\n    push_back((const Mat&)m);\n}\n\ninline Mat::MSize::MSize(int* _p) : p(_p) {}\ninline Size Mat::MSize::operator()() const\n{\n    CV_DbgAssert(p[-1] <= 2);\n    return Size(p[1], p[0]);\n}\ninline const int& Mat::MSize::operator[](int i) const { return p[i]; }\ninline int& Mat::MSize::operator[](int i) { return p[i]; }\ninline Mat::MSize::operator const int*() const { return p; }\n\ninline bool Mat::MSize::operator == (const MSize& sz) const\n{\n    int d = p[-1], dsz = sz.p[-1];\n    if( d != dsz )\n        return false;\n    if( d == 2 )\n        return p[0] == sz.p[0] && p[1] == sz.p[1];\n\n    for( int i = 0; i < d; i++ )\n        if( p[i] != sz.p[i] )\n            return false;\n    return true;\n}\n\ninline bool Mat::MSize::operator != (const MSize& sz) const\n{\n    return !(*this == sz);\n}\n\ninline Mat::MStep::MStep() { p = buf; p[0] = p[1] = 0; }\ninline Mat::MStep::MStep(size_t s) { p = buf; p[0] = s; p[1] = 0; }\ninline const size_t& Mat::MStep::operator[](int i) const { return p[i]; }\ninline size_t& Mat::MStep::operator[](int i) { return p[i]; }\ninline Mat::MStep::operator size_t() const\n{\n    CV_DbgAssert( p == buf );\n    return buf[0];\n}\ninline Mat::MStep& Mat::MStep::operator = (size_t s)\n{\n    CV_DbgAssert( p == buf );\n    buf[0] = s;\n    return *this;\n}\n\nstatic inline Mat cvarrToMatND(const CvArr* arr, bool copyData=false, int coiMode=0)\n{\n    return cvarrToMat(arr, copyData, true, coiMode);\n}\n\n///////////////////////////////////////////// SVD //////////////////////////////////////////////////////\n\ninline SVD::SVD() {}\ninline SVD::SVD( InputArray m, int flags ) { operator ()(m, flags); }\ninline void SVD::solveZ( InputArray m, OutputArray _dst )\n{\n    Mat mtx = m.getMat();\n    SVD svd(mtx, (mtx.rows >= mtx.cols ? 0 : SVD::FULL_UV));\n    _dst.create(svd.vt.cols, 1, svd.vt.type());\n    Mat dst = _dst.getMat();\n    svd.vt.row(svd.vt.rows-1).reshape(1,svd.vt.cols).copyTo(dst);\n}\n\ntemplate<typename _Tp, int m, int n, int nm> inline void\n    SVD::compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt )\n{\n    assert( nm == MIN(m, n));\n    Mat _a(a, false), _u(u, false), _w(w, false), _vt(vt, false);\n    SVD::compute(_a, _w, _u, _vt);\n    CV_Assert(_w.data == (uchar*)&w.val[0] && _u.data == (uchar*)&u.val[0] && _vt.data == (uchar*)&vt.val[0]);\n}\n\ntemplate<typename _Tp, int m, int n, int nm> inline void\nSVD::compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w )\n{\n    assert( nm == MIN(m, n));\n    Mat _a(a, false), _w(w, false);\n    SVD::compute(_a, _w);\n    CV_Assert(_w.data == (uchar*)&w.val[0]);\n}\n\ntemplate<typename _Tp, int m, int n, int nm, int nb> inline void\nSVD::backSubst( const Matx<_Tp, nm, 1>& w, const Matx<_Tp, m, nm>& u,\n                const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs,\n                Matx<_Tp, n, nb>& dst )\n{\n    assert( nm == MIN(m, n));\n    Mat _u(u, false), _w(w, false), _vt(vt, false), _rhs(rhs, false), _dst(dst, false);\n    SVD::backSubst(_w, _u, _vt, _rhs, _dst);\n    CV_Assert(_dst.data == (uchar*)&dst.val[0]);\n}\n\n///////////////////////////////// Mat_<_Tp> ////////////////////////////////////\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_()\n    : Mat() { flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type; }\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _rows, int _cols)\n    : Mat(_rows, _cols, DataType<_Tp>::type) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _rows, int _cols, const _Tp& value)\n    : Mat(_rows, _cols, DataType<_Tp>::type) { *this = value; }\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(Size _sz)\n    : Mat(_sz.height, _sz.width, DataType<_Tp>::type) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(Size _sz, const _Tp& value)\n    : Mat(_sz.height, _sz.width, DataType<_Tp>::type) { *this = value; }\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _dims, const int* _sz)\n    : Mat(_dims, _sz, DataType<_Tp>::type) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _dims, const int* _sz, const _Tp& _s)\n    : Mat(_dims, _sz, DataType<_Tp>::type, Scalar(_s)) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat_<_Tp>& m, const Range* ranges)\n    : Mat(m, ranges) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat& m)\n    : Mat() { flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type; *this = m; }\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat_& m)\n    : Mat(m) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _rows, int _cols, _Tp* _data, size_t steps)\n    : Mat(_rows, _cols, DataType<_Tp>::type, _data, steps) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat_& m, const Range& _rowRange, const Range& _colRange)\n    : Mat(m, _rowRange, _colRange) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat_& m, const Rect& roi)\n    : Mat(m, roi) {}\n\ntemplate<typename _Tp> template<int n> inline\n    Mat_<_Tp>::Mat_(const Vec<typename DataType<_Tp>::channel_type, n>& vec, bool copyData)\n    : Mat(n/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&vec)\n{\n    CV_Assert(n%DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> template<int m, int n> inline\n    Mat_<_Tp>::Mat_(const Matx<typename DataType<_Tp>::channel_type,m,n>& M, bool copyData)\n    : Mat(m, n/DataType<_Tp>::channels, DataType<_Tp>::type, (void*)&M)\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Point_<typename DataType<_Tp>::channel_type>& pt, bool copyData)\n    : Mat(2/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&pt)\n{\n    CV_Assert(2 % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Point3_<typename DataType<_Tp>::channel_type>& pt, bool copyData)\n    : Mat(3/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&pt)\n{\n    CV_Assert(3 % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const MatCommaInitializer_<_Tp>& commaInitializer)\n    : Mat(commaInitializer) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const vector<_Tp>& vec, bool copyData)\n    : Mat(vec, copyData) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::operator = (const Mat& m)\n{\n    if( DataType<_Tp>::type == m.type() )\n    {\n        Mat::operator = (m);\n        return *this;\n    }\n    if( DataType<_Tp>::depth == m.depth() )\n    {\n        return (*this = m.reshape(DataType<_Tp>::channels, m.dims, 0));\n    }\n    CV_DbgAssert(DataType<_Tp>::channels == m.channels());\n    m.convertTo(*this, type());\n    return *this;\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::operator = (const Mat_& m)\n{\n    Mat::operator=(m);\n    return *this;\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::operator = (const _Tp& s)\n{\n    typedef typename DataType<_Tp>::vec_type VT;\n    Mat::operator=(Scalar((const VT&)s));\n    return *this;\n}\n\ntemplate<typename _Tp> inline void Mat_<_Tp>::create(int _rows, int _cols)\n{\n    Mat::create(_rows, _cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline void Mat_<_Tp>::create(Size _sz)\n{\n    Mat::create(_sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline void Mat_<_Tp>::create(int _dims, const int* _sz)\n{\n    Mat::create(_dims, _sz, DataType<_Tp>::type);\n}\n\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::cross(const Mat_& m) const\n{ return Mat_<_Tp>(Mat::cross(m)); }\n\ntemplate<typename _Tp> template<typename T2> inline Mat_<_Tp>::operator Mat_<T2>() const\n{ return Mat_<T2>(*this); }\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::row(int y) const\n{ return Mat_(*this, Range(y, y+1), Range::all()); }\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::col(int x) const\n{ return Mat_(*this, Range::all(), Range(x, x+1)); }\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::diag(int d) const\n{ return Mat_(Mat::diag(d)); }\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::clone() const\n{ return Mat_(Mat::clone()); }\n\ntemplate<typename _Tp> inline size_t Mat_<_Tp>::elemSize() const\n{\n    CV_DbgAssert( Mat::elemSize() == sizeof(_Tp) );\n    return sizeof(_Tp);\n}\n\ntemplate<typename _Tp> inline size_t Mat_<_Tp>::elemSize1() const\n{\n    CV_DbgAssert( Mat::elemSize1() == sizeof(_Tp)/DataType<_Tp>::channels );\n    return sizeof(_Tp)/DataType<_Tp>::channels;\n}\ntemplate<typename _Tp> inline int Mat_<_Tp>::type() const\n{\n    CV_DbgAssert( Mat::type() == DataType<_Tp>::type );\n    return DataType<_Tp>::type;\n}\ntemplate<typename _Tp> inline int Mat_<_Tp>::depth() const\n{\n    CV_DbgAssert( Mat::depth() == DataType<_Tp>::depth );\n    return DataType<_Tp>::depth;\n}\ntemplate<typename _Tp> inline int Mat_<_Tp>::channels() const\n{\n    CV_DbgAssert( Mat::channels() == DataType<_Tp>::channels );\n    return DataType<_Tp>::channels;\n}\ntemplate<typename _Tp> inline size_t Mat_<_Tp>::stepT(int i) const { return step.p[i]/elemSize(); }\ntemplate<typename _Tp> inline size_t Mat_<_Tp>::step1(int i) const { return step.p[i]/elemSize1(); }\n\ntemplate<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::adjustROI( int dtop, int dbottom, int dleft, int dright )\n{ return (Mat_<_Tp>&)(Mat::adjustROI(dtop, dbottom, dleft, dright));  }\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::operator()( const Range& _rowRange, const Range& _colRange ) const\n{ return Mat_<_Tp>(*this, _rowRange, _colRange); }\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::operator()( const Rect& roi ) const\n{ return Mat_<_Tp>(*this, roi); }\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::operator()( const Range* ranges ) const\n{ return Mat_<_Tp>(*this, ranges); }\n\ntemplate<typename _Tp> inline _Tp* Mat_<_Tp>::operator [](int y)\n{ return (_Tp*)ptr(y); }\ntemplate<typename _Tp> inline const _Tp* Mat_<_Tp>::operator [](int y) const\n{ return (const _Tp*)ptr(y); }\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0, int i1)\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  type() == DataType<_Tp>::type );\n    return ((_Tp*)(data + step.p[0]*i0))[i1];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(int i0, int i1) const\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  type() == DataType<_Tp>::type );\n    return ((const _Tp*)(data + step.p[0]*i0))[i1];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(Point pt)\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                  (unsigned)pt.y < (unsigned)size.p[0] &&\n                  (unsigned)pt.x < (unsigned)size.p[1] &&\n                  type() == DataType<_Tp>::type );\n    return ((_Tp*)(data + step.p[0]*pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(Point pt) const\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                  (unsigned)pt.y < (unsigned)size.p[0] &&\n                  (unsigned)pt.x < (unsigned)size.p[1] &&\n                 type() == DataType<_Tp>::type );\n    return ((const _Tp*)(data + step.p[0]*pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(const int* idx)\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(const int* idx) const\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> template<int n> inline _Tp& Mat_<_Tp>::operator ()(const Vec<int, n>& idx)\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> template<int n> inline const _Tp& Mat_<_Tp>::operator ()(const Vec<int, n>& idx) const\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0)\n{\n    return this->at<_Tp>(i0);\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(int i0) const\n{\n    return this->at<_Tp>(i0);\n}\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2)\n{\n    return this->at<_Tp>(i0, i1, i2);\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2) const\n{\n    return this->at<_Tp>(i0, i1, i2);\n}\n\n\ntemplate<typename _Tp> inline Mat_<_Tp>::operator vector<_Tp>() const\n{\n    vector<_Tp> v;\n    copyTo(v);\n    return v;\n}\n\ntemplate<typename _Tp> template<int n> inline Mat_<_Tp>::operator Vec<typename DataType<_Tp>::channel_type, n>() const\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n    return this->Mat::operator Vec<typename DataType<_Tp>::channel_type, n>();\n}\n\ntemplate<typename _Tp> template<int m, int n> inline Mat_<_Tp>::operator Matx<typename DataType<_Tp>::channel_type, m, n>() const\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n\n    Matx<typename DataType<_Tp>::channel_type, m, n> res = this->Mat::operator Matx<typename DataType<_Tp>::channel_type, m, n>();\n    return res;\n}\n\ntemplate<typename T1, typename T2, typename Op> inline void\nprocess( const Mat_<T1>& m1, Mat_<T2>& m2, Op op )\n{\n    int y, x, rows = m1.rows, cols = m1.cols;\n\n    CV_DbgAssert( m1.size() == m2.size() );\n\n    for( y = 0; y < rows; y++ )\n    {\n        const T1* src = m1[y];\n        T2* dst = m2[y];\n\n        for( x = 0; x < cols; x++ )\n            dst[x] = op(src[x]);\n    }\n}\n\ntemplate<typename T1, typename T2, typename T3, typename Op> inline void\nprocess( const Mat_<T1>& m1, const Mat_<T2>& m2, Mat_<T3>& m3, Op op )\n{\n    int y, x, rows = m1.rows, cols = m1.cols;\n\n    CV_DbgAssert( m1.size() == m2.size() );\n\n    for( y = 0; y < rows; y++ )\n    {\n        const T1* src1 = m1[y];\n        const T2* src2 = m2[y];\n        T3* dst = m3[y];\n\n        for( x = 0; x < cols; x++ )\n            dst[x] = op( src1[x], src2[x] );\n    }\n}\n\n\n/////////////////////////////// Input/Output Arrays /////////////////////////////////\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const vector<_Tp>& vec)\n    : flags(FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type), obj((void*)&vec) {}\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const vector<vector<_Tp> >& vec)\n    : flags(FIXED_TYPE + STD_VECTOR_VECTOR + DataType<_Tp>::type), obj((void*)&vec) {}\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const vector<Mat_<_Tp> >& vec)\n    : flags(FIXED_TYPE + STD_VECTOR_MAT + DataType<_Tp>::type), obj((void*)&vec) {}\n\ntemplate<typename _Tp, int m, int n> inline _InputArray::_InputArray(const Matx<_Tp, m, n>& mtx)\n    : flags(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type), obj((void*)&mtx), sz(n, m) {}\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const _Tp* vec, int n)\n    : flags(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type), obj((void*)vec), sz(n, 1) {}\n\ninline _InputArray::_InputArray(const Scalar& s)\n    : flags(FIXED_TYPE + FIXED_SIZE + MATX + CV_64F), obj((void*)&s), sz(1, 4) {}\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const Mat_<_Tp>& m)\n    : flags(FIXED_TYPE + MAT + DataType<_Tp>::type), obj((void*)&m) {}\n\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(vector<_Tp>& vec)\n    : _InputArray(vec) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(vector<vector<_Tp> >& vec)\n    : _InputArray(vec) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(vector<Mat_<_Tp> >& vec)\n    : _InputArray(vec) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(Mat_<_Tp>& m)\n    : _InputArray(m) {}\ntemplate<typename _Tp, int m, int n> inline _OutputArray::_OutputArray(Matx<_Tp, m, n>& mtx)\n    : _InputArray(mtx) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(_Tp* vec, int n)\n    : _InputArray(vec, n) {}\n\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const vector<_Tp>& vec)\n    : _InputArray(vec) {flags |= FIXED_SIZE;}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const vector<vector<_Tp> >& vec)\n    : _InputArray(vec) {flags |= FIXED_SIZE;}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const vector<Mat_<_Tp> >& vec)\n    : _InputArray(vec) {flags |= FIXED_SIZE;}\n\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const Mat_<_Tp>& m)\n    : _InputArray(m) {flags |= FIXED_SIZE;}\ntemplate<typename _Tp, int m, int n> inline _OutputArray::_OutputArray(const Matx<_Tp, m, n>& mtx)\n    : _InputArray(mtx) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const _Tp* vec, int n)\n    : _InputArray(vec, n) {}\n\n//////////////////////////////////// Matrix Expressions /////////////////////////////////////////\n\nclass CV_EXPORTS MatOp\n{\npublic:\n    MatOp() {};\n    virtual ~MatOp() {};\n\n    virtual bool elementWise(const MatExpr& expr) const;\n    virtual void assign(const MatExpr& expr, Mat& m, int type=-1) const = 0;\n    virtual void roi(const MatExpr& expr, const Range& rowRange,\n                     const Range& colRange, MatExpr& res) const;\n    virtual void diag(const MatExpr& expr, int d, MatExpr& res) const;\n    virtual void augAssignAdd(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignSubtract(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignMultiply(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignDivide(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignAnd(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignOr(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignXor(const MatExpr& expr, Mat& m) const;\n\n    virtual void add(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void add(const MatExpr& expr1, const Scalar& s, MatExpr& res) const;\n\n    virtual void subtract(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void subtract(const Scalar& s, const MatExpr& expr, MatExpr& res) const;\n\n    virtual void multiply(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res, double scale=1) const;\n    virtual void multiply(const MatExpr& expr1, double s, MatExpr& res) const;\n\n    virtual void divide(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res, double scale=1) const;\n    virtual void divide(double s, const MatExpr& expr, MatExpr& res) const;\n\n    virtual void abs(const MatExpr& expr, MatExpr& res) const;\n\n    virtual void transpose(const MatExpr& expr, MatExpr& res) const;\n    virtual void matmul(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void invert(const MatExpr& expr, int method, MatExpr& res) const;\n\n    virtual Size size(const MatExpr& expr) const;\n    virtual int type(const MatExpr& expr) const;\n};\n\n\nclass CV_EXPORTS MatExpr\n{\npublic:\n    MatExpr() : op(0), flags(0), a(Mat()), b(Mat()), c(Mat()), alpha(0), beta(0), s(Scalar()) {}\n    MatExpr(const MatOp* _op, int _flags, const Mat& _a=Mat(), const Mat& _b=Mat(),\n            const Mat& _c=Mat(), double _alpha=1, double _beta=1, const Scalar& _s=Scalar())\n        : op(_op), flags(_flags), a(_a), b(_b), c(_c), alpha(_alpha), beta(_beta), s(_s) {}\n    explicit MatExpr(const Mat& m);\n    operator Mat() const\n    {\n        Mat m;\n        op->assign(*this, m);\n        return m;\n    }\n\n    template<typename _Tp> operator Mat_<_Tp>() const\n    {\n        Mat_<_Tp> m;\n        op->assign(*this, m, DataType<_Tp>::type);\n        return m;\n    }\n\n    MatExpr row(int y) const;\n    MatExpr col(int x) const;\n    MatExpr diag(int d=0) const;\n    MatExpr operator()( const Range& rowRange, const Range& colRange ) const;\n    MatExpr operator()( const Rect& roi ) const;\n\n    Mat cross(const Mat& m) const;\n    double dot(const Mat& m) const;\n\n    MatExpr t() const;\n    MatExpr inv(int method = DECOMP_LU) const;\n    MatExpr mul(const MatExpr& e, double scale=1) const;\n    MatExpr mul(const Mat& m, double scale=1) const;\n\n    Size size() const;\n    int type() const;\n\n    const MatOp* op;\n    int flags;\n\n    Mat a, b, c;\n    double alpha, beta;\n    Scalar s;\n};\n\n\nCV_EXPORTS MatExpr operator + (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator + (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator + (const Scalar& s, const Mat& a);\nCV_EXPORTS MatExpr operator + (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator + (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator + (const MatExpr& e, const Scalar& s);\nCV_EXPORTS MatExpr operator + (const Scalar& s, const MatExpr& e);\nCV_EXPORTS MatExpr operator + (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator - (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator - (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator - (const Scalar& s, const Mat& a);\nCV_EXPORTS MatExpr operator - (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator - (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator - (const MatExpr& e, const Scalar& s);\nCV_EXPORTS MatExpr operator - (const Scalar& s, const MatExpr& e);\nCV_EXPORTS MatExpr operator - (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator - (const Mat& m);\nCV_EXPORTS MatExpr operator - (const MatExpr& e);\n\nCV_EXPORTS MatExpr operator * (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator * (const Mat& a, double s);\nCV_EXPORTS MatExpr operator * (double s, const Mat& a);\nCV_EXPORTS MatExpr operator * (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator * (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator * (const MatExpr& e, double s);\nCV_EXPORTS MatExpr operator * (double s, const MatExpr& e);\nCV_EXPORTS MatExpr operator * (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator / (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator / (const Mat& a, double s);\nCV_EXPORTS MatExpr operator / (double s, const Mat& a);\nCV_EXPORTS MatExpr operator / (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator / (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator / (const MatExpr& e, double s);\nCV_EXPORTS MatExpr operator / (double s, const MatExpr& e);\nCV_EXPORTS MatExpr operator / (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator < (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator < (const Mat& a, double s);\nCV_EXPORTS MatExpr operator < (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator <= (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator <= (const Mat& a, double s);\nCV_EXPORTS MatExpr operator <= (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator == (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator == (const Mat& a, double s);\nCV_EXPORTS MatExpr operator == (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator != (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator != (const Mat& a, double s);\nCV_EXPORTS MatExpr operator != (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator >= (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator >= (const Mat& a, double s);\nCV_EXPORTS MatExpr operator >= (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator > (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator > (const Mat& a, double s);\nCV_EXPORTS MatExpr operator > (double s, const Mat& a);\n\nCV_EXPORTS MatExpr min(const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr min(const Mat& a, double s);\nCV_EXPORTS MatExpr min(double s, const Mat& a);\n\nCV_EXPORTS MatExpr max(const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr max(const Mat& a, double s);\nCV_EXPORTS MatExpr max(double s, const Mat& a);\n\ntemplate<typename _Tp> static inline MatExpr min(const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    return cv::min((const Mat&)a, (const Mat&)b);\n}\n\ntemplate<typename _Tp> static inline MatExpr min(const Mat_<_Tp>& a, double s)\n{\n    return cv::min((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline MatExpr min(double s, const Mat_<_Tp>& a)\n{\n    return cv::min((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline MatExpr max(const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    return cv::max((const Mat&)a, (const Mat&)b);\n}\n\ntemplate<typename _Tp> static inline MatExpr max(const Mat_<_Tp>& a, double s)\n{\n    return cv::max((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline MatExpr max(double s, const Mat_<_Tp>& a)\n{\n    return cv::max((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline void min(const Mat_<_Tp>& a, const Mat_<_Tp>& b, Mat_<_Tp>& c)\n{\n    cv::min((const Mat&)a, (const Mat&)b, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void min(const Mat_<_Tp>& a, double s, Mat_<_Tp>& c)\n{\n    cv::min((const Mat&)a, s, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void min(double s, const Mat_<_Tp>& a, Mat_<_Tp>& c)\n{\n    cv::min((const Mat&)a, s, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void max(const Mat_<_Tp>& a, const Mat_<_Tp>& b, Mat_<_Tp>& c)\n{\n    cv::max((const Mat&)a, (const Mat&)b, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void max(const Mat_<_Tp>& a, double s, Mat_<_Tp>& c)\n{\n    cv::max((const Mat&)a, s, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void max(double s, const Mat_<_Tp>& a, Mat_<_Tp>& c)\n{\n    cv::max((const Mat&)a, s, (Mat&)c);\n}\n\n\nCV_EXPORTS MatExpr operator & (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator & (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator & (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator | (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator | (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator | (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator ^ (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator ^ (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator ^ (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator ~(const Mat& m);\n\nCV_EXPORTS MatExpr abs(const Mat& m);\nCV_EXPORTS MatExpr abs(const MatExpr& e);\n\ntemplate<typename _Tp> static inline MatExpr abs(const Mat_<_Tp>& m)\n{\n    return cv::abs((const Mat&)m);\n}\n\n////////////////////////////// Augmenting algebraic operations //////////////////////////////////\n\ninline Mat& Mat::operator = (const MatExpr& e)\n{\n    e.op->assign(e, *this);\n    return *this;\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const MatExpr& e)\n{\n    e.op->assign(e, *this, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> Mat_<_Tp>& Mat_<_Tp>::operator = (const MatExpr& e)\n{\n    e.op->assign(e, *this, DataType<_Tp>::type);\n    return *this;\n}\n\nstatic inline Mat& operator += (const Mat& a, const Mat& b)\n{\n    add(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator += (const Mat& a, const Scalar& s)\n{\n    add(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator += (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    add(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator += (const Mat_<_Tp>& a, const Scalar& s)\n{\n    add(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator += (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignAdd(b, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator += (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignAdd(b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator -= (const Mat& a, const Mat& b)\n{\n    subtract(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator -= (const Mat& a, const Scalar& s)\n{\n    subtract(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator -= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    subtract(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator -= (const Mat_<_Tp>& a, const Scalar& s)\n{\n    subtract(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator -= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignSubtract(b, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator -= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignSubtract(b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator *= (const Mat& a, const Mat& b)\n{\n    gemm(a, b, 1, Mat(), 0, (Mat&)a, 0);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator *= (const Mat& a, double s)\n{\n    a.convertTo((Mat&)a, -1, s);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator *= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    gemm(a, b, 1, Mat(), 0, (Mat&)a, 0);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator *= (const Mat_<_Tp>& a, double s)\n{\n    a.convertTo((Mat&)a, -1, s);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator *= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignMultiply(b, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator *= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignMultiply(b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator /= (const Mat& a, const Mat& b)\n{\n    divide(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator /= (const Mat& a, double s)\n{\n    a.convertTo((Mat&)a, -1, 1./s);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator /= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    divide(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator /= (const Mat_<_Tp>& a, double s)\n{\n    a.convertTo((Mat&)a, -1, 1./s);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator /= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignDivide(b, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator /= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignDivide(b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\n////////////////////////////// Logical operations ///////////////////////////////\n\nstatic inline Mat& operator &= (const Mat& a, const Mat& b)\n{\n    bitwise_and(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator &= (const Mat& a, const Scalar& s)\n{\n    bitwise_and(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator &= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    bitwise_and(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator &= (const Mat_<_Tp>& a, const Scalar& s)\n{\n    bitwise_and(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator |= (const Mat& a, const Mat& b)\n{\n    bitwise_or(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator |= (const Mat& a, const Scalar& s)\n{\n    bitwise_or(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator |= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    bitwise_or(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator |= (const Mat_<_Tp>& a, const Scalar& s)\n{\n    bitwise_or(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator ^= (const Mat& a, const Mat& b)\n{\n    bitwise_xor(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator ^= (const Mat& a, const Scalar& s)\n{\n    bitwise_xor(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator ^= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    bitwise_xor(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator ^= (const Mat_<_Tp>& a, const Scalar& s)\n{\n    bitwise_xor(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\n/////////////////////////////// Miscellaneous operations //////////////////////////////\n\ntemplate<typename _Tp> void split(const Mat& src, vector<Mat_<_Tp> >& mv)\n{ split(src, (vector<Mat>&)mv ); }\n\n//////////////////////////////////////////////////////////////\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::zeros(int rows, int cols)\n{\n    return Mat::zeros(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::zeros(Size sz)\n{\n    return Mat::zeros(sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::ones(int rows, int cols)\n{\n    return Mat::ones(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::ones(Size sz)\n{\n    return Mat::ones(sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::eye(int rows, int cols)\n{\n    return Mat::eye(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::eye(Size sz)\n{\n    return Mat::eye(sz, DataType<_Tp>::type);\n}\n\n//////////////////////////////// Iterators & Comma initializers //////////////////////////////////\n\ninline MatConstIterator::MatConstIterator()\n    : m(0), elemSize(0), ptr(0), sliceStart(0), sliceEnd(0) {}\n\ninline MatConstIterator::MatConstIterator(const Mat* _m)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    if( m && m->isContinuous() )\n    {\n        sliceStart = m->data;\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    seek((const int*)0);\n}\n\ninline MatConstIterator::MatConstIterator(const Mat* _m, int _row, int _col)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    CV_Assert(m && m->dims <= 2);\n    if( m->isContinuous() )\n    {\n        sliceStart = m->data;\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    int idx[]={_row, _col};\n    seek(idx);\n}\n\ninline MatConstIterator::MatConstIterator(const Mat* _m, Point _pt)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    CV_Assert(m && m->dims <= 2);\n    if( m->isContinuous() )\n    {\n        sliceStart = m->data;\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    int idx[]={_pt.y, _pt.x};\n    seek(idx);\n}\n\ninline MatConstIterator::MatConstIterator(const MatConstIterator& it)\n    : m(it.m), elemSize(it.elemSize), ptr(it.ptr), sliceStart(it.sliceStart), sliceEnd(it.sliceEnd)\n{}\n\ninline MatConstIterator& MatConstIterator::operator = (const MatConstIterator& it )\n{\n    m = it.m; elemSize = it.elemSize; ptr = it.ptr;\n    sliceStart = it.sliceStart; sliceEnd = it.sliceEnd;\n    return *this;\n}\n\ninline uchar* MatConstIterator::operator *() const { return ptr; }\n\ninline MatConstIterator& MatConstIterator::operator += (ptrdiff_t ofs)\n{\n    if( !m || ofs == 0 )\n        return *this;\n    ptrdiff_t ofsb = ofs*elemSize;\n    ptr += ofsb;\n    if( ptr < sliceStart || sliceEnd <= ptr )\n    {\n        ptr -= ofsb;\n        seek(ofs, true);\n    }\n    return *this;\n}\n\ninline MatConstIterator& MatConstIterator::operator -= (ptrdiff_t ofs)\n{ return (*this += -ofs); }\n\ninline MatConstIterator& MatConstIterator::operator --()\n{\n    if( m && (ptr -= elemSize) < sliceStart )\n    {\n        ptr += elemSize;\n        seek(-1, true);\n    }\n    return *this;\n}\n\ninline MatConstIterator MatConstIterator::operator --(int)\n{\n    MatConstIterator b = *this;\n    *this += -1;\n    return b;\n}\n\ninline MatConstIterator& MatConstIterator::operator ++()\n{\n    if( m && (ptr += elemSize) >= sliceEnd )\n    {\n        ptr -= elemSize;\n        seek(1, true);\n    }\n    return *this;\n}\n\ninline MatConstIterator MatConstIterator::operator ++(int)\n{\n    MatConstIterator b = *this;\n    *this += 1;\n    return b;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::MatConstIterator_() {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::MatConstIterator_(const Mat_<_Tp>* _m)\n    : MatConstIterator(_m) {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::\n    MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col)\n    : MatConstIterator(_m, _row, _col) {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::\n    MatConstIterator_(const Mat_<_Tp>* _m, Point _pt)\n    : MatConstIterator(_m, _pt) {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::\n    MatConstIterator_(const MatConstIterator_& it)\n    : MatConstIterator(it) {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>&\n    MatConstIterator_<_Tp>::operator = (const MatConstIterator_& it )\n{\n    MatConstIterator::operator = (it);\n    return *this;\n}\n\ntemplate<typename _Tp> inline _Tp MatConstIterator_<_Tp>::operator *() const { return *(_Tp*)(this->ptr); }\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator += (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator -= (ptrdiff_t ofs)\n{ return (*this += -ofs); }\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator --()\n{\n    MatConstIterator::operator --();\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator --(int)\n{\n    MatConstIterator_ b = *this;\n    MatConstIterator::operator --();\n    return b;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator ++()\n{\n    MatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator ++(int)\n{\n    MatConstIterator_ b = *this;\n    MatConstIterator::operator ++();\n    return b;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_() : MatConstIterator_<_Tp>() {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m)\n    : MatConstIterator_<_Tp>(_m) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m, int _row, int _col)\n    : MatConstIterator_<_Tp>(_m, _row, _col) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(const Mat_<_Tp>* _m, Point _pt)\n    : MatConstIterator_<_Tp>(_m, _pt) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(const Mat_<_Tp>* _m, const int* _idx)\n    : MatConstIterator_<_Tp>(_m, _idx) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(const MatIterator_& it)\n    : MatConstIterator_<_Tp>(it) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator = (const MatIterator_<_Tp>& it )\n{\n    MatConstIterator::operator = (it);\n    return *this;\n}\n\ntemplate<typename _Tp> inline _Tp& MatIterator_<_Tp>::operator *() const { return *(_Tp*)(this->ptr); }\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator += (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator -= (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (-ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator --()\n{\n    MatConstIterator::operator --();\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> MatIterator_<_Tp>::operator --(int)\n{\n    MatIterator_ b = *this;\n    MatConstIterator::operator --();\n    return b;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator ++()\n{\n    MatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> MatIterator_<_Tp>::operator ++(int)\n{\n    MatIterator_ b = *this;\n    MatConstIterator::operator ++();\n    return b;\n}\n\ntemplate<typename _Tp> inline Point MatConstIterator_<_Tp>::pos() const\n{\n    if( !m )\n        return Point();\n    CV_DbgAssert( m->dims <= 2 );\n    if( m->isContinuous() )\n    {\n        ptrdiff_t ofs = (const _Tp*)ptr - (const _Tp*)m->data;\n        int y = (int)(ofs / m->cols), x = (int)(ofs - (ptrdiff_t)y*m->cols);\n        return Point(x, y);\n    }\n    else\n    {\n        ptrdiff_t ofs = (uchar*)ptr - m->data;\n        int y = (int)(ofs / m->step), x = (int)((ofs - y*m->step)/sizeof(_Tp));\n        return Point(x, y);\n    }\n}\n\nstatic inline bool\noperator == (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.m == b.m && a.ptr == b.ptr; }\n\ntemplate<typename _Tp> static inline bool\noperator != (const MatConstIterator& a, const MatConstIterator& b)\n{ return !(a == b); }\n\ntemplate<typename _Tp> static inline bool\noperator == (const MatConstIterator_<_Tp>& a, const MatConstIterator_<_Tp>& b)\n{ return a.m == b.m && a.ptr == b.ptr; }\n\ntemplate<typename _Tp> static inline bool\noperator != (const MatConstIterator_<_Tp>& a, const MatConstIterator_<_Tp>& b)\n{ return a.m != b.m || a.ptr != b.ptr; }\n\ntemplate<typename _Tp> static inline bool\noperator == (const MatIterator_<_Tp>& a, const MatIterator_<_Tp>& b)\n{ return a.m == b.m && a.ptr == b.ptr; }\n\ntemplate<typename _Tp> static inline bool\noperator != (const MatIterator_<_Tp>& a, const MatIterator_<_Tp>& b)\n{ return a.m != b.m || a.ptr != b.ptr; }\n\nstatic inline bool\noperator < (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.ptr < b.ptr; }\n\nstatic inline bool\noperator > (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.ptr > b.ptr; }\n\nstatic inline bool\noperator <= (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.ptr <= b.ptr; }\n\nstatic inline bool\noperator >= (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.ptr >= b.ptr; }\n\nCV_EXPORTS ptrdiff_t operator - (const MatConstIterator& b, const MatConstIterator& a);\n\nstatic inline MatConstIterator operator + (const MatConstIterator& a, ptrdiff_t ofs)\n{ MatConstIterator b = a; return b += ofs; }\n\nstatic inline MatConstIterator operator + (ptrdiff_t ofs, const MatConstIterator& a)\n{ MatConstIterator b = a; return b += ofs; }\n\nstatic inline MatConstIterator operator - (const MatConstIterator& a, ptrdiff_t ofs)\n{ MatConstIterator b = a; return b += -ofs; }\n\ntemplate<typename _Tp> static inline MatConstIterator_<_Tp>\noperator + (const MatConstIterator_<_Tp>& a, ptrdiff_t ofs)\n{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatConstIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> static inline MatConstIterator_<_Tp>\noperator + (ptrdiff_t ofs, const MatConstIterator_<_Tp>& a)\n{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatConstIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> static inline MatConstIterator_<_Tp>\noperator - (const MatConstIterator_<_Tp>& a, ptrdiff_t ofs)\n{ MatConstIterator t = (const MatConstIterator&)a - ofs; return (MatConstIterator_<_Tp>&)t; }\n\ninline uchar* MatConstIterator::operator [](ptrdiff_t i) const\n{ return *(*this + i); }\n\ntemplate<typename _Tp> inline _Tp MatConstIterator_<_Tp>::operator [](ptrdiff_t i) const\n{ return *(_Tp*)MatConstIterator::operator [](i); }\n\ntemplate<typename _Tp> static inline MatIterator_<_Tp>\noperator + (const MatIterator_<_Tp>& a, ptrdiff_t ofs)\n{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> static inline MatIterator_<_Tp>\noperator + (ptrdiff_t ofs, const MatIterator_<_Tp>& a)\n{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> static inline MatIterator_<_Tp>\noperator - (const MatIterator_<_Tp>& a, ptrdiff_t ofs)\n{ MatConstIterator t = (const MatConstIterator&)a - ofs; return (MatIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> inline _Tp& MatIterator_<_Tp>::operator [](ptrdiff_t i) const\n{ return *(*this + i); }\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> Mat_<_Tp>::begin() const\n{ return Mat::begin<_Tp>(); }\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> Mat_<_Tp>::end() const\n{ return Mat::end<_Tp>(); }\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> Mat_<_Tp>::begin()\n{ return Mat::begin<_Tp>(); }\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> Mat_<_Tp>::end()\n{ return Mat::end<_Tp>(); }\n\ntemplate<typename _Tp> inline MatCommaInitializer_<_Tp>::MatCommaInitializer_(Mat_<_Tp>* _m) : it(_m) {}\n\ntemplate<typename _Tp> template<typename T2> inline MatCommaInitializer_<_Tp>&\nMatCommaInitializer_<_Tp>::operator , (T2 v)\n{\n    CV_DbgAssert( this->it < ((const Mat_<_Tp>*)this->it.m)->end() );\n    *this->it = _Tp(v); ++this->it;\n    return *this;\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp> MatCommaInitializer_<_Tp>::operator *() const\n{\n    CV_DbgAssert( this->it == ((const Mat_<_Tp>*)this->it.m)->end() );\n    return Mat_<_Tp>(*this->it.m);\n}\n\ntemplate<typename _Tp> inline MatCommaInitializer_<_Tp>::operator Mat_<_Tp>() const\n{\n    CV_DbgAssert( this->it == ((const Mat_<_Tp>*)this->it.m)->end() );\n    return Mat_<_Tp>(*this->it.m);\n}\n\ntemplate<typename _Tp, typename T2> static inline MatCommaInitializer_<_Tp>\noperator << (const Mat_<_Tp>& m, T2 val)\n{\n    MatCommaInitializer_<_Tp> commaInitializer((Mat_<_Tp>*)&m);\n    return (commaInitializer, val);\n}\n\n//////////////////////////////// SparseMat ////////////////////////////////\n\ninline SparseMat::SparseMat()\n: flags(MAGIC_VAL), hdr(0)\n{\n}\n\ninline SparseMat::SparseMat(int _dims, const int* _sizes, int _type)\n: flags(MAGIC_VAL), hdr(0)\n{\n    create(_dims, _sizes, _type);\n}\n\ninline SparseMat::SparseMat(const SparseMat& m)\n: flags(m.flags), hdr(m.hdr)\n{\n    addref();\n}\n\ninline SparseMat::~SparseMat()\n{\n    release();\n}\n\ninline SparseMat& SparseMat::operator = (const SparseMat& m)\n{\n    if( this != &m )\n    {\n        if( m.hdr )\n            CV_XADD(&m.hdr->refcount, 1);\n        release();\n        flags = m.flags;\n        hdr = m.hdr;\n    }\n    return *this;\n}\n\ninline SparseMat& SparseMat::operator = (const Mat& m)\n{ return (*this = SparseMat(m)); }\n\ninline SparseMat SparseMat::clone() const\n{\n    SparseMat temp;\n    this->copyTo(temp);\n    return temp;\n}\n\n\ninline void SparseMat::assignTo( SparseMat& m, int _type ) const\n{\n    if( _type < 0 )\n        m = *this;\n    else\n        convertTo(m, _type);\n}\n\ninline void SparseMat::addref()\n{ if( hdr ) CV_XADD(&hdr->refcount, 1); }\n\ninline void SparseMat::release()\n{\n    if( hdr && CV_XADD(&hdr->refcount, -1) == 1 )\n        delete hdr;\n    hdr = 0;\n}\n\ninline size_t SparseMat::elemSize() const\n{ return CV_ELEM_SIZE(flags); }\n\ninline size_t SparseMat::elemSize1() const\n{ return CV_ELEM_SIZE1(flags); }\n\ninline int SparseMat::type() const\n{ return CV_MAT_TYPE(flags); }\n\ninline int SparseMat::depth() const\n{ return CV_MAT_DEPTH(flags); }\n\ninline int SparseMat::channels() const\n{ return CV_MAT_CN(flags); }\n\ninline const int* SparseMat::size() const\n{\n    return hdr ? hdr->size : 0;\n}\n\ninline int SparseMat::size(int i) const\n{\n    if( hdr )\n    {\n        CV_DbgAssert((unsigned)i < (unsigned)hdr->dims);\n        return hdr->size[i];\n    }\n    return 0;\n}\n\ninline int SparseMat::dims() const\n{\n    return hdr ? hdr->dims : 0;\n}\n\ninline size_t SparseMat::nzcount() const\n{\n    return hdr ? hdr->nodeCount : 0;\n}\n\ninline size_t SparseMat::hash(int i0) const\n{\n    return (size_t)i0;\n}\n\ninline size_t SparseMat::hash(int i0, int i1) const\n{\n    return (size_t)(unsigned)i0*HASH_SCALE + (unsigned)i1;\n}\n\ninline size_t SparseMat::hash(int i0, int i1, int i2) const\n{\n    return ((size_t)(unsigned)i0*HASH_SCALE + (unsigned)i1)*HASH_SCALE + (unsigned)i2;\n}\n\ninline size_t SparseMat::hash(const int* idx) const\n{\n    size_t h = (unsigned)idx[0];\n    if( !hdr )\n        return 0;\n    int i, d = hdr->dims;\n    for( i = 1; i < d; i++ )\n        h = h*HASH_SCALE + (unsigned)idx[i];\n    return h;\n}\n\ntemplate<typename _Tp> inline _Tp& SparseMat::ref(int i0, size_t* hashval)\n{ return *(_Tp*)((SparseMat*)this)->ptr(i0, true, hashval); }\n\ntemplate<typename _Tp> inline _Tp& SparseMat::ref(int i0, int i1, size_t* hashval)\n{ return *(_Tp*)((SparseMat*)this)->ptr(i0, i1, true, hashval); }\n\ntemplate<typename _Tp> inline _Tp& SparseMat::ref(int i0, int i1, int i2, size_t* hashval)\n{ return *(_Tp*)((SparseMat*)this)->ptr(i0, i1, i2, true, hashval); }\n\ntemplate<typename _Tp> inline _Tp& SparseMat::ref(const int* idx, size_t* hashval)\n{ return *(_Tp*)((SparseMat*)this)->ptr(idx, true, hashval); }\n\ntemplate<typename _Tp> inline _Tp SparseMat::value(int i0, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline _Tp SparseMat::value(int i0, int i1, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, i1, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline _Tp SparseMat::value(int i0, int i1, int i2, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, i1, i2, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline _Tp SparseMat::value(const int* idx, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(idx, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline const _Tp* SparseMat::find(int i0, size_t* hashval) const\n{ return (const _Tp*)((SparseMat*)this)->ptr(i0, false, hashval); }\n\ntemplate<typename _Tp> inline const _Tp* SparseMat::find(int i0, int i1, size_t* hashval) const\n{ return (const _Tp*)((SparseMat*)this)->ptr(i0, i1, false, hashval); }\n\ntemplate<typename _Tp> inline const _Tp* SparseMat::find(int i0, int i1, int i2, size_t* hashval) const\n{ return (const _Tp*)((SparseMat*)this)->ptr(i0, i1, i2, false, hashval); }\n\ntemplate<typename _Tp> inline const _Tp* SparseMat::find(const int* idx, size_t* hashval) const\n{ return (const _Tp*)((SparseMat*)this)->ptr(idx, false, hashval); }\n\ntemplate<typename _Tp> inline _Tp& SparseMat::value(Node* n)\n{ return *(_Tp*)((uchar*)n + hdr->valueOffset); }\n\ntemplate<typename _Tp> inline const _Tp& SparseMat::value(const Node* n) const\n{ return *(const _Tp*)((const uchar*)n + hdr->valueOffset); }\n\ninline SparseMat::Node* SparseMat::node(size_t nidx)\n{ return (Node*)(void*)&hdr->pool[nidx]; }\n\ninline const SparseMat::Node* SparseMat::node(size_t nidx) const\n{ return (const Node*)(void*)&hdr->pool[nidx]; }\n\ninline SparseMatIterator SparseMat::begin()\n{ return SparseMatIterator(this); }\n\ninline SparseMatConstIterator SparseMat::begin() const\n{ return SparseMatConstIterator(this); }\n\ninline SparseMatIterator SparseMat::end()\n{ SparseMatIterator it(this); it.seekEnd(); return it; }\n\ninline SparseMatConstIterator SparseMat::end() const\n{ SparseMatConstIterator it(this); it.seekEnd(); return it; }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp> SparseMat::begin()\n{ return SparseMatIterator_<_Tp>(this); }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp> SparseMat::begin() const\n{ return SparseMatConstIterator_<_Tp>(this); }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp> SparseMat::end()\n{ SparseMatIterator_<_Tp> it(this); it.seekEnd(); return it; }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp> SparseMat::end() const\n{ SparseMatConstIterator_<_Tp> it(this); it.seekEnd(); return it; }\n\n\ninline SparseMatConstIterator::SparseMatConstIterator()\n: m(0), hashidx(0), ptr(0)\n{\n}\n\ninline SparseMatConstIterator::SparseMatConstIterator(const SparseMatConstIterator& it)\n: m(it.m), hashidx(it.hashidx), ptr(it.ptr)\n{\n}\n\nstatic inline bool operator == (const SparseMatConstIterator& it1, const SparseMatConstIterator& it2)\n{ return it1.m == it2.m && it1.ptr == it2.ptr; }\n\nstatic inline bool operator != (const SparseMatConstIterator& it1, const SparseMatConstIterator& it2)\n{ return !(it1 == it2); }\n\n\ninline SparseMatConstIterator& SparseMatConstIterator::operator = (const SparseMatConstIterator& it)\n{\n    if( this != &it )\n    {\n        m = it.m;\n        hashidx = it.hashidx;\n        ptr = it.ptr;\n    }\n    return *this;\n}\n\ntemplate<typename _Tp> inline const _Tp& SparseMatConstIterator::value() const\n{ return *(_Tp*)ptr; }\n\ninline const SparseMat::Node* SparseMatConstIterator::node() const\n{\n    return ptr && m && m->hdr ?\n        (const SparseMat::Node*)(void*)(ptr - m->hdr->valueOffset) : 0;\n}\n\ninline SparseMatConstIterator SparseMatConstIterator::operator ++(int)\n{\n    SparseMatConstIterator it = *this;\n    ++*this;\n    return it;\n}\n\n\ninline void SparseMatConstIterator::seekEnd()\n{\n    if( m && m->hdr )\n    {\n        hashidx = m->hdr->hashtab.size();\n        ptr = 0;\n    }\n}\n\ninline SparseMatIterator::SparseMatIterator()\n{}\n\ninline SparseMatIterator::SparseMatIterator(SparseMat* _m)\n: SparseMatConstIterator(_m)\n{}\n\ninline SparseMatIterator::SparseMatIterator(const SparseMatIterator& it)\n: SparseMatConstIterator(it)\n{\n}\n\ninline SparseMatIterator& SparseMatIterator::operator = (const SparseMatIterator& it)\n{\n    (SparseMatConstIterator&)*this = it;\n    return *this;\n}\n\ntemplate<typename _Tp> inline _Tp& SparseMatIterator::value() const\n{ return *(_Tp*)ptr; }\n\ninline SparseMat::Node* SparseMatIterator::node() const\n{\n    return (SparseMat::Node*)SparseMatConstIterator::node();\n}\n\ninline SparseMatIterator& SparseMatIterator::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ninline SparseMatIterator SparseMatIterator::operator ++(int)\n{\n    SparseMatIterator it = *this;\n    ++*this;\n    return it;\n}\n\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_()\n{ flags = MAGIC_VAL | DataType<_Tp>::type; }\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(int _dims, const int* _sizes)\n: SparseMat(_dims, _sizes, DataType<_Tp>::type)\n{}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(const SparseMat& m)\n{\n    if( m.type() == DataType<_Tp>::type )\n        *this = (const SparseMat_<_Tp>&)m;\n    else\n        m.convertTo(*this, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(const SparseMat_<_Tp>& m)\n{\n    this->flags = m.flags;\n    this->hdr = m.hdr;\n    if( this->hdr )\n        CV_XADD(&this->hdr->refcount, 1);\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(const Mat& m)\n{\n    SparseMat sm(m);\n    *this = sm;\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(const CvSparseMat* m)\n{\n    SparseMat sm(m);\n    *this = sm;\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>&\nSparseMat_<_Tp>::operator = (const SparseMat_<_Tp>& m)\n{\n    if( this != &m )\n    {\n        if( m.hdr ) CV_XADD(&m.hdr->refcount, 1);\n        release();\n        flags = m.flags;\n        hdr = m.hdr;\n    }\n    return *this;\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>&\nSparseMat_<_Tp>::operator = (const SparseMat& m)\n{\n    if( m.type() == DataType<_Tp>::type )\n        return (*this = (const SparseMat_<_Tp>&)m);\n    m.convertTo(*this, DataType<_Tp>::type);\n    return *this;\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>&\nSparseMat_<_Tp>::operator = (const Mat& m)\n{ return (*this = SparseMat(m)); }\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>\nSparseMat_<_Tp>::clone() const\n{\n    SparseMat_<_Tp> m;\n    this->copyTo(m);\n    return m;\n}\n\ntemplate<typename _Tp> inline void\nSparseMat_<_Tp>::create(int _dims, const int* _sizes)\n{\n    SparseMat::create(_dims, _sizes, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>::operator CvSparseMat*() const\n{\n    return SparseMat::operator CvSparseMat*();\n}\n\ntemplate<typename _Tp> inline int SparseMat_<_Tp>::type() const\n{ return DataType<_Tp>::type; }\n\ntemplate<typename _Tp> inline int SparseMat_<_Tp>::depth() const\n{ return DataType<_Tp>::depth; }\n\ntemplate<typename _Tp> inline int SparseMat_<_Tp>::channels() const\n{ return DataType<_Tp>::channels; }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMat_<_Tp>::ref(int i0, size_t* hashval)\n{ return SparseMat::ref<_Tp>(i0, hashval); }\n\ntemplate<typename _Tp> inline _Tp\nSparseMat_<_Tp>::operator()(int i0, size_t* hashval) const\n{ return SparseMat::value<_Tp>(i0, hashval); }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMat_<_Tp>::ref(int i0, int i1, size_t* hashval)\n{ return SparseMat::ref<_Tp>(i0, i1, hashval); }\n\ntemplate<typename _Tp> inline _Tp\nSparseMat_<_Tp>::operator()(int i0, int i1, size_t* hashval) const\n{ return SparseMat::value<_Tp>(i0, i1, hashval); }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMat_<_Tp>::ref(int i0, int i1, int i2, size_t* hashval)\n{ return SparseMat::ref<_Tp>(i0, i1, i2, hashval); }\n\ntemplate<typename _Tp> inline _Tp\nSparseMat_<_Tp>::operator()(int i0, int i1, int i2, size_t* hashval) const\n{ return SparseMat::value<_Tp>(i0, i1, i2, hashval); }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMat_<_Tp>::ref(const int* idx, size_t* hashval)\n{ return SparseMat::ref<_Tp>(idx, hashval); }\n\ntemplate<typename _Tp> inline _Tp\nSparseMat_<_Tp>::operator()(const int* idx, size_t* hashval) const\n{ return SparseMat::value<_Tp>(idx, hashval); }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp> SparseMat_<_Tp>::begin()\n{ return SparseMatIterator_<_Tp>(this); }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::begin() const\n{ return SparseMatConstIterator_<_Tp>(this); }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp> SparseMat_<_Tp>::end()\n{ SparseMatIterator_<_Tp> it(this); it.seekEnd(); return it; }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::end() const\n{ SparseMatConstIterator_<_Tp> it(this); it.seekEnd(); return it; }\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_()\n{}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMat_<_Tp>* _m)\n: SparseMatConstIterator(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMat* _m)\n: SparseMatConstIterator(_m)\n{\n    CV_Assert( _m->type() == DataType<_Tp>::type );\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMatConstIterator_<_Tp>& it)\n: SparseMatConstIterator(it)\n{}\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp>&\nSparseMatConstIterator_<_Tp>::operator = (const SparseMatConstIterator_<_Tp>& it)\n{ return reinterpret_cast<SparseMatConstIterator_<_Tp>&>\n    (*reinterpret_cast<SparseMatConstIterator*>(this) =\n     reinterpret_cast<const SparseMatConstIterator&>(it)); }\n\ntemplate<typename _Tp> inline const _Tp&\nSparseMatConstIterator_<_Tp>::operator *() const\n{ return *(const _Tp*)this->ptr; }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp>&\nSparseMatConstIterator_<_Tp>::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp>\nSparseMatConstIterator_<_Tp>::operator ++(int)\n{\n    SparseMatConstIterator it = *this;\n    SparseMatConstIterator::operator ++();\n    return it;\n}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_()\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat_<_Tp>* _m)\n: SparseMatConstIterator_<_Tp>(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat* _m)\n: SparseMatConstIterator_<_Tp>(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(const SparseMatIterator_<_Tp>& it)\n: SparseMatConstIterator_<_Tp>(it)\n{}\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp>&\nSparseMatIterator_<_Tp>::operator = (const SparseMatIterator_<_Tp>& it)\n{ return reinterpret_cast<SparseMatIterator_<_Tp>&>\n    (*reinterpret_cast<SparseMatConstIterator*>(this) =\n     reinterpret_cast<const SparseMatConstIterator&>(it)); }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMatIterator_<_Tp>::operator *() const\n{ return *(_Tp*)this->ptr; }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp>&\nSparseMatIterator_<_Tp>::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp>\nSparseMatIterator_<_Tp>::operator ++(int)\n{\n    SparseMatIterator it = *this;\n    SparseMatConstIterator::operator ++();\n    return it;\n}\n\n}\n\n#endif\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/opengl_interop.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPENGL_INTEROP_HPP__\n#define __OPENCV_OPENGL_INTEROP_HPP__\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/opengl_interop_deprecated.hpp\"\n\nnamespace cv { namespace ogl {\n\n/////////////////// OpenGL Objects ///////////////////\n\n//! Smart pointer for OpenGL buffer memory with reference counting.\nclass CV_EXPORTS Buffer\n{\npublic:\n    enum Target\n    {\n        ARRAY_BUFFER         = 0x8892, //!< The buffer will be used as a source for vertex data\n        ELEMENT_ARRAY_BUFFER = 0x8893, //!< The buffer will be used for indices (in glDrawElements, for example)\n        PIXEL_PACK_BUFFER    = 0x88EB, //!< The buffer will be used for reading from OpenGL textures\n        PIXEL_UNPACK_BUFFER  = 0x88EC  //!< The buffer will be used for writing to OpenGL textures\n    };\n\n    enum Access\n    {\n        READ_ONLY  = 0x88B8,\n        WRITE_ONLY = 0x88B9,\n        READ_WRITE = 0x88BA\n    };\n\n    //! create empty buffer\n    Buffer();\n\n    //! create buffer from existed buffer id\n    Buffer(int arows, int acols, int atype, unsigned int abufId, bool autoRelease = false);\n    Buffer(Size asize, int atype, unsigned int abufId, bool autoRelease = false);\n\n    //! create buffer\n    Buffer(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n    Buffer(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    //! copy from host/device memory\n    explicit Buffer(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    //! create buffer\n    void create(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n    void create(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false) { create(asize.height, asize.width, atype, target, autoRelease); }\n\n    //! release memory and delete buffer object\n    void release();\n\n    //! set auto release mode (if true, release will be called in object's destructor)\n    void setAutoRelease(bool flag);\n\n    //! copy from host/device memory\n    void copyFrom(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    //! copy to host/device memory\n    void copyTo(OutputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false) const;\n\n    //! create copy of current buffer\n    Buffer clone(Target target = ARRAY_BUFFER, bool autoRelease = false) const;\n\n    //! bind buffer for specified target\n    void bind(Target target) const;\n\n    //! unbind any buffers from specified target\n    static void unbind(Target target);\n\n    //! map to host memory\n    Mat mapHost(Access access);\n    void unmapHost();\n\n    //! map to device memory\n    gpu::GpuMat mapDevice();\n    void unmapDevice();\n\n    int rows() const { return rows_; }\n    int cols() const { return cols_; }\n    Size size() const { return Size(cols_, rows_); }\n    bool empty() const { return rows_ == 0 || cols_ == 0; }\n\n    int type() const { return type_; }\n    int depth() const { return CV_MAT_DEPTH(type_); }\n    int channels() const { return CV_MAT_CN(type_); }\n    int elemSize() const { return CV_ELEM_SIZE(type_); }\n    int elemSize1() const { return CV_ELEM_SIZE1(type_); }\n\n    unsigned int bufId() const;\n\n    class Impl;\n\nprivate:\n    Ptr<Impl> impl_;\n    int rows_;\n    int cols_;\n    int type_;\n};\n\n//! Smart pointer for OpenGL 2D texture memory with reference counting.\nclass CV_EXPORTS Texture2D\n{\npublic:\n    enum Format\n    {\n        NONE            = 0,\n        DEPTH_COMPONENT = 0x1902, //!< Depth\n        RGB             = 0x1907, //!< Red, Green, Blue\n        RGBA            = 0x1908  //!< Red, Green, Blue, Alpha\n    };\n\n    //! create empty texture\n    Texture2D();\n\n    //! create texture from existed texture id\n    Texture2D(int arows, int acols, Format aformat, unsigned int atexId, bool autoRelease = false);\n    Texture2D(Size asize, Format aformat, unsigned int atexId, bool autoRelease = false);\n\n    //! create texture\n    Texture2D(int arows, int acols, Format aformat, bool autoRelease = false);\n    Texture2D(Size asize, Format aformat, bool autoRelease = false);\n\n    //! copy from host/device memory\n    explicit Texture2D(InputArray arr, bool autoRelease = false);\n\n    //! create texture\n    void create(int arows, int acols, Format aformat, bool autoRelease = false);\n    void create(Size asize, Format aformat, bool autoRelease = false) { create(asize.height, asize.width, aformat, autoRelease); }\n\n    //! release memory and delete texture object\n    void release();\n\n    //! set auto release mode (if true, release will be called in object's destructor)\n    void setAutoRelease(bool flag);\n\n    //! copy from host/device memory\n    void copyFrom(InputArray arr, bool autoRelease = false);\n\n    //! copy to host/device memory\n    void copyTo(OutputArray arr, int ddepth = CV_32F, bool autoRelease = false) const;\n\n    //! bind texture to current active texture unit for GL_TEXTURE_2D target\n    void bind() const;\n\n    int rows() const { return rows_; }\n    int cols() const { return cols_; }\n    Size size() const { return Size(cols_, rows_); }\n    bool empty() const { return rows_ == 0 || cols_ == 0; }\n\n    Format format() const { return format_; }\n\n    unsigned int texId() const;\n\n    class Impl;\n\nprivate:\n    Ptr<Impl> impl_;\n    int rows_;\n    int cols_;\n    Format format_;\n};\n\n//! OpenGL Arrays\nclass CV_EXPORTS Arrays\n{\npublic:\n    Arrays();\n\n    void setVertexArray(InputArray vertex);\n    void resetVertexArray();\n\n    void setColorArray(InputArray color);\n    void resetColorArray();\n\n    void setNormalArray(InputArray normal);\n    void resetNormalArray();\n\n    void setTexCoordArray(InputArray texCoord);\n    void resetTexCoordArray();\n\n    void release();\n\n    void setAutoRelease(bool flag);\n\n    void bind() const;\n\n    int size() const { return size_; }\n    bool empty() const { return size_ == 0; }\n\nprivate:\n    int size_;\n    Buffer vertex_;\n    Buffer color_;\n    Buffer normal_;\n    Buffer texCoord_;\n};\n\n/////////////////// Render Functions ///////////////////\n\n//! render texture rectangle in window\nCV_EXPORTS void render(const Texture2D& tex,\n    Rect_<double> wndRect = Rect_<double>(0.0, 0.0, 1.0, 1.0),\n    Rect_<double> texRect = Rect_<double>(0.0, 0.0, 1.0, 1.0));\n\n//! render mode\nenum {\n    POINTS         = 0x0000,\n    LINES          = 0x0001,\n    LINE_LOOP      = 0x0002,\n    LINE_STRIP     = 0x0003,\n    TRIANGLES      = 0x0004,\n    TRIANGLE_STRIP = 0x0005,\n    TRIANGLE_FAN   = 0x0006,\n    QUADS          = 0x0007,\n    QUAD_STRIP     = 0x0008,\n    POLYGON        = 0x0009\n};\n\n//! render OpenGL arrays\nCV_EXPORTS void render(const Arrays& arr, int mode = POINTS, Scalar color = Scalar::all(255));\nCV_EXPORTS void render(const Arrays& arr, InputArray indices, int mode = POINTS, Scalar color = Scalar::all(255));\n\n}} // namespace cv::gl\n\nnamespace cv { namespace gpu {\n\n//! set a CUDA device to use OpenGL interoperability\nCV_EXPORTS void setGlDevice(int device = 0);\n\n}}\n\nnamespace cv {\n\ntemplate <> CV_EXPORTS void Ptr<cv::ogl::Buffer::Impl>::delete_obj();\ntemplate <> CV_EXPORTS void Ptr<cv::ogl::Texture2D::Impl>::delete_obj();\n\n}\n\n#endif // __cplusplus\n\n#endif // __OPENCV_OPENGL_INTEROP_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/opengl_interop_deprecated.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__\n#define __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\n//! Smart pointer for OpenGL buffer memory with reference counting.\nclass CV_EXPORTS GlBuffer\n{\npublic:\n    enum Usage\n    {\n        ARRAY_BUFFER = 0x8892,  // buffer will use for OpenGL arrays (vertices, colors, normals, etc)\n        TEXTURE_BUFFER = 0x88EC // buffer will ise for OpenGL textures\n    };\n\n    //! create empty buffer\n    explicit GlBuffer(Usage usage);\n\n    //! create buffer\n    GlBuffer(int rows, int cols, int type, Usage usage);\n    GlBuffer(Size size, int type, Usage usage);\n\n    //! copy from host/device memory\n    GlBuffer(InputArray mat, Usage usage);\n\n    void create(int rows, int cols, int type, Usage usage);\n    void create(Size size, int type, Usage usage);\n    void create(int rows, int cols, int type);\n    void create(Size size, int type);\n\n    void release();\n\n    //! copy from host/device memory\n    void copyFrom(InputArray mat);\n\n    void bind() const;\n    void unbind() const;\n\n    //! map to host memory\n    Mat mapHost();\n    void unmapHost();\n\n    //! map to device memory\n    gpu::GpuMat mapDevice();\n    void unmapDevice();\n\n    inline int rows() const { return rows_; }\n    inline int cols() const { return cols_; }\n    inline Size size() const { return Size(cols_, rows_); }\n    inline bool empty() const { return rows_ == 0 || cols_ == 0; }\n\n    inline int type() const { return type_; }\n    inline int depth() const { return CV_MAT_DEPTH(type_); }\n    inline int channels() const { return CV_MAT_CN(type_); }\n    inline int elemSize() const { return CV_ELEM_SIZE(type_); }\n    inline int elemSize1() const { return CV_ELEM_SIZE1(type_); }\n\n    inline Usage usage() const { return usage_; }\n\n    class Impl;\nprivate:\n    int rows_;\n    int cols_;\n    int type_;\n    Usage usage_;\n\n    Ptr<Impl> impl_;\n};\n\ntemplate <> CV_EXPORTS void Ptr<GlBuffer::Impl>::delete_obj();\n\n//! Smart pointer for OpenGL 2d texture memory with reference counting.\nclass CV_EXPORTS GlTexture\n{\npublic:\n    //! create empty texture\n    GlTexture();\n\n    //! create texture\n    GlTexture(int rows, int cols, int type);\n    GlTexture(Size size, int type);\n\n    //! copy from host/device memory\n    explicit GlTexture(InputArray mat, bool bgra = true);\n\n    void create(int rows, int cols, int type);\n    void create(Size size, int type);\n    void release();\n\n    //! copy from host/device memory\n    void copyFrom(InputArray mat, bool bgra = true);\n\n    void bind() const;\n    void unbind() const;\n\n    inline int rows() const { return rows_; }\n    inline int cols() const { return cols_; }\n    inline Size size() const { return Size(cols_, rows_); }\n    inline bool empty() const { return rows_ == 0 || cols_ == 0; }\n\n    inline int type() const { return type_; }\n    inline int depth() const { return CV_MAT_DEPTH(type_); }\n    inline int channels() const { return CV_MAT_CN(type_); }\n    inline int elemSize() const { return CV_ELEM_SIZE(type_); }\n    inline int elemSize1() const { return CV_ELEM_SIZE1(type_); }\n\n    class Impl;\nprivate:\n    int rows_;\n    int cols_;\n    int type_;\n\n    Ptr<Impl> impl_;\n    GlBuffer buf_;\n};\n\ntemplate <> CV_EXPORTS void Ptr<GlTexture::Impl>::delete_obj();\n\n//! OpenGL Arrays\nclass CV_EXPORTS GlArrays\n{\npublic:\n    inline GlArrays()\n        : vertex_(GlBuffer::ARRAY_BUFFER), color_(GlBuffer::ARRAY_BUFFER), bgra_(true), normal_(GlBuffer::ARRAY_BUFFER), texCoord_(GlBuffer::ARRAY_BUFFER)\n    {\n    }\n\n    void setVertexArray(InputArray vertex);\n    inline void resetVertexArray() { vertex_.release(); }\n\n    void setColorArray(InputArray color, bool bgra = true);\n    inline void resetColorArray() { color_.release(); }\n\n    void setNormalArray(InputArray normal);\n    inline void resetNormalArray() { normal_.release(); }\n\n    void setTexCoordArray(InputArray texCoord);\n    inline void resetTexCoordArray() { texCoord_.release(); }\n\n    void bind() const;\n    void unbind() const;\n\n    inline int rows() const { return vertex_.rows(); }\n    inline int cols() const { return vertex_.cols(); }\n    inline Size size() const { return vertex_.size(); }\n    inline bool empty() const { return vertex_.empty(); }\n\nprivate:\n    GlBuffer vertex_;\n    GlBuffer color_;\n    bool bgra_;\n    GlBuffer normal_;\n    GlBuffer texCoord_;\n};\n\n//! OpenGL Font\nclass CV_EXPORTS GlFont\n{\npublic:\n    enum Weight\n    {\n        WEIGHT_LIGHT    = 300,\n        WEIGHT_NORMAL   = 400,\n        WEIGHT_SEMIBOLD = 600,\n        WEIGHT_BOLD     = 700,\n        WEIGHT_BLACK    = 900\n    };\n\n    enum Style\n    {\n        STYLE_NORMAL    = 0,\n        STYLE_ITALIC    = 1,\n        STYLE_UNDERLINE = 2\n    };\n\n    static Ptr<GlFont> get(const std::string& family, int height = 12, Weight weight = WEIGHT_NORMAL, Style style = STYLE_NORMAL);\n\n    void draw(const char* str, int len) const;\n\n    inline const std::string& family() const { return family_; }\n    inline int height() const { return height_; }\n    inline Weight weight() const { return weight_; }\n    inline Style style() const { return style_; }\n\nprivate:\n    GlFont(const std::string& family, int height, Weight weight, Style style);\n\n    std::string family_;\n    int height_;\n    Weight weight_;\n    Style style_;\n\n    unsigned int base_;\n\n    GlFont(const GlFont&);\n    GlFont& operator =(const GlFont&);\n};\n\n//! render functions\n\n//! render texture rectangle in window\nCV_EXPORTS void render(const GlTexture& tex,\n    Rect_<double> wndRect = Rect_<double>(0.0, 0.0, 1.0, 1.0),\n    Rect_<double> texRect = Rect_<double>(0.0, 0.0, 1.0, 1.0));\n\n//! render mode\nnamespace RenderMode {\n    enum {\n        POINTS         = 0x0000,\n        LINES          = 0x0001,\n        LINE_LOOP      = 0x0002,\n        LINE_STRIP     = 0x0003,\n        TRIANGLES      = 0x0004,\n        TRIANGLE_STRIP = 0x0005,\n        TRIANGLE_FAN   = 0x0006,\n        QUADS          = 0x0007,\n        QUAD_STRIP     = 0x0008,\n        POLYGON        = 0x0009\n    };\n}\n\n//! render OpenGL arrays\nCV_EXPORTS void render(const GlArrays& arr, int mode = RenderMode::POINTS, Scalar color = Scalar::all(255));\n\nCV_EXPORTS void render(const std::string& str, const Ptr<GlFont>& font, Scalar color, Point2d pos);\n\n//! OpenGL camera\nclass CV_EXPORTS GlCamera\n{\npublic:\n    GlCamera();\n\n    void lookAt(Point3d eye, Point3d center, Point3d up);\n    void setCameraPos(Point3d pos, double yaw, double pitch, double roll);\n\n    void setScale(Point3d scale);\n\n    void setProjectionMatrix(const Mat& projectionMatrix, bool transpose = true);\n    void setPerspectiveProjection(double fov, double aspect, double zNear, double zFar);\n    void setOrthoProjection(double left, double right, double bottom, double top, double zNear, double zFar);\n\n    void setupProjectionMatrix() const;\n    void setupModelViewMatrix() const;\n\nprivate:\n    Point3d eye_;\n    Point3d center_;\n    Point3d up_;\n\n    Point3d pos_;\n    double yaw_;\n    double pitch_;\n    double roll_;\n\n    bool useLookAtParams_;\n\n    Point3d scale_;\n\n    Mat projectionMatrix_;\n\n    double fov_;\n    double aspect_;\n\n    double left_;\n    double right_;\n    double bottom_;\n    double top_;\n\n    double zNear_;\n    double zFar_;\n\n    bool perspectiveProjection_;\n};\n\ninline void GlBuffer::create(Size _size, int _type, Usage _usage) { create(_size.height, _size.width, _type, _usage); }\ninline void GlBuffer::create(int _rows, int _cols, int _type) { create(_rows, _cols, _type, usage()); }\ninline void GlBuffer::create(Size _size, int _type) { create(_size.height, _size.width, _type, usage()); }\ninline void GlTexture::create(Size _size, int _type) { create(_size.height, _size.width, _type); }\n\n} // namespace cv\n\n#endif // __cplusplus\n\n#endif // __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/operations.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_OPERATIONS_HPP__\n#define __OPENCV_CORE_OPERATIONS_HPP__\n\n#ifndef SKIP_INCLUDES\n  #include <string.h>\n  #include <limits.h>\n#endif // SKIP_INCLUDES\n\n\n#ifdef __cplusplus\n\n/////// exchange-add operation for atomic operations on reference counters ///////\n#if defined __INTEL_COMPILER && !(defined WIN32 || defined _WIN32)   // atomic increment on the linux version of the Intel(tm) compiler\n  #define CV_XADD(addr,delta) _InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(addr)), delta)\n#elif defined __GNUC__\n\n  #if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ && !defined __EMSCRIPTEN__\n    #ifdef __ATOMIC_SEQ_CST\n        #define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), (delta), __ATOMIC_SEQ_CST)\n    #else\n        #define CV_XADD(addr, delta) __atomic_fetch_add((_Atomic(int)*)(addr), (delta), 5)\n    #endif\n  #elif __GNUC__*10 + __GNUC_MINOR__ >= 42\n\n    #if !(defined WIN32 || defined _WIN32) && (defined __i486__ || defined __i586__ || \\\n        defined __i686__ || defined __MMX__ || defined __SSE__  || defined __ppc__) || \\\n        (defined __GNUC__ && defined _STLPORT_MAJOR) || \\\n        defined __EMSCRIPTEN__\n\n      #define CV_XADD __sync_fetch_and_add\n    #else\n      #include <ext/atomicity.h>\n      #define CV_XADD __gnu_cxx::__exchange_and_add\n    #endif\n\n  #else\n    #include <bits/atomicity.h>\n    #if __GNUC__*10 + __GNUC_MINOR__ >= 34\n      #define CV_XADD __gnu_cxx::__exchange_and_add\n    #else\n      #define CV_XADD __exchange_and_add\n    #endif\n  #endif\n\n#elif defined WIN32 || defined _WIN32 || defined WINCE\n  namespace cv { CV_EXPORTS int _interlockedExchangeAdd(int* addr, int delta); }\n  #define CV_XADD cv::_interlockedExchangeAdd\n\n#else\n  static inline int CV_XADD(int* addr, int delta)\n  { int tmp = *addr; *addr += delta; return tmp; }\n#endif\n\n#include <limits>\n\n#ifdef _MSC_VER\n# pragma warning(push)\n# pragma warning(disable:4127) //conditional expression is constant\n#endif\n\nnamespace cv\n{\n\nusing std::cos;\nusing std::sin;\nusing std::max;\nusing std::min;\nusing std::exp;\nusing std::log;\nusing std::pow;\nusing std::sqrt;\n\n\n/////////////// saturate_cast (used in image & signal processing) ///////////////////\n\ntemplate<typename _Tp> static inline _Tp saturate_cast(uchar v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(schar v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(ushort v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(short v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(unsigned v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(int v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(float v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(double v) { return _Tp(v); }\n\ntemplate<> inline uchar saturate_cast<uchar>(schar v)\n{ return (uchar)std::max((int)v, 0); }\ntemplate<> inline uchar saturate_cast<uchar>(ushort v)\n{ return (uchar)std::min((unsigned)v, (unsigned)UCHAR_MAX); }\ntemplate<> inline uchar saturate_cast<uchar>(int v)\n{ return (uchar)((unsigned)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); }\ntemplate<> inline uchar saturate_cast<uchar>(short v)\n{ return saturate_cast<uchar>((int)v); }\ntemplate<> inline uchar saturate_cast<uchar>(unsigned v)\n{ return (uchar)std::min(v, (unsigned)UCHAR_MAX); }\ntemplate<> inline uchar saturate_cast<uchar>(float v)\n{ int iv = cvRound(v); return saturate_cast<uchar>(iv); }\ntemplate<> inline uchar saturate_cast<uchar>(double v)\n{ int iv = cvRound(v); return saturate_cast<uchar>(iv); }\n\ntemplate<> inline schar saturate_cast<schar>(uchar v)\n{ return (schar)std::min((int)v, SCHAR_MAX); }\ntemplate<> inline schar saturate_cast<schar>(ushort v)\n{ return (schar)std::min((unsigned)v, (unsigned)SCHAR_MAX); }\ntemplate<> inline schar saturate_cast<schar>(int v)\n{\n    return (schar)((unsigned)(v-SCHAR_MIN) <= (unsigned)UCHAR_MAX ?\n                v : v > 0 ? SCHAR_MAX : SCHAR_MIN);\n}\ntemplate<> inline schar saturate_cast<schar>(short v)\n{ return saturate_cast<schar>((int)v); }\ntemplate<> inline schar saturate_cast<schar>(unsigned v)\n{ return (schar)std::min(v, (unsigned)SCHAR_MAX); }\n\ntemplate<> inline schar saturate_cast<schar>(float v)\n{ int iv = cvRound(v); return saturate_cast<schar>(iv); }\ntemplate<> inline schar saturate_cast<schar>(double v)\n{ int iv = cvRound(v); return saturate_cast<schar>(iv); }\n\ntemplate<> inline ushort saturate_cast<ushort>(schar v)\n{ return (ushort)std::max((int)v, 0); }\ntemplate<> inline ushort saturate_cast<ushort>(short v)\n{ return (ushort)std::max((int)v, 0); }\ntemplate<> inline ushort saturate_cast<ushort>(int v)\n{ return (ushort)((unsigned)v <= (unsigned)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); }\ntemplate<> inline ushort saturate_cast<ushort>(unsigned v)\n{ return (ushort)std::min(v, (unsigned)USHRT_MAX); }\ntemplate<> inline ushort saturate_cast<ushort>(float v)\n{ int iv = cvRound(v); return saturate_cast<ushort>(iv); }\ntemplate<> inline ushort saturate_cast<ushort>(double v)\n{ int iv = cvRound(v); return saturate_cast<ushort>(iv); }\n\ntemplate<> inline short saturate_cast<short>(ushort v)\n{ return (short)std::min((int)v, SHRT_MAX); }\ntemplate<> inline short saturate_cast<short>(int v)\n{\n    return (short)((unsigned)(v - SHRT_MIN) <= (unsigned)USHRT_MAX ?\n            v : v > 0 ? SHRT_MAX : SHRT_MIN);\n}\ntemplate<> inline short saturate_cast<short>(unsigned v)\n{ return (short)std::min(v, (unsigned)SHRT_MAX); }\ntemplate<> inline short saturate_cast<short>(float v)\n{ int iv = cvRound(v); return saturate_cast<short>(iv); }\ntemplate<> inline short saturate_cast<short>(double v)\n{ int iv = cvRound(v); return saturate_cast<short>(iv); }\n\ntemplate<> inline int saturate_cast<int>(float v) { return cvRound(v); }\ntemplate<> inline int saturate_cast<int>(double v) { return cvRound(v); }\n\n// we intentionally do not clip negative numbers, to make -1 become 0xffffffff etc.\ntemplate<> inline unsigned saturate_cast<unsigned>(float v){ return cvRound(v); }\ntemplate<> inline unsigned saturate_cast<unsigned>(double v) { return cvRound(v); }\n\ninline int fast_abs(uchar v) { return v; }\ninline int fast_abs(schar v) { return std::abs((int)v); }\ninline int fast_abs(ushort v) { return v; }\ninline int fast_abs(short v) { return std::abs((int)v); }\ninline int fast_abs(int v) { return std::abs(v); }\ninline float fast_abs(float v) { return std::abs(v); }\ninline double fast_abs(double v) { return std::abs(v); }\n\n//////////////////////////////// Matx /////////////////////////////////\n\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx()\n{\n    for(int i = 0; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0)\n{\n    val[0] = v0;\n    for(int i = 1; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1)\n{\n    assert(channels >= 2);\n    val[0] = v0; val[1] = v1;\n    for(int i = 2; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2)\n{\n    assert(channels >= 3);\n    val[0] = v0; val[1] = v1; val[2] = v2;\n    for(int i = 3; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n{\n    assert(channels >= 4);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    for(int i = 4; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4)\n{\n    assert(channels >= 5);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; val[4] = v4;\n    for(int i = 5; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5)\n{\n    assert(channels >= 6);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5;\n    for(int i = 6; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6)\n{\n    assert(channels >= 7);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6;\n    for(int i = 7; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7)\n{\n    assert(channels >= 8);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    for(int i = 8; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                                                        _Tp v8)\n{\n    assert(channels >= 9);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8;\n    for(int i = 9; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                                                        _Tp v8, _Tp v9)\n{\n    assert(channels >= 10);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9;\n    for(int i = 10; i < channels; i++) val[i] = _Tp(0);\n}\n\n\ntemplate<typename _Tp, int m, int n>\ninline Matx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                            _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                            _Tp v8, _Tp v9, _Tp v10, _Tp v11)\n{\n    assert(channels == 12);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11;\n}\n\ntemplate<typename _Tp, int m, int n>\ninline Matx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                           _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                           _Tp v8, _Tp v9, _Tp v10, _Tp v11,\n                           _Tp v12, _Tp v13, _Tp v14, _Tp v15)\n{\n    assert(channels == 16);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11;\n    val[12] = v12; val[13] = v13; val[14] = v14; val[15] = v15;\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(const _Tp* values)\n{\n    for( int i = 0; i < channels; i++ ) val[i] = values[i];\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n> Matx<_Tp, m, n>::all(_Tp alpha)\n{\n    Matx<_Tp, m, n> M;\n    for( int i = 0; i < m*n; i++ ) M.val[i] = alpha;\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::zeros()\n{\n    return all(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::ones()\n{\n    return all(1);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::eye()\n{\n    Matx<_Tp,m,n> M;\n    for(int i = 0; i < MIN(m,n); i++)\n        M(i,i) = 1;\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline _Tp Matx<_Tp, m, n>::dot(const Matx<_Tp, m, n>& M) const\n{\n    _Tp s = 0;\n    for( int i = 0; i < m*n; i++ ) s += val[i]*M.val[i];\n    return s;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline double Matx<_Tp, m, n>::ddot(const Matx<_Tp, m, n>& M) const\n{\n    double s = 0;\n    for( int i = 0; i < m*n; i++ ) s += (double)val[i]*M.val[i];\n    return s;\n}\n\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::diag(const typename Matx<_Tp,m,n>::diag_type& d)\n{\n    Matx<_Tp,m,n> M;\n    for(int i = 0; i < MIN(m,n); i++)\n        M(i,i) = d(i, 0);\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::randu(_Tp a, _Tp b)\n{\n    Matx<_Tp,m,n> M;\n    Mat matM(M, false);\n    cv::randu(matM, Scalar(a), Scalar(b));\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::randn(_Tp a, _Tp b)\n{\n    Matx<_Tp,m,n> M;\n    Mat matM(M, false);\n    cv::randn(matM, Scalar(a), Scalar(b));\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> template<typename T2>\ninline Matx<_Tp, m, n>::operator Matx<T2, m, n>() const\n{\n    Matx<T2, m, n> M;\n    for( int i = 0; i < m*n; i++ ) M.val[i] = saturate_cast<T2>(val[i]);\n    return M;\n}\n\n\ntemplate<typename _Tp, int m, int n> template<int m1, int n1> inline\nMatx<_Tp, m1, n1> Matx<_Tp, m, n>::reshape() const\n{\n    CV_DbgAssert(m1*n1 == m*n);\n    return (const Matx<_Tp, m1, n1>&)*this;\n}\n\n\ntemplate<typename _Tp, int m, int n>\ntemplate<int m1, int n1> inline\nMatx<_Tp, m1, n1> Matx<_Tp, m, n>::get_minor(int i, int j) const\n{\n    CV_DbgAssert(0 <= i && i+m1 <= m && 0 <= j && j+n1 <= n);\n    Matx<_Tp, m1, n1> s;\n    for( int di = 0; di < m1; di++ )\n        for( int dj = 0; dj < n1; dj++ )\n            s(di, dj) = (*this)(i+di, j+dj);\n    return s;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, 1, n> Matx<_Tp, m, n>::row(int i) const\n{\n    CV_DbgAssert((unsigned)i < (unsigned)m);\n    return Matx<_Tp, 1, n>(&val[i*n]);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, 1> Matx<_Tp, m, n>::col(int j) const\n{\n    CV_DbgAssert((unsigned)j < (unsigned)n);\n    Matx<_Tp, m, 1> v;\n    for( int i = 0; i < m; i++ )\n        v.val[i] = val[i*n + j];\n    return v;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\ntypename Matx<_Tp, m, n>::diag_type Matx<_Tp, m, n>::diag() const\n{\n    diag_type d;\n    for( int i = 0; i < MIN(m, n); i++ )\n        d.val[i] = val[i*n + i];\n    return d;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nconst _Tp& Matx<_Tp, m, n>::operator ()(int i, int j) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)m && (unsigned)j < (unsigned)n );\n    return this->val[i*n + j];\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\n_Tp& Matx<_Tp, m, n>::operator ()(int i, int j)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)m && (unsigned)j < (unsigned)n );\n    return val[i*n + j];\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nconst _Tp& Matx<_Tp, m, n>::operator ()(int i) const\n{\n    CV_DbgAssert( (m == 1 || n == 1) && (unsigned)i < (unsigned)(m+n-1) );\n    return val[i];\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\n_Tp& Matx<_Tp, m, n>::operator ()(int i)\n{\n    CV_DbgAssert( (m == 1 || n == 1) && (unsigned)i < (unsigned)(m+n-1) );\n    return val[i];\n}\n\n\ntemplate<typename _Tp1, typename _Tp2, int m, int n> static inline\nMatx<_Tp1, m, n>& operator += (Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] + b.val[i]);\n    return a;\n}\n\n\ntemplate<typename _Tp1, typename _Tp2, int m, int n> static inline\nMatx<_Tp1, m, n>& operator -= (Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] - b.val[i]);\n    return a;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_AddOp)\n{\n    for( int i = 0; i < m*n; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] + b.val[i]);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp)\n{\n    for( int i = 0; i < m*n; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] - b.val[i]);\n}\n\n\ntemplate<typename _Tp, int m, int n> template<typename _T2> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp)\n{\n    for( int i = 0; i < m*n; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp)\n{\n    for( int i = 0; i < m*n; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] * b.val[i]);\n}\n\n\ntemplate<typename _Tp, int m, int n> template<int l> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp)\n{\n    for( int i = 0; i < m; i++ )\n        for( int j = 0; j < n; j++ )\n        {\n            _Tp s = 0;\n            for( int k = 0; k < l; k++ )\n                s += a(i, k) * b(k, j);\n            val[i*n + j] = s;\n        }\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, n, m>& a, Matx_TOp)\n{\n    for( int i = 0; i < m; i++ )\n        for( int j = 0; j < n; j++ )\n            val[i*n + j] = a(j, i);\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator + (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_AddOp());\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator - (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_SubOp());\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, int alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, float alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, double alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, int alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, float alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, double alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (int alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (float alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (double alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator - (const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, -1, Matx_ScaleOp());\n}\n\n\ntemplate<typename _Tp, int m, int n, int l> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_MatMulOp());\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nVec<_Tp, m> operator * (const Matx<_Tp, m, n>& a, const Vec<_Tp, n>& b)\n{\n    Matx<_Tp, m, 1> c(a, b, Matx_MatMulOp());\n    return reinterpret_cast<const Vec<_Tp, m>&>(c);\n}\n\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (const Matx<_Tp, 2, 2>& a, const Point_<_Tp>& b)\n{\n    Matx<_Tp, 2, 1> tmp = a*Vec<_Tp,2>(b.x, b.y);\n    return Point_<_Tp>(tmp.val[0], tmp.val[1]);\n}\n\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Matx<_Tp, 3, 3>& a, const Point3_<_Tp>& b)\n{\n    Matx<_Tp, 3, 1> tmp = a*Vec<_Tp,3>(b.x, b.y, b.z);\n    return Point3_<_Tp>(tmp.val[0], tmp.val[1], tmp.val[2]);\n}\n\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Matx<_Tp, 3, 3>& a, const Point_<_Tp>& b)\n{\n    Matx<_Tp, 3, 1> tmp = a*Vec<_Tp,3>(b.x, b.y, 1);\n    return Point3_<_Tp>(tmp.val[0], tmp.val[1], tmp.val[2]);\n}\n\n\ntemplate<typename _Tp> static inline\nMatx<_Tp, 4, 1> operator * (const Matx<_Tp, 4, 4>& a, const Point3_<_Tp>& b)\n{\n    return a*Matx<_Tp, 4, 1>(b.x, b.y, b.z, 1);\n}\n\n\ntemplate<typename _Tp> static inline\nScalar operator * (const Matx<_Tp, 4, 4>& a, const Scalar& b)\n{\n    Matx<double, 4, 1> c(Matx<double, 4, 4>(a), b, Matx_MatMulOp());\n    return static_cast<const Scalar&>(c);\n}\n\n\nstatic inline\nScalar operator * (const Matx<double, 4, 4>& a, const Scalar& b)\n{\n    Matx<double, 4, 1> c(a, b, Matx_MatMulOp());\n    return static_cast<const Scalar&>(c);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n> Matx<_Tp, m, n>::mul(const Matx<_Tp, m, n>& a) const\n{\n    return Matx<_Tp, m, n>(*this, a, Matx_MulOp());\n}\n\n\nCV_EXPORTS int LU(float* A, size_t astep, int m, float* b, size_t bstep, int n);\nCV_EXPORTS int LU(double* A, size_t astep, int m, double* b, size_t bstep, int n);\nCV_EXPORTS bool Cholesky(float* A, size_t astep, int m, float* b, size_t bstep, int n);\nCV_EXPORTS bool Cholesky(double* A, size_t astep, int m, double* b, size_t bstep, int n);\n\n\ntemplate<typename _Tp, int m> struct Matx_DetOp\n{\n    double operator ()(const Matx<_Tp, m, m>& a) const\n    {\n        Matx<_Tp, m, m> temp = a;\n        double p = LU(temp.val, m*sizeof(_Tp), m, 0, 0, 0);\n        if( p == 0 )\n            return p;\n        for( int i = 0; i < m; i++ )\n            p *= temp(i, i);\n        return 1./p;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 1>\n{\n    double operator ()(const Matx<_Tp, 1, 1>& a) const\n    {\n        return a(0,0);\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 2>\n{\n    double operator ()(const Matx<_Tp, 2, 2>& a) const\n    {\n        return a(0,0)*a(1,1) - a(0,1)*a(1,0);\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 3>\n{\n    double operator ()(const Matx<_Tp, 3, 3>& a) const\n    {\n        return a(0,0)*(a(1,1)*a(2,2) - a(2,1)*a(1,2)) -\n            a(0,1)*(a(1,0)*a(2,2) - a(2,0)*a(1,2)) +\n            a(0,2)*(a(1,0)*a(2,1) - a(2,0)*a(1,1));\n    }\n};\n\ntemplate<typename _Tp, int m> static inline\ndouble determinant(const Matx<_Tp, m, m>& a)\n{\n    return Matx_DetOp<_Tp, m>()(a);\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble trace(const Matx<_Tp, m, n>& a)\n{\n    _Tp s = 0;\n    for( int i = 0; i < std::min(m, n); i++ )\n        s += a(i,i);\n    return s;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, n, m> Matx<_Tp, m, n>::t() const\n{\n    return Matx<_Tp, n, m>(*this, Matx_TOp());\n}\n\n\ntemplate<typename _Tp, int m> struct Matx_FastInvOp\n{\n    bool operator()(const Matx<_Tp, m, m>& a, Matx<_Tp, m, m>& b, int method) const\n    {\n        Matx<_Tp, m, m> temp = a;\n\n        // assume that b is all 0's on input => make it a unity matrix\n        for( int i = 0; i < m; i++ )\n            b(i, i) = (_Tp)1;\n\n        if( method == DECOMP_CHOLESKY )\n            return Cholesky(temp.val, m*sizeof(_Tp), m, b.val, m*sizeof(_Tp), m);\n\n        return LU(temp.val, m*sizeof(_Tp), m, b.val, m*sizeof(_Tp), m) != 0;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_FastInvOp<_Tp, 2>\n{\n    bool operator()(const Matx<_Tp, 2, 2>& a, Matx<_Tp, 2, 2>& b, int) const\n    {\n        _Tp d = determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        b(1,1) = a(0,0)*d;\n        b(0,0) = a(1,1)*d;\n        b(0,1) = -a(0,1)*d;\n        b(1,0) = -a(1,0)*d;\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_FastInvOp<_Tp, 3>\n{\n    bool operator()(const Matx<_Tp, 3, 3>& a, Matx<_Tp, 3, 3>& b, int) const\n    {\n        _Tp d = (_Tp)determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        b(0,0) = (a(1,1) * a(2,2) - a(1,2) * a(2,1)) * d;\n        b(0,1) = (a(0,2) * a(2,1) - a(0,1) * a(2,2)) * d;\n        b(0,2) = (a(0,1) * a(1,2) - a(0,2) * a(1,1)) * d;\n\n        b(1,0) = (a(1,2) * a(2,0) - a(1,0) * a(2,2)) * d;\n        b(1,1) = (a(0,0) * a(2,2) - a(0,2) * a(2,0)) * d;\n        b(1,2) = (a(0,2) * a(1,0) - a(0,0) * a(1,2)) * d;\n\n        b(2,0) = (a(1,0) * a(2,1) - a(1,1) * a(2,0)) * d;\n        b(2,1) = (a(0,1) * a(2,0) - a(0,0) * a(2,1)) * d;\n        b(2,2) = (a(0,0) * a(1,1) - a(0,1) * a(1,0)) * d;\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, n, m> Matx<_Tp, m, n>::inv(int method) const\n{\n    Matx<_Tp, n, m> b;\n    bool ok;\n    if( method == DECOMP_LU || method == DECOMP_CHOLESKY )\n        ok = Matx_FastInvOp<_Tp, m>()(*this, b, method);\n    else\n    {\n        Mat A(*this, false), B(b, false);\n        ok = (invert(A, B, method) != 0);\n    }\n    return ok ? b : Matx<_Tp, n, m>::zeros();\n}\n\n\ntemplate<typename _Tp, int m, int n> struct Matx_FastSolveOp\n{\n    bool operator()(const Matx<_Tp, m, m>& a, const Matx<_Tp, m, n>& b,\n                    Matx<_Tp, m, n>& x, int method) const\n    {\n        Matx<_Tp, m, m> temp = a;\n        x = b;\n        if( method == DECOMP_CHOLESKY )\n            return Cholesky(temp.val, m*sizeof(_Tp), m, x.val, n*sizeof(_Tp), n);\n\n        return LU(temp.val, m*sizeof(_Tp), m, x.val, n*sizeof(_Tp), n) != 0;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_FastSolveOp<_Tp, 2, 1>\n{\n    bool operator()(const Matx<_Tp, 2, 2>& a, const Matx<_Tp, 2, 1>& b,\n                    Matx<_Tp, 2, 1>& x, int) const\n    {\n        _Tp d = determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        x(0) = (b(0)*a(1,1) - b(1)*a(0,1))*d;\n        x(1) = (b(1)*a(0,0) - b(0)*a(1,0))*d;\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_FastSolveOp<_Tp, 3, 1>\n{\n    bool operator()(const Matx<_Tp, 3, 3>& a, const Matx<_Tp, 3, 1>& b,\n                    Matx<_Tp, 3, 1>& x, int) const\n    {\n        _Tp d = (_Tp)determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        x(0) = d*(b(0)*(a(1,1)*a(2,2) - a(1,2)*a(2,1)) -\n                a(0,1)*(b(1)*a(2,2) - a(1,2)*b(2)) +\n                a(0,2)*(b(1)*a(2,1) - a(1,1)*b(2)));\n\n        x(1) = d*(a(0,0)*(b(1)*a(2,2) - a(1,2)*b(2)) -\n                b(0)*(a(1,0)*a(2,2) - a(1,2)*a(2,0)) +\n                a(0,2)*(a(1,0)*b(2) - b(1)*a(2,0)));\n\n        x(2) = d*(a(0,0)*(a(1,1)*b(2) - b(1)*a(2,1)) -\n                a(0,1)*(a(1,0)*b(2) - b(1)*a(2,0)) +\n                b(0)*(a(1,0)*a(2,1) - a(1,1)*a(2,0)));\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp, int m, int n> template<int l> inline\nMatx<_Tp, n, l> Matx<_Tp, m, n>::solve(const Matx<_Tp, m, l>& rhs, int method) const\n{\n    Matx<_Tp, n, l> x;\n    bool ok;\n    if( method == DECOMP_LU || method == DECOMP_CHOLESKY )\n        ok = Matx_FastSolveOp<_Tp, m, l>()(*this, rhs, x, method);\n    else\n    {\n        Mat A(*this, false), B(rhs, false), X(x, false);\n        ok = cv::solve(A, B, X, method);\n    }\n\n    return ok ? x : Matx<_Tp, n, l>::zeros();\n}\n\ntemplate<typename _Tp, int m, int n> inline\nVec<_Tp, n> Matx<_Tp, m, n>::solve(const Vec<_Tp, m>& rhs, int method) const\n{\n    Matx<_Tp, n, 1> x = solve(reinterpret_cast<const Matx<_Tp, m, 1>&>(rhs), method);\n    return reinterpret_cast<Vec<_Tp, n>&>(x);\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL2Sqr(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    int i=0;\n #if CV_ENABLE_UNROLLED\n    for( ; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = a[i], v1 = a[i+1], v2 = a[i+2], v3 = a[i+3];\n        s += v0*v0 + v1*v1 + v2*v2 + v3*v3;\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = a[i];\n        s += v*v;\n    }\n    return s;\n}\n\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL1(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    int i = 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        s += (_AccTp)fast_abs(a[i]) + (_AccTp)fast_abs(a[i+1]) +\n            (_AccTp)fast_abs(a[i+2]) + (_AccTp)fast_abs(a[i+3]);\n    }\n#endif\n    for( ; i < n; i++ )\n        s += fast_abs(a[i]);\n    return s;\n}\n\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normInf(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    for( int i = 0; i < n; i++ )\n        s = std::max(s, (_AccTp)fast_abs(a[i]));\n    return s;\n}\n\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL2Sqr(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    int i= 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]);\n        s += v0*v0 + v1*v1 + v2*v2 + v3*v3;\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = _AccTp(a[i] - b[i]);\n        s += v*v;\n    }\n    return s;\n}\n\nCV_EXPORTS float normL2Sqr_(const float* a, const float* b, int n);\nCV_EXPORTS float normL1_(const float* a, const float* b, int n);\nCV_EXPORTS int normL1_(const uchar* a, const uchar* b, int n);\nCV_EXPORTS int normHamming(const uchar* a, const uchar* b, int n);\nCV_EXPORTS int normHamming(const uchar* a, const uchar* b, int n, int cellSize);\n\ntemplate<> inline float normL2Sqr(const float* a, const float* b, int n)\n{\n    if( n >= 8 )\n        return normL2Sqr_(a, b, n);\n    float s = 0;\n    for( int i = 0; i < n; i++ )\n    {\n        float v = a[i] - b[i];\n        s += v*v;\n    }\n    return s;\n}\n\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL1(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    int i= 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]);\n        s += std::abs(v0) + std::abs(v1) + std::abs(v2) + std::abs(v3);\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = _AccTp(a[i] - b[i]);\n        s += std::abs(v);\n    }\n    return s;\n}\n\ntemplate<> inline float normL1(const float* a, const float* b, int n)\n{\n    if( n >= 8 )\n        return normL1_(a, b, n);\n    float s = 0;\n    for( int i = 0; i < n; i++ )\n    {\n        float v = a[i] - b[i];\n        s += std::abs(v);\n    }\n    return s;\n}\n\ntemplate<> inline int normL1(const uchar* a, const uchar* b, int n)\n{\n    return normL1_(a, b, n);\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normInf(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    for( int i = 0; i < n; i++ )\n    {\n        _AccTp v0 = a[i] - b[i];\n        s = std::max(s, std::abs(v0));\n    }\n    return s;\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble norm(const Matx<_Tp, m, n>& M)\n{\n    return std::sqrt(normL2Sqr<_Tp, double>(M.val, m*n));\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble norm(const Matx<_Tp, m, n>& M, int normType)\n{\n    return normType == NORM_INF ? (double)normInf<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n) :\n        normType == NORM_L1 ? (double)normL1<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n) :\n        std::sqrt((double)normL2Sqr<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n));\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nbool operator == (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        if( a.val[i] != b.val[i] ) return false;\n    return true;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nbool operator != (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return !(a == b);\n}\n\n\ntemplate<typename _Tp, typename _T2, int m, int n> static inline\nMatxCommaInitializer<_Tp, m, n> operator << (const Matx<_Tp, m, n>& mtx, _T2 val)\n{\n    MatxCommaInitializer<_Tp, m, n> commaInitializer((Matx<_Tp, m, n>*)&mtx);\n    return (commaInitializer, val);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatxCommaInitializer<_Tp, m, n>::MatxCommaInitializer(Matx<_Tp, m, n>* _mtx)\n    : dst(_mtx), idx(0)\n{}\n\ntemplate<typename _Tp, int m, int n> template<typename _T2> inline\nMatxCommaInitializer<_Tp, m, n>& MatxCommaInitializer<_Tp, m, n>::operator , (_T2 value)\n{\n    CV_DbgAssert( idx < m*n );\n    dst->val[idx++] = saturate_cast<_Tp>(value);\n    return *this;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n> MatxCommaInitializer<_Tp, m, n>::operator *() const\n{\n    CV_DbgAssert( idx == n*m );\n    return *dst;\n}\n\n/////////////////////////// short vector (Vec) /////////////////////////////\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec()\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0)\n    : Matx<_Tp, cn, 1>(v0)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1)\n    : Matx<_Tp, cn, 1>(v0, v1)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2)\n    : Matx<_Tp, cn, 1>(v0, v1, v2)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                                                        _Tp v8)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                                                        _Tp v8, _Tp v9)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(const _Tp* values)\n    : Matx<_Tp, cn, 1>(values)\n{}\n\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(const Vec<_Tp, cn>& m)\n    : Matx<_Tp, cn, 1>(m.val)\n{}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp op)\n: Matx<_Tp, cn, 1>(a, b, op)\n{}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp op)\n: Matx<_Tp, cn, 1>(a, b, op)\n{}\n\ntemplate<typename _Tp, int cn> template<typename _T2> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp op)\n: Matx<_Tp, cn, 1>(a, alpha, op)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha)\n{\n    Vec v;\n    for( int i = 0; i < cn; i++ ) v.val[i] = alpha;\n    return v;\n}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::mul(const Vec<_Tp, cn>& v) const\n{\n    Vec<_Tp, cn> w;\n    for( int i = 0; i < cn; i++ ) w.val[i] = saturate_cast<_Tp>(this->val[i]*v.val[i]);\n    return w;\n}\n\ntemplate<typename _Tp> Vec<_Tp, 2> conjugate(const Vec<_Tp, 2>& v)\n{\n    return Vec<_Tp, 2>(v[0], -v[1]);\n}\n\ntemplate<typename _Tp> Vec<_Tp, 4> conjugate(const Vec<_Tp, 4>& v)\n{\n    return Vec<_Tp, 4>(v[0], -v[1], -v[2], -v[3]);\n}\n\ntemplate<> inline Vec<float, 2> Vec<float, 2>::conj() const\n{\n    return conjugate(*this);\n}\n\ntemplate<> inline Vec<double, 2> Vec<double, 2>::conj() const\n{\n    return conjugate(*this);\n}\n\ntemplate<> inline Vec<float, 4> Vec<float, 4>::conj() const\n{\n    return conjugate(*this);\n}\n\ntemplate<> inline Vec<double, 4> Vec<double, 4>::conj() const\n{\n    return conjugate(*this);\n}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::cross(const Vec<_Tp, cn>&) const\n{\n    CV_Error(CV_StsError, \"for arbitrary-size vector there is no cross-product defined\");\n    return Vec<_Tp, cn>();\n}\n\ntemplate<typename _Tp, int cn> template<typename T2>\ninline Vec<_Tp, cn>::operator Vec<T2, cn>() const\n{\n    Vec<T2, cn> v;\n    for( int i = 0; i < cn; i++ ) v.val[i] = saturate_cast<T2>(this->val[i]);\n    return v;\n}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::operator CvScalar() const\n{\n    CvScalar s = {{0,0,0,0}};\n    int i;\n    for( i = 0; i < std::min(cn, 4); i++ ) s.val[i] = this->val[i];\n    for( ; i < 4; i++ ) s.val[i] = 0;\n    return s;\n}\n\ntemplate<typename _Tp, int cn> inline const _Tp& Vec<_Tp, cn>::operator [](int i) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline _Tp& Vec<_Tp, cn>::operator [](int i)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline const _Tp& Vec<_Tp, cn>::operator ()(int i) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline _Tp& Vec<_Tp, cn>::operator ()(int i)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp1, typename _Tp2, int cn> static inline Vec<_Tp1, cn>&\noperator += (Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b)\n{\n    for( int i = 0; i < cn; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] + b.val[i]);\n    return a;\n}\n\ntemplate<typename _Tp1, typename _Tp2, int cn> static inline Vec<_Tp1, cn>&\noperator -= (Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b)\n{\n    for( int i = 0; i < cn; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] - b.val[i]);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator + (const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b)\n{\n    return Vec<_Tp, cn>(a, b, Matx_AddOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator - (const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b)\n{\n    return Vec<_Tp, cn>(a, b, Matx_SubOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, int alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, float alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, double alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, int alpha)\n{\n    double ialpha = 1./alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, float alpha)\n{\n    float ialpha = 1.f/alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, double alpha)\n{\n    double ialpha = 1./alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (const Vec<_Tp, cn>& a, int alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (int alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (const Vec<_Tp, cn>& a, float alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (float alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (const Vec<_Tp, cn>& a, double alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (double alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator / (const Vec<_Tp, cn>& a, int alpha)\n{\n    return Vec<_Tp, cn>(a, 1./alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator / (const Vec<_Tp, cn>& a, float alpha)\n{\n    return Vec<_Tp, cn>(a, 1.f/alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator / (const Vec<_Tp, cn>& a, double alpha)\n{\n    return Vec<_Tp, cn>(a, 1./alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator - (const Vec<_Tp, cn>& a)\n{\n    Vec<_Tp,cn> t;\n    for( int i = 0; i < cn; i++ ) t.val[i] = saturate_cast<_Tp>(-a.val[i]);\n    return t;\n}\n\ntemplate<typename _Tp> inline Vec<_Tp, 4> operator * (const Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2)\n{\n    return Vec<_Tp, 4>(saturate_cast<_Tp>(v1[0]*v2[0] - v1[1]*v2[1] - v1[2]*v2[2] - v1[3]*v2[3]),\n                       saturate_cast<_Tp>(v1[0]*v2[1] + v1[1]*v2[0] + v1[2]*v2[3] - v1[3]*v2[2]),\n                       saturate_cast<_Tp>(v1[0]*v2[2] - v1[1]*v2[3] + v1[2]*v2[0] + v1[3]*v2[1]),\n                       saturate_cast<_Tp>(v1[0]*v2[3] + v1[1]*v2[2] - v1[2]*v2[1] + v1[3]*v2[0]));\n}\n\ntemplate<typename _Tp> inline Vec<_Tp, 4>& operator *= (Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2)\n{\n    v1 = v1 * v2;\n    return v1;\n}\n\ntemplate<> inline Vec<float, 3> Vec<float, 3>::cross(const Vec<float, 3>& v) const\n{\n    return Vec<float,3>(val[1]*v.val[2] - val[2]*v.val[1],\n                     val[2]*v.val[0] - val[0]*v.val[2],\n                     val[0]*v.val[1] - val[1]*v.val[0]);\n}\n\ntemplate<> inline Vec<double, 3> Vec<double, 3>::cross(const Vec<double, 3>& v) const\n{\n    return Vec<double,3>(val[1]*v.val[2] - val[2]*v.val[1],\n                     val[2]*v.val[0] - val[0]*v.val[2],\n                     val[0]*v.val[1] - val[1]*v.val[0]);\n}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn> normalize(const Vec<_Tp, cn>& v)\n{\n    double nv = norm(v);\n    return v * (nv ? 1./nv : 0.);\n}\n\ntemplate<typename _Tp, typename _T2, int cn> static inline\nVecCommaInitializer<_Tp, cn> operator << (const Vec<_Tp, cn>& vec, _T2 val)\n{\n    VecCommaInitializer<_Tp, cn> commaInitializer((Vec<_Tp, cn>*)&vec);\n    return (commaInitializer, val);\n}\n\ntemplate<typename _Tp, int cn> inline\nVecCommaInitializer<_Tp, cn>::VecCommaInitializer(Vec<_Tp, cn>* _vec)\n    : MatxCommaInitializer<_Tp, cn, 1>(_vec)\n{}\n\ntemplate<typename _Tp, int cn> template<typename _T2> inline\nVecCommaInitializer<_Tp, cn>& VecCommaInitializer<_Tp, cn>::operator , (_T2 value)\n{\n    CV_DbgAssert( this->idx < cn );\n    this->dst->val[this->idx++] = saturate_cast<_Tp>(value);\n    return *this;\n}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn> VecCommaInitializer<_Tp, cn>::operator *() const\n{\n    CV_DbgAssert( this->idx == cn );\n    return *this->dst;\n}\n\n//////////////////////////////// Complex //////////////////////////////\n\ntemplate<typename _Tp> inline Complex<_Tp>::Complex() : re(0), im(0) {}\ntemplate<typename _Tp> inline Complex<_Tp>::Complex( _Tp _re, _Tp _im ) : re(_re), im(_im) {}\ntemplate<typename _Tp> template<typename T2> inline Complex<_Tp>::operator Complex<T2>() const\n{ return Complex<T2>(saturate_cast<T2>(re), saturate_cast<T2>(im)); }\ntemplate<typename _Tp> inline Complex<_Tp> Complex<_Tp>::conj() const\n{ return Complex<_Tp>(re, -im); }\n\ntemplate<typename _Tp> static inline\nbool operator == (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return a.re == b.re && a.im == b.im; }\n\ntemplate<typename _Tp> static inline\nbool operator != (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return a.re != b.re || a.im != b.im; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return Complex<_Tp>( a.re + b.re, a.im + b.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator += (Complex<_Tp>& a, const Complex<_Tp>& b)\n{ a.re += b.re; a.im += b.im; return a; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return Complex<_Tp>( a.re - b.re, a.im - b.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator -= (Complex<_Tp>& a, const Complex<_Tp>& b)\n{ a.re -= b.re; a.im -= b.im; return a; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a)\n{ return Complex<_Tp>(-a.re, -a.im); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return Complex<_Tp>( a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (const Complex<_Tp>& a, _Tp b)\n{ return Complex<_Tp>( a.re*b, a.im*b ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (_Tp b, const Complex<_Tp>& a)\n{ return Complex<_Tp>( a.re*b, a.im*b ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (const Complex<_Tp>& a, _Tp b)\n{ return Complex<_Tp>( a.re + b, a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a, _Tp b)\n{ return Complex<_Tp>( a.re - b, a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (_Tp b, const Complex<_Tp>& a)\n{ return Complex<_Tp>( a.re + b, a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (_Tp b, const Complex<_Tp>& a)\n{ return Complex<_Tp>( b - a.re, -a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator += (Complex<_Tp>& a, _Tp b)\n{ a.re += b; return a; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator -= (Complex<_Tp>& a, _Tp b)\n{ a.re -= b; return a; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator *= (Complex<_Tp>& a, _Tp b)\n{ a.re *= b; a.im *= b; return a; }\n\ntemplate<typename _Tp> static inline\ndouble abs(const Complex<_Tp>& a)\n{ return std::sqrt( (double)a.re*a.re + (double)a.im*a.im); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    double t = 1./((double)b.re*b.re + (double)b.im*b.im);\n    return Complex<_Tp>( (_Tp)((a.re*b.re + a.im*b.im)*t),\n                        (_Tp)((-a.re*b.im + a.im*b.re)*t) );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator /= (Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    return (a = a / b);\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (const Complex<_Tp>& a, _Tp b)\n{\n    _Tp t = (_Tp)1/b;\n    return Complex<_Tp>( a.re*t, a.im*t );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (_Tp b, const Complex<_Tp>& a)\n{\n    return Complex<_Tp>(b)/a;\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator /= (const Complex<_Tp>& a, _Tp b)\n{\n    _Tp t = (_Tp)1/b;\n    a.re *= t; a.im *= t; return a;\n}\n\n//////////////////////////////// 2D Point ////////////////////////////////\n\ntemplate<typename _Tp> inline Point_<_Tp>::Point_() : x(0), y(0) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(_Tp _x, _Tp _y) : x(_x), y(_y) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const Point_& pt) : x(pt.x), y(pt.y) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const CvPoint& pt) : x((_Tp)pt.x), y((_Tp)pt.y) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const CvPoint2D32f& pt)\n    : x(saturate_cast<_Tp>(pt.x)), y(saturate_cast<_Tp>(pt.y)) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const Size_<_Tp>& sz) : x(sz.width), y(sz.height) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const Vec<_Tp,2>& v) : x(v[0]), y(v[1]) {}\ntemplate<typename _Tp> inline Point_<_Tp>& Point_<_Tp>::operator = (const Point_& pt)\n{ x = pt.x; y = pt.y; return *this; }\n\ntemplate<typename _Tp> template<typename _Tp2> inline Point_<_Tp>::operator Point_<_Tp2>() const\n{ return Point_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y)); }\ntemplate<typename _Tp> inline Point_<_Tp>::operator CvPoint() const\n{ return cvPoint(saturate_cast<int>(x), saturate_cast<int>(y)); }\ntemplate<typename _Tp> inline Point_<_Tp>::operator CvPoint2D32f() const\n{ return cvPoint2D32f((float)x, (float)y); }\ntemplate<typename _Tp> inline Point_<_Tp>::operator Vec<_Tp, 2>() const\n{ return Vec<_Tp, 2>(x, y); }\n\ntemplate<typename _Tp> inline _Tp Point_<_Tp>::dot(const Point_& pt) const\n{ return saturate_cast<_Tp>(x*pt.x + y*pt.y); }\ntemplate<typename _Tp> inline double Point_<_Tp>::ddot(const Point_& pt) const\n{ return (double)x*pt.x + (double)y*pt.y; }\n\ntemplate<typename _Tp> inline double Point_<_Tp>::cross(const Point_& pt) const\n{ return (double)x*pt.y - (double)y*pt.x; }\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator += (Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    a.x = saturate_cast<_Tp>(a.x + b.x);\n    a.y = saturate_cast<_Tp>(a.y + b.y);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator -= (Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    a.x = saturate_cast<_Tp>(a.x - b.x);\n    a.y = saturate_cast<_Tp>(a.y - b.y);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator *= (Point_<_Tp>& a, int b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator *= (Point_<_Tp>& a, float b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator *= (Point_<_Tp>& a, double b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline double norm(const Point_<_Tp>& pt)\n{ return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y); }\n\ntemplate<typename _Tp> static inline bool operator == (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{ return a.x == b.x && a.y == b.y; }\n\ntemplate<typename _Tp> static inline bool operator != (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{ return a.x != b.x || a.y != b.y; }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator + (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x + b.x), saturate_cast<_Tp>(a.y + b.y) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator - (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x - b.x), saturate_cast<_Tp>(a.y - b.y) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator - (const Point_<_Tp>& a)\n{ return Point_<_Tp>( saturate_cast<_Tp>(-a.x), saturate_cast<_Tp>(-a.y) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (const Point_<_Tp>& a, int b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (int a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (const Point_<_Tp>& a, float b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (float a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (const Point_<_Tp>& a, double b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (double a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); }\n\n//////////////////////////////// 3D Point ////////////////////////////////\n\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_() : x(0), y(0), z(0) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(_Tp _x, _Tp _y, _Tp _z) : x(_x), y(_y), z(_z) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(const Point3_& pt) : x(pt.x), y(pt.y), z(pt.z) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(const Point_<_Tp>& pt) : x(pt.x), y(pt.y), z(_Tp()) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(const CvPoint3D32f& pt) :\n    x(saturate_cast<_Tp>(pt.x)), y(saturate_cast<_Tp>(pt.y)), z(saturate_cast<_Tp>(pt.z)) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(const Vec<_Tp, 3>& v) : x(v[0]), y(v[1]), z(v[2]) {}\n\ntemplate<typename _Tp> template<typename _Tp2> inline Point3_<_Tp>::operator Point3_<_Tp2>() const\n{ return Point3_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y), saturate_cast<_Tp2>(z)); }\n\ntemplate<typename _Tp> inline Point3_<_Tp>::operator CvPoint3D32f() const\n{ return cvPoint3D32f((float)x, (float)y, (float)z); }\n\ntemplate<typename _Tp> inline Point3_<_Tp>::operator Vec<_Tp, 3>() const\n{ return Vec<_Tp, 3>(x, y, z); }\n\ntemplate<typename _Tp> inline Point3_<_Tp>& Point3_<_Tp>::operator = (const Point3_& pt)\n{ x = pt.x; y = pt.y; z = pt.z; return *this; }\n\ntemplate<typename _Tp> inline _Tp Point3_<_Tp>::dot(const Point3_& pt) const\n{ return saturate_cast<_Tp>(x*pt.x + y*pt.y + z*pt.z); }\ntemplate<typename _Tp> inline double Point3_<_Tp>::ddot(const Point3_& pt) const\n{ return (double)x*pt.x + (double)y*pt.y + (double)z*pt.z; }\n\ntemplate<typename _Tp> inline Point3_<_Tp> Point3_<_Tp>::cross(const Point3_<_Tp>& pt) const\n{\n    return Point3_<_Tp>(y*pt.z - z*pt.y, z*pt.x - x*pt.z, x*pt.y - y*pt.x);\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator += (Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    a.x = saturate_cast<_Tp>(a.x + b.x);\n    a.y = saturate_cast<_Tp>(a.y + b.y);\n    a.z = saturate_cast<_Tp>(a.z + b.z);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator -= (Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    a.x = saturate_cast<_Tp>(a.x - b.x);\n    a.y = saturate_cast<_Tp>(a.y - b.y);\n    a.z = saturate_cast<_Tp>(a.z - b.z);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator *= (Point3_<_Tp>& a, int b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    a.z = saturate_cast<_Tp>(a.z*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator *= (Point3_<_Tp>& a, float b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    a.z = saturate_cast<_Tp>(a.z*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator *= (Point3_<_Tp>& a, double b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    a.z = saturate_cast<_Tp>(a.z*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline double norm(const Point3_<_Tp>& pt)\n{ return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y + (double)pt.z*pt.z); }\n\ntemplate<typename _Tp> static inline bool operator == (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{ return a.x == b.x && a.y == b.y && a.z == b.z; }\n\ntemplate<typename _Tp> static inline bool operator != (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{ return a.x != b.x || a.y != b.y || a.z != b.z; }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator + (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x + b.x),\n                      saturate_cast<_Tp>(a.y + b.y),\n                      saturate_cast<_Tp>(a.z + b.z)); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator - (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x - b.x),\n                        saturate_cast<_Tp>(a.y - b.y),\n                        saturate_cast<_Tp>(a.z - b.z)); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator - (const Point3_<_Tp>& a)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(-a.x),\n                      saturate_cast<_Tp>(-a.y),\n                      saturate_cast<_Tp>(-a.z) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, int b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b),\n                      saturate_cast<_Tp>(a.y*b),\n                      saturate_cast<_Tp>(a.z*b) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (int a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a),\n                      saturate_cast<_Tp>(b.y*a),\n                      saturate_cast<_Tp>(b.z*a) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, float b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b),\n                      saturate_cast<_Tp>(a.y*b),\n                      saturate_cast<_Tp>(a.z*b) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (float a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a),\n                      saturate_cast<_Tp>(b.y*a),\n                      saturate_cast<_Tp>(b.z*a) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, double b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b),\n                      saturate_cast<_Tp>(a.y*b),\n                      saturate_cast<_Tp>(a.z*b) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (double a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a),\n                      saturate_cast<_Tp>(b.y*a),\n                      saturate_cast<_Tp>(b.z*a) ); }\n\n//////////////////////////////// Size ////////////////////////////////\n\ntemplate<typename _Tp> inline Size_<_Tp>::Size_()\n    : width(0), height(0) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(_Tp _width, _Tp _height)\n    : width(_width), height(_height) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(const Size_& sz)\n    : width(sz.width), height(sz.height) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(const CvSize& sz)\n    : width(saturate_cast<_Tp>(sz.width)), height(saturate_cast<_Tp>(sz.height)) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(const CvSize2D32f& sz)\n    : width(saturate_cast<_Tp>(sz.width)), height(saturate_cast<_Tp>(sz.height)) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(const Point_<_Tp>& pt) : width(pt.x), height(pt.y) {}\n\ntemplate<typename _Tp> template<typename _Tp2> inline Size_<_Tp>::operator Size_<_Tp2>() const\n{ return Size_<_Tp2>(saturate_cast<_Tp2>(width), saturate_cast<_Tp2>(height)); }\ntemplate<typename _Tp> inline Size_<_Tp>::operator CvSize() const\n{ return cvSize(saturate_cast<int>(width), saturate_cast<int>(height)); }\ntemplate<typename _Tp> inline Size_<_Tp>::operator CvSize2D32f() const\n{ return cvSize2D32f((float)width, (float)height); }\n\ntemplate<typename _Tp> inline Size_<_Tp>& Size_<_Tp>::operator = (const Size_<_Tp>& sz)\n{ width = sz.width; height = sz.height; return *this; }\ntemplate<typename _Tp> static inline Size_<_Tp> operator * (const Size_<_Tp>& a, _Tp b)\n{ return Size_<_Tp>(a.width * b, a.height * b); }\ntemplate<typename _Tp> static inline Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{ return Size_<_Tp>(a.width + b.width, a.height + b.height); }\ntemplate<typename _Tp> static inline Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{ return Size_<_Tp>(a.width - b.width, a.height - b.height); }\ntemplate<typename _Tp> inline _Tp Size_<_Tp>::area() const { return width*height; }\n\ntemplate<typename _Tp> static inline Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b)\n{ a.width += b.width; a.height += b.height; return a; }\ntemplate<typename _Tp> static inline Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b)\n{ a.width -= b.width; a.height -= b.height; return a; }\n\ntemplate<typename _Tp> static inline bool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{ return a.width == b.width && a.height == b.height; }\ntemplate<typename _Tp> static inline bool operator != (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{ return a.width != b.width || a.height != b.height; }\n\n//////////////////////////////// Rect ////////////////////////////////\n\n\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_() : x(0), y(0), width(0), height(0) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height) : x(_x), y(_y), width(_width), height(_height) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(const Rect_<_Tp>& r) : x(r.x), y(r.y), width(r.width), height(r.height) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(const CvRect& r) : x((_Tp)r.x), y((_Tp)r.y), width((_Tp)r.width), height((_Tp)r.height) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz) :\n    x(org.x), y(org.y), width(sz.width), height(sz.height) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2)\n{\n    x = std::min(pt1.x, pt2.x); y = std::min(pt1.y, pt2.y);\n    width = std::max(pt1.x, pt2.x) - x; height = std::max(pt1.y, pt2.y) - y;\n}\ntemplate<typename _Tp> inline Rect_<_Tp>& Rect_<_Tp>::operator = ( const Rect_<_Tp>& r )\n{ x = r.x; y = r.y; width = r.width; height = r.height; return *this; }\n\ntemplate<typename _Tp> inline Point_<_Tp> Rect_<_Tp>::tl() const { return Point_<_Tp>(x,y); }\ntemplate<typename _Tp> inline Point_<_Tp> Rect_<_Tp>::br() const { return Point_<_Tp>(x+width, y+height); }\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator += ( Rect_<_Tp>& a, const Point_<_Tp>& b )\n{ a.x += b.x; a.y += b.y; return a; }\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator -= ( Rect_<_Tp>& a, const Point_<_Tp>& b )\n{ a.x -= b.x; a.y -= b.y; return a; }\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator += ( Rect_<_Tp>& a, const Size_<_Tp>& b )\n{ a.width += b.width; a.height += b.height; return a; }\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator -= ( Rect_<_Tp>& a, const Size_<_Tp>& b )\n{ a.width -= b.width; a.height -= b.height; return a; }\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator &= ( Rect_<_Tp>& a, const Rect_<_Tp>& b )\n{\n    _Tp x1 = std::max(a.x, b.x), y1 = std::max(a.y, b.y);\n    a.width = std::min(a.x + a.width, b.x + b.width) - x1;\n    a.height = std::min(a.y + a.height, b.y + b.height) - y1;\n    a.x = x1; a.y = y1;\n    if( a.width <= 0 || a.height <= 0 )\n        a = Rect();\n    return a;\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator |= ( Rect_<_Tp>& a, const Rect_<_Tp>& b )\n{\n    _Tp x1 = std::min(a.x, b.x), y1 = std::min(a.y, b.y);\n    a.width = std::max(a.x + a.width, b.x + b.width) - x1;\n    a.height = std::max(a.y + a.height, b.y + b.height) - y1;\n    a.x = x1; a.y = y1;\n    return a;\n}\n\ntemplate<typename _Tp> inline Size_<_Tp> Rect_<_Tp>::size() const { return Size_<_Tp>(width, height); }\ntemplate<typename _Tp> inline _Tp Rect_<_Tp>::area() const { return width*height; }\n\ntemplate<typename _Tp> template<typename _Tp2> inline Rect_<_Tp>::operator Rect_<_Tp2>() const\n{ return Rect_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y),\n                     saturate_cast<_Tp2>(width), saturate_cast<_Tp2>(height)); }\ntemplate<typename _Tp> inline Rect_<_Tp>::operator CvRect() const\n{ return cvRect(saturate_cast<int>(x), saturate_cast<int>(y),\n                saturate_cast<int>(width), saturate_cast<int>(height)); }\n\ntemplate<typename _Tp> inline bool Rect_<_Tp>::contains(const Point_<_Tp>& pt) const\n{ return x <= pt.x && pt.x < x + width && y <= pt.y && pt.y < y + height; }\n\ntemplate<typename _Tp> static inline bool operator == (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    return a.x == b.x && a.y == b.y && a.width == b.width && a.height == b.height;\n}\n\ntemplate<typename _Tp> static inline bool operator != (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    return a.x != b.x || a.y != b.y || a.width != b.width || a.height != b.height;\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator + (const Rect_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x + b.x, a.y + b.y, a.width, a.height );\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator - (const Rect_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x - b.x, a.y - b.y, a.width, a.height );\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator + (const Rect_<_Tp>& a, const Size_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x, a.y, a.width + b.width, a.height + b.height );\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator & (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    Rect_<_Tp> c = a;\n    return c &= b;\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator | (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    Rect_<_Tp> c = a;\n    return c |= b;\n}\n\ntemplate<typename _Tp> inline bool Point_<_Tp>::inside( const Rect_<_Tp>& r ) const\n{\n    return r.contains(*this);\n}\n\ninline RotatedRect::RotatedRect() { angle = 0; }\ninline RotatedRect::RotatedRect(const Point2f& _center, const Size2f& _size, float _angle)\n    : center(_center), size(_size), angle(_angle) {}\ninline RotatedRect::RotatedRect(const CvBox2D& box)\n    : center(box.center), size(box.size), angle(box.angle) {}\ninline RotatedRect::operator CvBox2D() const\n{\n    CvBox2D box; box.center = center; box.size = size; box.angle = angle;\n    return box;\n}\n\n//////////////////////////////// Scalar_ ///////////////////////////////\n\ntemplate<typename _Tp> inline Scalar_<_Tp>::Scalar_()\n{ this->val[0] = this->val[1] = this->val[2] = this->val[3] = 0; }\n\ntemplate<typename _Tp> inline Scalar_<_Tp>::Scalar_(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n{ this->val[0] = v0; this->val[1] = v1; this->val[2] = v2; this->val[3] = v3; }\n\ntemplate<typename _Tp> inline Scalar_<_Tp>::Scalar_(const CvScalar& s)\n{\n    this->val[0] = saturate_cast<_Tp>(s.val[0]);\n    this->val[1] = saturate_cast<_Tp>(s.val[1]);\n    this->val[2] = saturate_cast<_Tp>(s.val[2]);\n    this->val[3] = saturate_cast<_Tp>(s.val[3]);\n}\n\ntemplate<typename _Tp> inline Scalar_<_Tp>::Scalar_(_Tp v0)\n{ this->val[0] = v0; this->val[1] = this->val[2] = this->val[3] = 0; }\n\ntemplate<typename _Tp> inline Scalar_<_Tp> Scalar_<_Tp>::all(_Tp v0)\n{ return Scalar_<_Tp>(v0, v0, v0, v0); }\ntemplate<typename _Tp> inline Scalar_<_Tp>::operator CvScalar() const\n{ return cvScalar(this->val[0], this->val[1], this->val[2], this->val[3]); }\n\ntemplate<typename _Tp> template<typename T2> inline Scalar_<_Tp>::operator Scalar_<T2>() const\n{\n    return Scalar_<T2>(saturate_cast<T2>(this->val[0]),\n                  saturate_cast<T2>(this->val[1]),\n                  saturate_cast<T2>(this->val[2]),\n                  saturate_cast<T2>(this->val[3]));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>& operator += (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a.val[0] = saturate_cast<_Tp>(a.val[0] + b.val[0]);\n    a.val[1] = saturate_cast<_Tp>(a.val[1] + b.val[1]);\n    a.val[2] = saturate_cast<_Tp>(a.val[2] + b.val[2]);\n    a.val[3] = saturate_cast<_Tp>(a.val[3] + b.val[3]);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>& operator -= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a.val[0] = saturate_cast<_Tp>(a.val[0] - b.val[0]);\n    a.val[1] = saturate_cast<_Tp>(a.val[1] - b.val[1]);\n    a.val[2] = saturate_cast<_Tp>(a.val[2] - b.val[2]);\n    a.val[3] = saturate_cast<_Tp>(a.val[3] - b.val[3]);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>& operator *= ( Scalar_<_Tp>& a, _Tp v )\n{\n    a.val[0] = saturate_cast<_Tp>(a.val[0] * v);\n    a.val[1] = saturate_cast<_Tp>(a.val[1] * v);\n    a.val[2] = saturate_cast<_Tp>(a.val[2] * v);\n    a.val[3] = saturate_cast<_Tp>(a.val[3] * v);\n    return a;\n}\n\ntemplate<typename _Tp> inline Scalar_<_Tp> Scalar_<_Tp>::mul(const Scalar_<_Tp>& t, double scale ) const\n{\n    return Scalar_<_Tp>( saturate_cast<_Tp>(this->val[0]*t.val[0]*scale),\n                       saturate_cast<_Tp>(this->val[1]*t.val[1]*scale),\n                       saturate_cast<_Tp>(this->val[2]*t.val[2]*scale),\n                       saturate_cast<_Tp>(this->val[3]*t.val[3]*scale));\n}\n\ntemplate<typename _Tp> static inline bool operator == ( const Scalar_<_Tp>& a, const Scalar_<_Tp>& b )\n{\n    return a.val[0] == b.val[0] && a.val[1] == b.val[1] &&\n        a.val[2] == b.val[2] && a.val[3] == b.val[3];\n}\n\ntemplate<typename _Tp> static inline bool operator != ( const Scalar_<_Tp>& a, const Scalar_<_Tp>& b )\n{\n    return a.val[0] != b.val[0] || a.val[1] != b.val[1] ||\n        a.val[2] != b.val[2] || a.val[3] != b.val[3];\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator + (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] + b.val[0]),\n                      saturate_cast<_Tp>(a.val[1] + b.val[1]),\n                      saturate_cast<_Tp>(a.val[2] + b.val[2]),\n                      saturate_cast<_Tp>(a.val[3] + b.val[3]));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator - (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] - b.val[0]),\n                      saturate_cast<_Tp>(a.val[1] - b.val[1]),\n                      saturate_cast<_Tp>(a.val[2] - b.val[2]),\n                      saturate_cast<_Tp>(a.val[3] - b.val[3]));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator * (const Scalar_<_Tp>& a, _Tp alpha)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] * alpha),\n                      saturate_cast<_Tp>(a.val[1] * alpha),\n                      saturate_cast<_Tp>(a.val[2] * alpha),\n                      saturate_cast<_Tp>(a.val[3] * alpha));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator * (_Tp alpha, const Scalar_<_Tp>& a)\n{\n    return a*alpha;\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator - (const Scalar_<_Tp>& a)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(-a.val[0]), saturate_cast<_Tp>(-a.val[1]),\n                      saturate_cast<_Tp>(-a.val[2]), saturate_cast<_Tp>(-a.val[3]));\n}\n\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>\noperator * (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a[0]*b[0] - a[1]*b[1] - a[2]*b[2] - a[3]*b[3]),\n                        saturate_cast<_Tp>(a[0]*b[1] + a[1]*b[0] + a[2]*b[3] - a[3]*b[2]),\n                        saturate_cast<_Tp>(a[0]*b[2] - a[1]*b[3] + a[2]*b[0] + a[3]*b[1]),\n                        saturate_cast<_Tp>(a[0]*b[3] + a[1]*b[2] - a[2]*b[1] + a[3]*b[0]));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>&\noperator *= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a = a*b;\n    return a;\n}\n\ntemplate<typename _Tp> inline Scalar_<_Tp> Scalar_<_Tp>::conj() const\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(this->val[0]),\n                        saturate_cast<_Tp>(-this->val[1]),\n                        saturate_cast<_Tp>(-this->val[2]),\n                        saturate_cast<_Tp>(-this->val[3]));\n}\n\ntemplate<typename _Tp> inline bool Scalar_<_Tp>::isReal() const\n{\n    return this->val[1] == 0 && this->val[2] == 0 && this->val[3] == 0;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (const Scalar_<_Tp>& a, _Tp alpha)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] / alpha),\n                        saturate_cast<_Tp>(a.val[1] / alpha),\n                        saturate_cast<_Tp>(a.val[2] / alpha),\n                        saturate_cast<_Tp>(a.val[3] / alpha));\n}\n\ntemplate<typename _Tp> static inline\nScalar_<float> operator / (const Scalar_<float>& a, float alpha)\n{\n    float s = 1/alpha;\n    return Scalar_<float>(a.val[0]*s, a.val[1]*s, a.val[2]*s, a.val[3]*s);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<double> operator / (const Scalar_<double>& a, double alpha)\n{\n    double s = 1/alpha;\n    return Scalar_<double>(a.val[0]*s, a.val[1]*s, a.val[2]*s, a.val[3]*s);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator /= (Scalar_<_Tp>& a, _Tp alpha)\n{\n    a = a/alpha;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (_Tp a, const Scalar_<_Tp>& b)\n{\n    _Tp s = a/(b[0]*b[0] + b[1]*b[1] + b[2]*b[2] + b[3]*b[3]);\n    return b.conj()*s;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return a*((_Tp)1/b);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator /= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a = a/b;\n    return a;\n}\n\n//////////////////////////////// Range /////////////////////////////////\n\ninline Range::Range() : start(0), end(0) {}\ninline Range::Range(int _start, int _end) : start(_start), end(_end) {}\ninline Range::Range(const CvSlice& slice) : start(slice.start_index), end(slice.end_index)\n{\n    if( start == 0 && end == CV_WHOLE_SEQ_END_INDEX )\n        *this = Range::all();\n}\n\ninline int Range::size() const { return end - start; }\ninline bool Range::empty() const { return start == end; }\ninline Range Range::all() { return Range(INT_MIN, INT_MAX); }\n\nstatic inline bool operator == (const Range& r1, const Range& r2)\n{ return r1.start == r2.start && r1.end == r2.end; }\n\nstatic inline bool operator != (const Range& r1, const Range& r2)\n{ return !(r1 == r2); }\n\nstatic inline bool operator !(const Range& r)\n{ return r.start == r.end; }\n\nstatic inline Range operator & (const Range& r1, const Range& r2)\n{\n    Range r(std::max(r1.start, r2.start), std::min(r1.end, r2.end));\n    r.end = std::max(r.end, r.start);\n    return r;\n}\n\nstatic inline Range& operator &= (Range& r1, const Range& r2)\n{\n    r1 = r1 & r2;\n    return r1;\n}\n\nstatic inline Range operator + (const Range& r1, int delta)\n{\n    return Range(r1.start + delta, r1.end + delta);\n}\n\nstatic inline Range operator + (int delta, const Range& r1)\n{\n    return Range(r1.start + delta, r1.end + delta);\n}\n\nstatic inline Range operator - (const Range& r1, int delta)\n{\n    return r1 + (-delta);\n}\n\ninline Range::operator CvSlice() const\n{ return *this != Range::all() ? cvSlice(start, end) : CV_WHOLE_SEQ; }\n\n\n\n//////////////////////////////// Vector ////////////////////////////////\n\n// template vector class. It is similar to STL's vector,\n// with a few important differences:\n//   1) it can be created on top of user-allocated data w/o copying it\n//   2) vector b = a means copying the header,\n//      not the underlying data (use clone() to make a deep copy)\ntemplate <typename _Tp> class Vector\n{\npublic:\n    typedef _Tp value_type;\n    typedef _Tp* iterator;\n    typedef const _Tp* const_iterator;\n    typedef _Tp& reference;\n    typedef const _Tp& const_reference;\n\n    struct Hdr\n    {\n        Hdr() : data(0), datastart(0), refcount(0), size(0), capacity(0) {};\n        _Tp* data;\n        _Tp* datastart;\n        int* refcount;\n        size_t size;\n        size_t capacity;\n    };\n\n    Vector() {}\n    Vector(size_t _size)  { resize(_size); }\n    Vector(size_t _size, const _Tp& val)\n    {\n        resize(_size);\n        for(size_t i = 0; i < _size; i++)\n            hdr.data[i] = val;\n    }\n    Vector(_Tp* _data, size_t _size, bool _copyData=false)\n    { set(_data, _size, _copyData); }\n\n    template<int n> Vector(const Vec<_Tp, n>& vec)\n    { set((_Tp*)&vec.val[0], n, true); }\n\n    Vector(const std::vector<_Tp>& vec, bool _copyData=false)\n    { set(!vec.empty() ? (_Tp*)&vec[0] : 0, vec.size(), _copyData); }\n\n    Vector(const Vector& d) { *this = d; }\n\n    Vector(const Vector& d, const Range& r_)\n    {\n        Range r = r_ == Range::all() ? Range(0, d.size()) : r_;\n        /*if( r == Range::all() )\n            r = Range(0, d.size());*/\n        if( r.size() > 0 && r.start >= 0 && r.end <= d.size() )\n        {\n            if( d.hdr.refcount )\n                CV_XADD(d.hdr.refcount, 1);\n            hdr.refcount = d.hdr.refcount;\n            hdr.datastart = d.hdr.datastart;\n            hdr.data = d.hdr.data + r.start;\n            hdr.capacity = hdr.size = r.size();\n        }\n    }\n\n    Vector<_Tp>& operator = (const Vector& d)\n    {\n        if( this != &d )\n        {\n            if( d.hdr.refcount )\n                CV_XADD(d.hdr.refcount, 1);\n            release();\n            hdr = d.hdr;\n        }\n        return *this;\n    }\n\n    ~Vector()  { release(); }\n\n    Vector<_Tp> clone() const\n    { return hdr.data ? Vector<_Tp>(hdr.data, hdr.size, true) : Vector<_Tp>(); }\n\n    void copyTo(Vector<_Tp>& vec) const\n    {\n        size_t i, sz = size();\n        vec.resize(sz);\n        const _Tp* src = hdr.data;\n        _Tp* dst = vec.hdr.data;\n        for( i = 0; i < sz; i++ )\n            dst[i] = src[i];\n    }\n\n    void copyTo(std::vector<_Tp>& vec) const\n    {\n        size_t i, sz = size();\n        vec.resize(sz);\n        const _Tp* src = hdr.data;\n        _Tp* dst = sz ? &vec[0] : 0;\n        for( i = 0; i < sz; i++ )\n            dst[i] = src[i];\n    }\n\n    operator CvMat() const\n    { return cvMat((int)size(), 1, type(), (void*)hdr.data); }\n\n    _Tp& operator [] (size_t i) { CV_DbgAssert( i < size() ); return hdr.data[i]; }\n    const _Tp& operator [] (size_t i) const { CV_DbgAssert( i < size() ); return hdr.data[i]; }\n    Vector operator() (const Range& r) const { return Vector(*this, r); }\n    _Tp& back() { CV_DbgAssert(!empty()); return hdr.data[hdr.size-1]; }\n    const _Tp& back() const { CV_DbgAssert(!empty()); return hdr.data[hdr.size-1]; }\n    _Tp& front() { CV_DbgAssert(!empty()); return hdr.data[0]; }\n    const _Tp& front() const { CV_DbgAssert(!empty()); return hdr.data[0]; }\n\n    _Tp* begin() { return hdr.data; }\n    _Tp* end() { return hdr.data + hdr.size; }\n    const _Tp* begin() const { return hdr.data; }\n    const _Tp* end() const { return hdr.data + hdr.size; }\n\n    void addref() { if( hdr.refcount ) CV_XADD(hdr.refcount, 1); }\n    void release()\n    {\n        if( hdr.refcount && CV_XADD(hdr.refcount, -1) == 1 )\n        {\n            delete[] hdr.datastart;\n            delete hdr.refcount;\n        }\n        hdr = Hdr();\n    }\n\n    void set(_Tp* _data, size_t _size, bool _copyData=false)\n    {\n        if( !_copyData )\n        {\n            release();\n            hdr.data = hdr.datastart = _data;\n            hdr.size = hdr.capacity = _size;\n            hdr.refcount = 0;\n        }\n        else\n        {\n            reserve(_size);\n            for( size_t i = 0; i < _size; i++ )\n                hdr.data[i] = _data[i];\n            hdr.size = _size;\n        }\n    }\n\n    void reserve(size_t newCapacity)\n    {\n        _Tp* newData;\n        int* newRefcount;\n        size_t i, oldSize = hdr.size;\n        if( (!hdr.refcount || *hdr.refcount == 1) && hdr.capacity >= newCapacity )\n            return;\n        newCapacity = std::max(newCapacity, oldSize);\n        newData = new _Tp[newCapacity];\n        newRefcount = new int(1);\n        for( i = 0; i < oldSize; i++ )\n            newData[i] = hdr.data[i];\n        release();\n        hdr.data = hdr.datastart = newData;\n        hdr.capacity = newCapacity;\n        hdr.size = oldSize;\n        hdr.refcount = newRefcount;\n    }\n\n    void resize(size_t newSize)\n    {\n        size_t i;\n        newSize = std::max(newSize, (size_t)0);\n        if( (!hdr.refcount || *hdr.refcount == 1) && hdr.size == newSize )\n            return;\n        if( newSize > hdr.capacity )\n            reserve(std::max(newSize, std::max((size_t)4, hdr.capacity*2)));\n        for( i = hdr.size; i < newSize; i++ )\n            hdr.data[i] = _Tp();\n        hdr.size = newSize;\n    }\n\n    Vector<_Tp>& push_back(const _Tp& elem)\n    {\n        if( hdr.size == hdr.capacity )\n            reserve( std::max((size_t)4, hdr.capacity*2) );\n        hdr.data[hdr.size++] = elem;\n        return *this;\n    }\n\n    Vector<_Tp>& pop_back()\n    {\n        if( hdr.size > 0 )\n            --hdr.size;\n        return *this;\n    }\n\n    size_t size() const { return hdr.size; }\n    size_t capacity() const { return hdr.capacity; }\n    bool empty() const { return hdr.size == 0; }\n    void clear() { resize(0); }\n    int type() const { return DataType<_Tp>::type; }\n\nprotected:\n    Hdr hdr;\n};\n\n\ntemplate<typename _Tp> inline typename DataType<_Tp>::work_type\ndot(const Vector<_Tp>& v1, const Vector<_Tp>& v2)\n{\n    typedef typename DataType<_Tp>::work_type _Tw;\n    size_t i = 0, n = v1.size();\n    assert(v1.size() == v2.size());\n\n    _Tw s = 0;\n    const _Tp *ptr1 = &v1[0], *ptr2 = &v2[0];\n    for( ; i < n; i++ )\n        s += (_Tw)ptr1[i]*ptr2[i];\n\n    return s;\n}\n\n// Multiply-with-Carry RNG\ninline RNG::RNG() { state = 0xffffffff; }\ninline RNG::RNG(uint64 _state) { state = _state ? _state : 0xffffffff; }\ninline unsigned RNG::next()\n{\n    state = (uint64)(unsigned)state*CV_RNG_COEFF + (unsigned)(state >> 32);\n    return (unsigned)state;\n}\n\ninline RNG::operator uchar() { return (uchar)next(); }\ninline RNG::operator schar() { return (schar)next(); }\ninline RNG::operator ushort() { return (ushort)next(); }\ninline RNG::operator short() { return (short)next(); }\ninline RNG::operator unsigned() { return next(); }\ninline unsigned RNG::operator ()(unsigned N) {return (unsigned)uniform(0,N);}\ninline unsigned RNG::operator ()() {return next();}\ninline RNG::operator int() { return (int)next(); }\n// * (2^32-1)^-1\ninline RNG::operator float() { return next()*2.3283064365386962890625e-10f; }\ninline RNG::operator double()\n{\n    unsigned t = next();\n    return (((uint64)t << 32) | next())*5.4210108624275221700372640043497e-20;\n}\ninline int RNG::uniform(int a, int b) { return a == b ? a : (int)(next()%(b - a) + a); }\ninline float RNG::uniform(float a, float b) { return ((float)*this)*(b - a) + a; }\ninline double RNG::uniform(double a, double b) { return ((double)*this)*(b - a) + a; }\n\ninline TermCriteria::TermCriteria() : type(0), maxCount(0), epsilon(0) {}\ninline TermCriteria::TermCriteria(int _type, int _maxCount, double _epsilon)\n    : type(_type), maxCount(_maxCount), epsilon(_epsilon) {}\ninline TermCriteria::TermCriteria(const CvTermCriteria& criteria)\n    : type(criteria.type), maxCount(criteria.max_iter), epsilon(criteria.epsilon) {}\ninline TermCriteria::operator CvTermCriteria() const\n{ return cvTermCriteria(type, maxCount, epsilon); }\n\ninline uchar* LineIterator::operator *() { return ptr; }\ninline LineIterator& LineIterator::operator ++()\n{\n    int mask = err < 0 ? -1 : 0;\n    err += minusDelta + (plusDelta & mask);\n    ptr += minusStep + (plusStep & mask);\n    return *this;\n}\ninline LineIterator LineIterator::operator ++(int)\n{\n    LineIterator it = *this;\n    ++(*this);\n    return it;\n}\ninline Point LineIterator::pos() const\n{\n    Point p;\n    p.y = (int)((ptr - ptr0)/step);\n    p.x = (int)(((ptr - ptr0) - p.y*step)/elemSize);\n    return p;\n}\n\n/////////////////////////////// AutoBuffer ////////////////////////////////////////\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::AutoBuffer()\n{\n    ptr = buf;\n    size = fixed_size;\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::AutoBuffer(size_t _size)\n{\n    ptr = buf;\n    size = fixed_size;\n    allocate(_size);\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::~AutoBuffer()\n{ deallocate(); }\n\ntemplate<typename _Tp, size_t fixed_size> inline void AutoBuffer<_Tp, fixed_size>::allocate(size_t _size)\n{\n    if(_size <= size)\n        return;\n    deallocate();\n    if(_size > fixed_size)\n    {\n        ptr = cv::allocate<_Tp>(_size);\n        size = _size;\n    }\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline void AutoBuffer<_Tp, fixed_size>::deallocate()\n{\n    if( ptr != buf )\n    {\n        cv::deallocate<_Tp>(ptr, size);\n        ptr = buf;\n        size = fixed_size;\n    }\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::operator _Tp* ()\n{ return ptr; }\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::operator const _Tp* () const\n{ return ptr; }\n\n\n/////////////////////////////////// Ptr ////////////////////////////////////////\n\ntemplate<typename _Tp> inline Ptr<_Tp>::Ptr() : obj(0), refcount(0) {}\ntemplate<typename _Tp> inline Ptr<_Tp>::Ptr(_Tp* _obj) : obj(_obj)\n{\n    if(obj)\n    {\n        refcount = (int*)fastMalloc(sizeof(*refcount));\n        *refcount = 1;\n    }\n    else\n        refcount = 0;\n}\n\ntemplate<typename _Tp> inline void Ptr<_Tp>::addref()\n{ if( refcount ) CV_XADD(refcount, 1); }\n\ntemplate<typename _Tp> inline void Ptr<_Tp>::release()\n{\n    if( refcount && CV_XADD(refcount, -1) == 1 )\n    {\n        delete_obj();\n        fastFree(refcount);\n    }\n    refcount = 0;\n    obj = 0;\n}\n\ntemplate<typename _Tp> inline void Ptr<_Tp>::delete_obj()\n{\n    if( obj ) delete obj;\n}\n\ntemplate<typename _Tp> inline Ptr<_Tp>::~Ptr() { release(); }\n\ntemplate<typename _Tp> inline Ptr<_Tp>::Ptr(const Ptr<_Tp>& _ptr)\n{\n    obj = _ptr.obj;\n    refcount = _ptr.refcount;\n    addref();\n}\n\ntemplate<typename _Tp> inline Ptr<_Tp>& Ptr<_Tp>::operator = (const Ptr<_Tp>& _ptr)\n{\n    int* _refcount = _ptr.refcount;\n    if( _refcount )\n        CV_XADD(_refcount, 1);\n    release();\n    obj = _ptr.obj;\n    refcount = _refcount;\n    return *this;\n}\n\ntemplate<typename _Tp> inline _Tp* Ptr<_Tp>::operator -> () { return obj; }\ntemplate<typename _Tp> inline const _Tp* Ptr<_Tp>::operator -> () const { return obj; }\n\ntemplate<typename _Tp> inline Ptr<_Tp>::operator _Tp* () { return obj; }\ntemplate<typename _Tp> inline Ptr<_Tp>::operator const _Tp*() const { return obj; }\n\ntemplate<typename _Tp> inline bool Ptr<_Tp>::empty() const { return obj == 0; }\n\ntemplate<typename _Tp> template<typename _Tp2> Ptr<_Tp>::Ptr(const Ptr<_Tp2>& p)\n    : obj(0), refcount(0)\n{\n    if (p.empty())\n        return;\n\n    _Tp* p_casted = dynamic_cast<_Tp*>(p.obj);\n    if (!p_casted)\n        return;\n\n    obj = p_casted;\n    refcount = p.refcount;\n    addref();\n}\n\ntemplate<typename _Tp> template<typename _Tp2> inline Ptr<_Tp2> Ptr<_Tp>::ptr()\n{\n    Ptr<_Tp2> p;\n    if( !obj )\n        return p;\n\n    _Tp2* obj_casted = dynamic_cast<_Tp2*>(obj);\n    if (!obj_casted)\n        return p;\n\n    if( refcount )\n        CV_XADD(refcount, 1);\n\n    p.obj = obj_casted;\n    p.refcount = refcount;\n    return p;\n}\n\ntemplate<typename _Tp> template<typename _Tp2> inline const Ptr<_Tp2> Ptr<_Tp>::ptr() const\n{\n    Ptr<_Tp2> p;\n    if( !obj )\n        return p;\n\n    _Tp2* obj_casted = dynamic_cast<_Tp2*>(obj);\n    if (!obj_casted)\n        return p;\n\n    if( refcount )\n        CV_XADD(refcount, 1);\n\n    p.obj = obj_casted;\n    p.refcount = refcount;\n    return p;\n}\n\n//// specializied implementations of Ptr::delete_obj() for classic OpenCV types\n\ntemplate<> CV_EXPORTS void Ptr<CvMat>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<IplImage>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<CvMatND>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<CvSparseMat>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<CvMemStorage>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<CvFileStorage>::delete_obj();\n\n//////////////////////////////////////// XML & YAML I/O ////////////////////////////////////\n\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, int value );\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, float value );\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, double value );\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, const string& value );\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const _Tp& value)\n{ write(fs, string(), value); }\n\nCV_EXPORTS void writeScalar( FileStorage& fs, int value );\nCV_EXPORTS void writeScalar( FileStorage& fs, float value );\nCV_EXPORTS void writeScalar( FileStorage& fs, double value );\nCV_EXPORTS void writeScalar( FileStorage& fs, const string& value );\n\ntemplate<> inline void write( FileStorage& fs, const int& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline void write( FileStorage& fs, const float& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline void write( FileStorage& fs, const double& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline void write( FileStorage& fs, const string& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Point_<_Tp>& pt )\n{\n    write(fs, pt.x);\n    write(fs, pt.y);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Point3_<_Tp>& pt )\n{\n    write(fs, pt.x);\n    write(fs, pt.y);\n    write(fs, pt.z);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Size_<_Tp>& sz )\n{\n    write(fs, sz.width);\n    write(fs, sz.height);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Complex<_Tp>& c )\n{\n    write(fs, c.re);\n    write(fs, c.im);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Rect_<_Tp>& r )\n{\n    write(fs, r.x);\n    write(fs, r.y);\n    write(fs, r.width);\n    write(fs, r.height);\n}\n\ntemplate<typename _Tp, int cn> inline void write(FileStorage& fs, const Vec<_Tp, cn>& v )\n{\n    for(int i = 0; i < cn; i++)\n        write(fs, v.val[i]);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Scalar_<_Tp>& s )\n{\n    write(fs, s.val[0]);\n    write(fs, s.val[1]);\n    write(fs, s.val[2]);\n    write(fs, s.val[3]);\n}\n\ninline void write(FileStorage& fs, const Range& r )\n{\n    write(fs, r.start);\n    write(fs, r.end);\n}\n\nclass CV_EXPORTS WriteStructContext\n{\npublic:\n    WriteStructContext(FileStorage& _fs, const string& name,\n        int flags, const string& typeName=string());\n    ~WriteStructContext();\n    FileStorage* fs;\n};\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Point_<_Tp>& pt )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, pt.x);\n    write(fs, pt.y);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Point3_<_Tp>& pt )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, pt.x);\n    write(fs, pt.y);\n    write(fs, pt.z);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Size_<_Tp>& sz )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, sz.width);\n    write(fs, sz.height);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Complex<_Tp>& c )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, c.re);\n    write(fs, c.im);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Rect_<_Tp>& r )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, r.x);\n    write(fs, r.y);\n    write(fs, r.width);\n    write(fs, r.height);\n}\n\ntemplate<typename _Tp, int cn> inline void write(FileStorage& fs, const string& name, const Vec<_Tp, cn>& v )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    for(int i = 0; i < cn; i++)\n        write(fs, v.val[i]);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Scalar_<_Tp>& s )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, s.val[0]);\n    write(fs, s.val[1]);\n    write(fs, s.val[2]);\n    write(fs, s.val[3]);\n}\n\ninline void write(FileStorage& fs, const string& name, const Range& r )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, r.start);\n    write(fs, r.end);\n}\n\ntemplate<typename _Tp, int numflag> class VecWriterProxy\n{\npublic:\n    VecWriterProxy( FileStorage* _fs ) : fs(_fs) {}\n    void operator()(const vector<_Tp>& vec) const\n    {\n        size_t i, count = vec.size();\n        for( i = 0; i < count; i++ )\n            write( *fs, vec[i] );\n    }\n    FileStorage* fs;\n};\n\ntemplate<typename _Tp> class VecWriterProxy<_Tp,1>\n{\npublic:\n    VecWriterProxy( FileStorage* _fs ) : fs(_fs) {}\n    void operator()(const vector<_Tp>& vec) const\n    {\n        int _fmt = DataType<_Tp>::fmt;\n        char fmt[] = { (char)((_fmt>>8)+'1'), (char)_fmt, '\\0' };\n        fs->writeRaw( string(fmt), !vec.empty() ? (uchar*)&vec[0] : 0, vec.size()*sizeof(_Tp) );\n    }\n    FileStorage* fs;\n};\n\ntemplate<typename _Tp> static inline void write( FileStorage& fs, const vector<_Tp>& vec )\n{\n    VecWriterProxy<_Tp, DataType<_Tp>::fmt != 0> w(&fs);\n    w(vec);\n}\n\ntemplate<typename _Tp> static inline void write( FileStorage& fs, const string& name,\n                                                const vector<_Tp>& vec )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+(DataType<_Tp>::fmt != 0 ? CV_NODE_FLOW : 0));\n    write(fs, vec);\n}\n\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, const Mat& value );\nCV_EXPORTS void write( FileStorage& fs, const string& name, const SparseMat& value );\n\ntemplate<typename _Tp> static inline FileStorage& operator << (FileStorage& fs, const _Tp& value)\n{\n    if( !fs.isOpened() )\n        return fs;\n    if( fs.state == FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP )\n        CV_Error( CV_StsError, \"No element name has been given\" );\n    write( fs, fs.elname, value );\n    if( fs.state & FileStorage::INSIDE_MAP )\n        fs.state = FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP;\n    return fs;\n}\n\nCV_EXPORTS FileStorage& operator << (FileStorage& fs, const string& str);\n\nstatic inline FileStorage& operator << (FileStorage& fs, const char* str)\n{ return (fs << string(str)); }\n\nstatic inline FileStorage& operator << (FileStorage& fs, char* value)\n{ return (fs << string(value)); }\n\ninline FileNode::FileNode() : fs(0), node(0) {}\ninline FileNode::FileNode(const CvFileStorage* _fs, const CvFileNode* _node)\n    : fs(_fs), node(_node) {}\n\ninline FileNode::FileNode(const FileNode& _node) : fs(_node.fs), node(_node.node) {}\n\ninline int FileNode::type() const { return !node ? NONE : (node->tag & TYPE_MASK); }\ninline bool FileNode::empty() const { return node == 0; }\ninline bool FileNode::isNone() const { return type() == NONE; }\ninline bool FileNode::isSeq() const { return type() == SEQ; }\ninline bool FileNode::isMap() const { return type() == MAP; }\ninline bool FileNode::isInt() const { return type() == INT; }\ninline bool FileNode::isReal() const { return type() == REAL; }\ninline bool FileNode::isString() const { return type() == STR; }\ninline bool FileNode::isNamed() const { return !node ? false : (node->tag & NAMED) != 0; }\ninline size_t FileNode::size() const\n{\n    int t = type();\n    return t == MAP ? (size_t)((CvSet*)node->data.map)->active_count :\n        t == SEQ ? (size_t)node->data.seq->total : (size_t)!isNone();\n}\n\ninline CvFileNode* FileNode::operator *() { return (CvFileNode*)node; }\ninline const CvFileNode* FileNode::operator* () const { return node; }\n\nstatic inline void read(const FileNode& node, int& value, int default_value)\n{\n    value = !node.node ? default_value :\n    CV_NODE_IS_INT(node.node->tag) ? node.node->data.i :\n    CV_NODE_IS_REAL(node.node->tag) ? cvRound(node.node->data.f) : 0x7fffffff;\n}\n\nstatic inline void read(const FileNode& node, bool& value, bool default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = temp != 0;\n}\n\nstatic inline void read(const FileNode& node, uchar& value, uchar default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = saturate_cast<uchar>(temp);\n}\n\nstatic inline void read(const FileNode& node, schar& value, schar default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = saturate_cast<schar>(temp);\n}\n\nstatic inline void read(const FileNode& node, ushort& value, ushort default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = saturate_cast<ushort>(temp);\n}\n\nstatic inline void read(const FileNode& node, short& value, short default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = saturate_cast<short>(temp);\n}\n\nstatic inline void read(const FileNode& node, float& value, float default_value)\n{\n    value = !node.node ? default_value :\n        CV_NODE_IS_INT(node.node->tag) ? (float)node.node->data.i :\n        CV_NODE_IS_REAL(node.node->tag) ? (float)node.node->data.f : 1e30f;\n}\n\nstatic inline void read(const FileNode& node, double& value, double default_value)\n{\n    value = !node.node ? default_value :\n        CV_NODE_IS_INT(node.node->tag) ? (double)node.node->data.i :\n        CV_NODE_IS_REAL(node.node->tag) ? node.node->data.f : 1e300;\n}\n\nstatic inline void read(const FileNode& node, string& value, const string& default_value)\n{\n    value = !node.node ? default_value : CV_NODE_IS_STRING(node.node->tag) ? string(node.node->data.str.ptr) : string(\"\");\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Point_<_Tp>& value, const Point_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Point_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Point3_<_Tp>& value, const Point3_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 3 ? default_value : Point3_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                            saturate_cast<_Tp>(temp[2]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Size_<_Tp>& value, const Size_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Size_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Complex<_Tp>& value, const Complex<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Complex<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Rect_<_Tp>& value, const Rect_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 4 ? default_value : Rect_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                          saturate_cast<_Tp>(temp[2]), saturate_cast<_Tp>(temp[3]));\n}\n\ntemplate<typename _Tp, int cn> static inline void read(const FileNode& node, Vec<_Tp, cn>& value, const Vec<_Tp, cn>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != cn ? default_value : Vec<_Tp, cn>(&temp[0]);\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Scalar_<_Tp>& value, const Scalar_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 4 ? default_value : Scalar_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                            saturate_cast<_Tp>(temp[2]), saturate_cast<_Tp>(temp[3]));\n}\n\nstatic inline void read(const FileNode& node, Range& value, const Range& default_value)\n{\n    Point2i temp(value.start, value.end); const Point2i default_temp = Point2i(default_value.start, default_value.end);\n    read(node, temp, default_temp);\n    value.start = temp.x; value.end = temp.y;\n}\n\nCV_EXPORTS_W void read(const FileNode& node, Mat& mat, const Mat& default_mat=Mat() );\nCV_EXPORTS void read(const FileNode& node, SparseMat& mat, const SparseMat& default_mat=SparseMat() );\n\ninline FileNode::operator int() const\n{\n    int value;\n    read(*this, value, 0);\n    return value;\n}\ninline FileNode::operator float() const\n{\n    float value;\n    read(*this, value, 0.f);\n    return value;\n}\ninline FileNode::operator double() const\n{\n    double value;\n    read(*this, value, 0.);\n    return value;\n}\ninline FileNode::operator string() const\n{\n    string value;\n    read(*this, value, value);\n    return value;\n}\n\ninline void FileNode::readRaw( const string& fmt, uchar* vec, size_t len ) const\n{\n    begin().readRaw( fmt, vec, len );\n}\n\ntemplate<typename _Tp, int numflag> class VecReaderProxy\n{\npublic:\n    VecReaderProxy( FileNodeIterator* _it ) : it(_it) {}\n    void operator()(vector<_Tp>& vec, size_t count) const\n    {\n        count = std::min(count, it->remaining);\n        vec.resize(count);\n        for( size_t i = 0; i < count; i++, ++(*it) )\n            read(**it, vec[i], _Tp());\n    }\n    FileNodeIterator* it;\n};\n\ntemplate<typename _Tp> class VecReaderProxy<_Tp,1>\n{\npublic:\n    VecReaderProxy( FileNodeIterator* _it ) : it(_it) {}\n    void operator()(vector<_Tp>& vec, size_t count) const\n    {\n        size_t remaining = it->remaining, cn = DataType<_Tp>::channels;\n        int _fmt = DataType<_Tp>::fmt;\n        char fmt[] = { (char)((_fmt>>8)+'1'), (char)_fmt, '\\0' };\n        size_t remaining1 = remaining/cn;\n        count = count < remaining1 ? count : remaining1;\n        vec.resize(count);\n        it->readRaw( string(fmt), !vec.empty() ? (uchar*)&vec[0] : 0, count*sizeof(_Tp) );\n    }\n    FileNodeIterator* it;\n};\n\ntemplate<typename _Tp> static inline void\nread( FileNodeIterator& it, vector<_Tp>& vec, size_t maxCount=(size_t)INT_MAX )\n{\n    VecReaderProxy<_Tp, DataType<_Tp>::fmt != 0> r(&it);\n    r(vec, maxCount);\n}\n\ntemplate<typename _Tp> static inline void\nread( const FileNode& node, vector<_Tp>& vec, const vector<_Tp>& default_value=vector<_Tp>() )\n{\n    if(!node.node)\n        vec = default_value;\n    else\n    {\n        FileNodeIterator it = node.begin();\n        read( it, vec );\n    }\n}\n\ninline FileNodeIterator FileNode::begin() const\n{\n    return FileNodeIterator(fs, node);\n}\n\ninline FileNodeIterator FileNode::end() const\n{\n    return FileNodeIterator(fs, node, size());\n}\n\ninline FileNode FileNodeIterator::operator *() const\n{ return FileNode(fs, (const CvFileNode*)(void*)reader.ptr); }\n\ninline FileNode FileNodeIterator::operator ->() const\n{ return FileNode(fs, (const CvFileNode*)(void*)reader.ptr); }\n\ntemplate<typename _Tp> static inline FileNodeIterator& operator >> (FileNodeIterator& it, _Tp& value)\n{ read( *it, value, _Tp()); return ++it; }\n\ntemplate<typename _Tp> static inline\nFileNodeIterator& operator >> (FileNodeIterator& it, vector<_Tp>& vec)\n{\n    VecReaderProxy<_Tp, DataType<_Tp>::fmt != 0> r(&it);\n    r(vec, (size_t)INT_MAX);\n    return it;\n}\n\ntemplate<typename _Tp> static inline void operator >> (const FileNode& n, _Tp& value)\n{ read( n, value, _Tp()); }\n\ntemplate<typename _Tp> static inline void operator >> (const FileNode& n, vector<_Tp>& vec)\n{ FileNodeIterator it = n.begin(); it >> vec; }\n\nstatic inline bool operator == (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it1.fs == it2.fs && it1.container == it2.container &&\n        it1.reader.ptr == it2.reader.ptr && it1.remaining == it2.remaining;\n}\n\nstatic inline bool operator != (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return !(it1 == it2);\n}\n\nstatic inline ptrdiff_t operator - (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it2.remaining - it1.remaining;\n}\n\nstatic inline bool operator < (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it1.remaining > it2.remaining;\n}\n\ninline FileNode FileStorage::getFirstTopLevelNode() const\n{\n    FileNode r = root();\n    FileNodeIterator it = r.begin();\n    return it != r.end() ? *it : FileNode();\n}\n\n//////////////////////////////////////// Various algorithms ////////////////////////////////////\n\ntemplate<typename _Tp> static inline _Tp gcd(_Tp a, _Tp b)\n{\n    if( a < b )\n        std::swap(a, b);\n    while( b > 0 )\n    {\n        _Tp r = a % b;\n        a = b;\n        b = r;\n    }\n    return a;\n}\n\n/****************************************************************************************\\\n\n  Generic implementation of QuickSort algorithm\n  Use it as: vector<_Tp> a; ... sort(a,<less_than_predictor>);\n\n  The current implementation was derived from *BSD system qsort():\n\n    * Copyright (c) 1992, 1993\n    *  The Regents of the University of California.  All rights reserved.\n    *\n    * Redistribution and use in source and binary forms, with or without\n    * modification, are permitted provided that the following conditions\n    * are met:\n    * 1. Redistributions of source code must retain the above copyright\n    *    notice, this list of conditions and the following disclaimer.\n    * 2. Redistributions in binary form must reproduce the above copyright\n    *    notice, this list of conditions and the following disclaimer in the\n    *    documentation and/or other materials provided with the distribution.\n    * 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 University of\n    *  California, Berkeley and its contributors.\n    * 4. Neither the name of the University nor the names of its contributors\n    *    may be used to endorse or promote products derived from this software\n    *    without specific prior written permission.\n    *\n    * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n    * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n    * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    * SUCH DAMAGE.\n\n\\****************************************************************************************/\n\ntemplate<typename _Tp, class _LT> void sort( vector<_Tp>& vec, _LT LT=_LT() )\n{\n    int isort_thresh = 7;\n    int sp = 0;\n\n    struct\n    {\n        _Tp *lb;\n        _Tp *ub;\n    } stack[48];\n\n    size_t total = vec.size();\n\n    if( total <= 1 )\n        return;\n\n    _Tp* arr = &vec[0];\n    stack[0].lb = arr;\n    stack[0].ub = arr + (total - 1);\n\n    while( sp >= 0 )\n    {\n        _Tp* left = stack[sp].lb;\n        _Tp* right = stack[sp--].ub;\n\n        for(;;)\n        {\n            int i, n = (int)(right - left) + 1, m;\n            _Tp* ptr;\n            _Tp* ptr2;\n\n            if( n <= isort_thresh )\n            {\n            insert_sort:\n                for( ptr = left + 1; ptr <= right; ptr++ )\n                {\n                    for( ptr2 = ptr; ptr2 > left && LT(ptr2[0],ptr2[-1]); ptr2--)\n                        std::swap( ptr2[0], ptr2[-1] );\n                }\n                break;\n            }\n            else\n            {\n                _Tp* left0;\n                _Tp* left1;\n                _Tp* right0;\n                _Tp* right1;\n                _Tp* pivot;\n                _Tp* a;\n                _Tp* b;\n                _Tp* c;\n                int swap_cnt = 0;\n\n                left0 = left;\n                right0 = right;\n                pivot = left + (n/2);\n\n                if( n > 40 )\n                {\n                    int d = n / 8;\n                    a = left, b = left + d, c = left + 2*d;\n                    left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));\n\n                    a = pivot - d, b = pivot, c = pivot + d;\n                    pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));\n\n                    a = right - 2*d, b = right - d, c = right;\n                    right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));\n                }\n\n                a = left, b = pivot, c = right;\n                pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))\n                                   : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));\n                if( pivot != left0 )\n                {\n                    std::swap( *pivot, *left0 );\n                    pivot = left0;\n                }\n                left = left1 = left0 + 1;\n                right = right1 = right0;\n\n                for(;;)\n                {\n                    while( left <= right && !LT(*pivot, *left) )\n                    {\n                        if( !LT(*left, *pivot) )\n                        {\n                            if( left > left1 )\n                                std::swap( *left1, *left );\n                            swap_cnt = 1;\n                            left1++;\n                        }\n                        left++;\n                    }\n\n                    while( left <= right && !LT(*right, *pivot) )\n                    {\n                        if( !LT(*pivot, *right) )\n                        {\n                            if( right < right1 )\n                                std::swap( *right1, *right );\n                            swap_cnt = 1;\n                            right1--;\n                        }\n                        right--;\n                    }\n\n                    if( left > right )\n                        break;\n                    std::swap( *left, *right );\n                    swap_cnt = 1;\n                    left++;\n                    right--;\n                }\n\n                if( swap_cnt == 0 )\n                {\n                    left = left0, right = right0;\n                    goto insert_sort;\n                }\n\n                n = std::min( (int)(left1 - left0), (int)(left - left1) );\n                for( i = 0; i < n; i++ )\n                    std::swap( left0[i], left[i-n] );\n\n                n = std::min( (int)(right0 - right1), (int)(right1 - right) );\n                for( i = 0; i < n; i++ )\n                    std::swap( left[i], right0[i-n+1] );\n                n = (int)(left - left1);\n                m = (int)(right1 - right);\n                if( n > 1 )\n                {\n                    if( m > 1 )\n                    {\n                        if( n > m )\n                        {\n                            stack[++sp].lb = left0;\n                            stack[sp].ub = left0 + n - 1;\n                            left = right0 - m + 1, right = right0;\n                        }\n                        else\n                        {\n                            stack[++sp].lb = right0 - m + 1;\n                            stack[sp].ub = right0;\n                            left = left0, right = left0 + n - 1;\n                        }\n                    }\n                    else\n                        left = left0, right = left0 + n - 1;\n                }\n                else if( m > 1 )\n                    left = right0 - m + 1, right = right0;\n                else\n                    break;\n            }\n        }\n    }\n}\n\ntemplate<typename _Tp> class LessThan\n{\npublic:\n    bool operator()(const _Tp& a, const _Tp& b) const { return a < b; }\n};\n\ntemplate<typename _Tp> class GreaterEq\n{\npublic:\n    bool operator()(const _Tp& a, const _Tp& b) const { return a >= b; }\n};\n\ntemplate<typename _Tp> class LessThanIdx\n{\npublic:\n    LessThanIdx( const _Tp* _arr ) : arr(_arr) {}\n    bool operator()(int a, int b) const { return arr[a] < arr[b]; }\n    const _Tp* arr;\n};\n\ntemplate<typename _Tp> class GreaterEqIdx\n{\npublic:\n    GreaterEqIdx( const _Tp* _arr ) : arr(_arr) {}\n    bool operator()(int a, int b) const { return arr[a] >= arr[b]; }\n    const _Tp* arr;\n};\n\n\n// This function splits the input sequence or set into one or more equivalence classes and\n// returns the vector of labels - 0-based class indexes for each element.\n// predicate(a,b) returns true if the two sequence elements certainly belong to the same class.\n//\n// The algorithm is described in \"Introduction to Algorithms\"\n// by Cormen, Leiserson and Rivest, the chapter \"Data structures for disjoint sets\"\ntemplate<typename _Tp, class _EqPredicate> int\npartition( const vector<_Tp>& _vec, vector<int>& labels,\n           _EqPredicate predicate=_EqPredicate())\n{\n    int i, j, N = (int)_vec.size();\n    const _Tp* vec = &_vec[0];\n\n    const int PARENT=0;\n    const int RANK=1;\n\n    vector<int> _nodes(N*2);\n    int (*nodes)[2] = (int(*)[2])&_nodes[0];\n\n    // The first O(N) pass: create N single-vertex trees\n    for(i = 0; i < N; i++)\n    {\n        nodes[i][PARENT]=-1;\n        nodes[i][RANK] = 0;\n    }\n\n    // The main O(N^2) pass: merge connected components\n    for( i = 0; i < N; i++ )\n    {\n        int root = i;\n\n        // find root\n        while( nodes[root][PARENT] >= 0 )\n            root = nodes[root][PARENT];\n\n        for( j = 0; j < N; j++ )\n        {\n            if( i == j || !predicate(vec[i], vec[j]))\n                continue;\n            int root2 = j;\n\n            while( nodes[root2][PARENT] >= 0 )\n                root2 = nodes[root2][PARENT];\n\n            if( root2 != root )\n            {\n                // unite both trees\n                int rank = nodes[root][RANK], rank2 = nodes[root2][RANK];\n                if( rank > rank2 )\n                    nodes[root2][PARENT] = root;\n                else\n                {\n                    nodes[root][PARENT] = root2;\n                    nodes[root2][RANK] += rank == rank2;\n                    root = root2;\n                }\n                assert( nodes[root][PARENT] < 0 );\n\n                int k = j, parent;\n\n                // compress the path from node2 to root\n                while( (parent = nodes[k][PARENT]) >= 0 )\n                {\n                    nodes[k][PARENT] = root;\n                    k = parent;\n                }\n\n                // compress the path from node to root\n                k = i;\n                while( (parent = nodes[k][PARENT]) >= 0 )\n                {\n                    nodes[k][PARENT] = root;\n                    k = parent;\n                }\n            }\n        }\n    }\n\n    // Final O(N) pass: enumerate classes\n    labels.resize(N);\n    int nclasses = 0;\n\n    for( i = 0; i < N; i++ )\n    {\n        int root = i;\n        while( nodes[root][PARENT] >= 0 )\n            root = nodes[root][PARENT];\n        // re-use the rank as the class label\n        if( nodes[root][RANK] >= 0 )\n            nodes[root][RANK] = ~nclasses++;\n        labels[i] = ~nodes[root][RANK];\n    }\n\n    return nclasses;\n}\n\n\n//////////////////////////////////////////////////////////////////////////////\n\n// bridge C++ => C Seq API\nCV_EXPORTS schar*  seqPush( CvSeq* seq, const void* element=0);\nCV_EXPORTS schar*  seqPushFront( CvSeq* seq, const void* element=0);\nCV_EXPORTS void  seqPop( CvSeq* seq, void* element=0);\nCV_EXPORTS void  seqPopFront( CvSeq* seq, void* element=0);\nCV_EXPORTS void  seqPopMulti( CvSeq* seq, void* elements,\n                              int count, int in_front=0 );\nCV_EXPORTS void  seqRemove( CvSeq* seq, int index );\nCV_EXPORTS void  clearSeq( CvSeq* seq );\nCV_EXPORTS schar*  getSeqElem( const CvSeq* seq, int index );\nCV_EXPORTS void  seqRemoveSlice( CvSeq* seq, CvSlice slice );\nCV_EXPORTS void  seqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr );\n\ntemplate<typename _Tp> inline Seq<_Tp>::Seq() : seq(0) {}\ntemplate<typename _Tp> inline Seq<_Tp>::Seq( const CvSeq* _seq ) : seq((CvSeq*)_seq)\n{\n    CV_Assert(!_seq || _seq->elem_size == sizeof(_Tp));\n}\n\ntemplate<typename _Tp> inline Seq<_Tp>::Seq( MemStorage& storage,\n                                             int headerSize )\n{\n    CV_Assert(headerSize >= (int)sizeof(CvSeq));\n    seq = cvCreateSeq(DataType<_Tp>::type, headerSize, sizeof(_Tp), storage);\n}\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::operator [](int idx)\n{ return *(_Tp*)getSeqElem(seq, idx); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::operator [](int idx) const\n{ return *(_Tp*)getSeqElem(seq, idx); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> Seq<_Tp>::begin() const\n{ return SeqIterator<_Tp>(*this); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> Seq<_Tp>::end() const\n{ return SeqIterator<_Tp>(*this, true); }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::size() const\n{ return seq ? seq->total : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::type() const\n{ return seq ? CV_MAT_TYPE(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::depth() const\n{ return seq ? CV_MAT_DEPTH(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::channels() const\n{ return seq ? CV_MAT_CN(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::elemSize() const\n{ return seq ? seq->elem_size : 0; }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::index(const _Tp& elem) const\n{ return cvSeqElemIdx(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_back(const _Tp& elem)\n{ cvSeqPush(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_front(const _Tp& elem)\n{ cvSeqPushFront(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_back(const _Tp* elem, size_t count)\n{ cvSeqPushMulti(seq, elem, (int)count, 0); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_front(const _Tp* elem, size_t count)\n{ cvSeqPushMulti(seq, elem, (int)count, 1); }\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::back()\n{ return *(_Tp*)getSeqElem(seq, -1); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::back() const\n{ return *(const _Tp*)getSeqElem(seq, -1); }\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::front()\n{ return *(_Tp*)getSeqElem(seq, 0); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::front() const\n{ return *(const _Tp*)getSeqElem(seq, 0); }\n\ntemplate<typename _Tp> inline bool Seq<_Tp>::empty() const\n{ return !seq || seq->total == 0; }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::clear()\n{ if(seq) clearSeq(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_back()\n{ seqPop(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_front()\n{ seqPopFront(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_back(_Tp* elem, size_t count)\n{ seqPopMulti(seq, elem, (int)count, 0); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_front(_Tp* elem, size_t count)\n{ seqPopMulti(seq, elem, (int)count, 1); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::insert(int idx, const _Tp& elem)\n{ seqInsert(seq, idx, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::insert(int idx, const _Tp* elems, size_t count)\n{\n    CvMat m = cvMat(1, count, DataType<_Tp>::type, elems);\n    seqInsertSlice(seq, idx, &m);\n}\n\ntemplate<typename _Tp> inline void Seq<_Tp>::remove(int idx)\n{ seqRemove(seq, idx); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::remove(const Range& r)\n{ seqRemoveSlice(seq, r); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::copyTo(vector<_Tp>& vec, const Range& range) const\n{\n    size_t len = !seq ? 0 : range == Range::all() ? seq->total : range.end - range.start;\n    vec.resize(len);\n    if( seq && len )\n        cvCvtSeqToArray(seq, &vec[0], range);\n}\n\ntemplate<typename _Tp> inline Seq<_Tp>::operator vector<_Tp>() const\n{\n    vector<_Tp> vec;\n    copyTo(vec);\n    return vec;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>::SeqIterator()\n{ memset(this, 0, sizeof(*this)); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>::SeqIterator(const Seq<_Tp>& _seq, bool seekEnd)\n{\n    cvStartReadSeq(_seq.seq, this);\n    index = seekEnd ? _seq.seq->total : 0;\n}\n\ntemplate<typename _Tp> inline void SeqIterator<_Tp>::seek(size_t pos)\n{\n    cvSetSeqReaderPos(this, (int)pos, false);\n    index = pos;\n}\n\ntemplate<typename _Tp> inline size_t SeqIterator<_Tp>::tell() const\n{ return index; }\n\ntemplate<typename _Tp> inline _Tp& SeqIterator<_Tp>::operator *()\n{ return *(_Tp*)ptr; }\n\ntemplate<typename _Tp> inline const _Tp& SeqIterator<_Tp>::operator *() const\n{ return *(const _Tp*)ptr; }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator ++()\n{\n    CV_NEXT_SEQ_ELEM(sizeof(_Tp), *this);\n    if( ++index >= seq->total*2 )\n        index = 0;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> SeqIterator<_Tp>::operator ++(int) const\n{\n    SeqIterator<_Tp> it = *this;\n    ++*this;\n    return it;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator --()\n{\n    CV_PREV_SEQ_ELEM(sizeof(_Tp), *this);\n    if( --index < 0 )\n        index = seq->total*2-1;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> SeqIterator<_Tp>::operator --(int) const\n{\n    SeqIterator<_Tp> it = *this;\n    --*this;\n    return it;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator +=(int delta)\n{\n    cvSetSeqReaderPos(this, delta, 1);\n    index += delta;\n    int n = seq->total*2;\n    if( index < 0 )\n        index += n;\n    if( index >= n )\n        index -= n;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator -=(int delta)\n{\n    return (*this += -delta);\n}\n\ntemplate<typename _Tp> inline ptrdiff_t operator - (const SeqIterator<_Tp>& a,\n                                                    const SeqIterator<_Tp>& b)\n{\n    ptrdiff_t delta = a.index - b.index, n = a.seq->total;\n    if( std::abs(static_cast<long>(delta)) > n )\n        delta += delta < 0 ? n : -n;\n    return delta;\n}\n\ntemplate<typename _Tp> inline bool operator == (const SeqIterator<_Tp>& a,\n                                                const SeqIterator<_Tp>& b)\n{\n    return a.seq == b.seq && a.index == b.index;\n}\n\ntemplate<typename _Tp> inline bool operator != (const SeqIterator<_Tp>& a,\n                                                const SeqIterator<_Tp>& b)\n{\n    return !(a == b);\n}\n\n\ntemplate<typename _ClsName> struct RTTIImpl\n{\npublic:\n    static int isInstance(const void* ptr)\n    {\n        static _ClsName dummy;\n        static void* dummyp = &dummy;\n        union\n        {\n            const void* p;\n            const void** pp;\n        } a, b;\n        a.p = dummyp;\n        b.p = ptr;\n        return *a.pp == *b.pp;\n    }\n    static void release(void** dbptr)\n    {\n        if(dbptr && *dbptr)\n        {\n            delete (_ClsName*)*dbptr;\n            *dbptr = 0;\n        }\n    }\n    static void* read(CvFileStorage* fs, CvFileNode* n)\n    {\n        FileNode fn(fs, n);\n        _ClsName* obj = new _ClsName;\n        if(obj->read(fn))\n            return obj;\n        delete obj;\n        return 0;\n    }\n\n    static void write(CvFileStorage* _fs, const char* name, const void* ptr, CvAttrList)\n    {\n        if(ptr && _fs)\n        {\n            FileStorage fs(_fs);\n            fs.fs.addref();\n            ((const _ClsName*)ptr)->write(fs, string(name));\n        }\n    }\n\n    static void* clone(const void* ptr)\n    {\n        if(!ptr)\n            return 0;\n        return new _ClsName(*(const _ClsName*)ptr);\n    }\n};\n\n\nclass CV_EXPORTS Formatter\n{\npublic:\n    virtual ~Formatter() {}\n    virtual void write(std::ostream& out, const Mat& m, const int* params=0, int nparams=0) const = 0;\n    virtual void write(std::ostream& out, const void* data, int nelems, int type,\n                       const int* params=0, int nparams=0) const = 0;\n    static const Formatter* get(const char* fmt=\"\");\n    static const Formatter* setDefault(const Formatter* fmt);\n};\n\n\nstruct CV_EXPORTS Formatted\n{\n    Formatted(const Mat& m, const Formatter* fmt,\n              const vector<int>& params);\n    Formatted(const Mat& m, const Formatter* fmt,\n              const int* params=0);\n    Mat mtx;\n    const Formatter* fmt;\n    vector<int> params;\n};\n\nstatic inline Formatted format(const Mat& mtx, const char* fmt,\n                               const vector<int>& params=vector<int>())\n{\n    return Formatted(mtx, Formatter::get(fmt), params);\n}\n\ntemplate<typename _Tp> static inline Formatted format(const vector<Point_<_Tp> >& vec,\n                                                      const char* fmt, const vector<int>& params=vector<int>())\n{\n    return Formatted(Mat(vec), Formatter::get(fmt), params);\n}\n\ntemplate<typename _Tp> static inline Formatted format(const vector<Point3_<_Tp> >& vec,\n                                                      const char* fmt, const vector<int>& params=vector<int>())\n{\n    return Formatted(Mat(vec), Formatter::get(fmt), params);\n}\n\n/** \\brief prints Mat to the output stream in Matlab notation\n * use like\n @verbatim\n Mat my_mat = Mat::eye(3,3,CV_32F);\n std::cout << my_mat;\n @endverbatim\n */\nstatic inline std::ostream& operator << (std::ostream& out, const Mat& mtx)\n{\n    Formatter::get()->write(out, mtx);\n    return out;\n}\n\n/** \\brief prints Mat to the output stream allows in the specified notation (see format)\n * use like\n @verbatim\n Mat my_mat = Mat::eye(3,3,CV_32F);\n std::cout << my_mat;\n @endverbatim\n */\nstatic inline std::ostream& operator << (std::ostream& out, const Formatted& fmtd)\n{\n    fmtd.fmt->write(out, fmtd.mtx);\n    return out;\n}\n\n\ntemplate<typename _Tp> static inline std::ostream& operator << (std::ostream& out,\n                                                                const vector<Point_<_Tp> >& vec)\n{\n    Formatter::get()->write(out, Mat(vec));\n    return out;\n}\n\n\ntemplate<typename _Tp> static inline std::ostream& operator << (std::ostream& out,\n                                                                const vector<Point3_<_Tp> >& vec)\n{\n    Formatter::get()->write(out, Mat(vec));\n    return out;\n}\n\n\n/** Writes a Matx to an output stream.\n */\ntemplate<typename _Tp, int m, int n> inline std::ostream& operator<<(std::ostream& out, const Matx<_Tp, m, n>& matx)\n{\n    out << cv::Mat(matx);\n    return out;\n}\n\n/** Writes a point to an output stream in Matlab notation\n */\ntemplate<typename _Tp> inline std::ostream& operator<<(std::ostream& out, const Point_<_Tp>& p)\n{\n    out << \"[\" << p.x << \", \" << p.y << \"]\";\n    return out;\n}\n\n/** Writes a point to an output stream in Matlab notation\n */\ntemplate<typename _Tp> inline std::ostream& operator<<(std::ostream& out, const Point3_<_Tp>& p)\n{\n    out << \"[\" << p.x << \", \" << p.y << \", \" << p.z << \"]\";\n    return out;\n}\n\n/** Writes a Vec to an output stream. Format example : [10, 20, 30]\n */\ntemplate<typename _Tp, int n> inline std::ostream& operator<<(std::ostream& out, const Vec<_Tp, n>& vec)\n{\n    out << \"[\";\n\n    if(Vec<_Tp, n>::depth < CV_32F)\n    {\n        for (int i = 0; i < n - 1; ++i) {\n            out << (int)vec[i] << \", \";\n        }\n        out << (int)vec[n-1] << \"]\";\n    }\n    else\n    {\n        for (int i = 0; i < n - 1; ++i) {\n            out << vec[i] << \", \";\n        }\n        out << vec[n-1] << \"]\";\n    }\n\n    return out;\n}\n\n/** Writes a Size_ to an output stream. Format example : [640 x 480]\n */\ntemplate<typename _Tp> inline std::ostream& operator<<(std::ostream& out, const Size_<_Tp>& size)\n{\n    out << \"[\" << size.width << \" x \" << size.height << \"]\";\n    return out;\n}\n\n/** Writes a Rect_ to an output stream. Format example : [640 x 480 from (10, 20)]\n */\ntemplate<typename _Tp> inline std::ostream& operator<<(std::ostream& out, const Rect_<_Tp>& rect)\n{\n    out << \"[\" << rect.width << \" x \" << rect.height << \" from (\" << rect.x << \", \" << rect.y << \")]\";\n    return out;\n}\n\n\ntemplate<typename _Tp> inline Ptr<_Tp> Algorithm::create(const string& name)\n{\n    return _create(name).ptr<_Tp>();\n}\n\ntemplate<typename _Tp>\ninline void Algorithm::set(const char* _name, const Ptr<_Tp>& value)\n{\n    Ptr<Algorithm> algo_ptr = value. template ptr<cv::Algorithm>();\n    if (algo_ptr.empty()) {\n        CV_Error( CV_StsUnsupportedFormat, \"unknown/unsupported Ptr type of the second parameter of the method Algorithm::set\");\n    }\n    info()->set(this, _name, ParamType<Algorithm>::type, &algo_ptr);\n}\n\ntemplate<typename _Tp>\ninline void Algorithm::set(const string& _name, const Ptr<_Tp>& value)\n{\n    this->set<_Tp>(_name.c_str(), value);\n}\n\ntemplate<typename _Tp>\ninline void Algorithm::setAlgorithm(const char* _name, const Ptr<_Tp>& value)\n{\n    Ptr<Algorithm> algo_ptr = value. template ptr<cv::Algorithm>();\n    if (algo_ptr.empty()) {\n        CV_Error( CV_StsUnsupportedFormat, \"unknown/unsupported Ptr type of the second parameter of the method Algorithm::set\");\n    }\n    info()->set(this, _name, ParamType<Algorithm>::type, &algo_ptr);\n}\n\ntemplate<typename _Tp>\ninline void Algorithm::setAlgorithm(const string& _name, const Ptr<_Tp>& value)\n{\n    this->set<_Tp>(_name.c_str(), value);\n}\n\ntemplate<typename _Tp> inline typename ParamType<_Tp>::member_type Algorithm::get(const string& _name) const\n{\n    typename ParamType<_Tp>::member_type value;\n    info()->get(this, _name.c_str(), ParamType<_Tp>::type, &value);\n    return value;\n}\n\ntemplate<typename _Tp> inline typename ParamType<_Tp>::member_type Algorithm::get(const char* _name) const\n{\n    typename ParamType<_Tp>::member_type value;\n    info()->get(this, _name, ParamType<_Tp>::type, &value);\n    return value;\n}\n\ntemplate<typename _Tp, typename _Base> inline void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter,\n                  Ptr<_Tp>& value, bool readOnly, Ptr<_Tp> (Algorithm::*getter)(), void (Algorithm::*setter)(const Ptr<_Tp>&),\n                  const string& help)\n{\n    //TODO: static assert: _Tp inherits from _Base\n    addParam_(algo, parameter, ParamType<_Base>::type, &value, readOnly,\n              (Algorithm::Getter)getter, (Algorithm::Setter)setter, help);\n}\n\ntemplate<typename _Tp> inline void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter,\n                  Ptr<_Tp>& value, bool readOnly, Ptr<_Tp> (Algorithm::*getter)(), void (Algorithm::*setter)(const Ptr<_Tp>&),\n                  const string& help)\n{\n    //TODO: static assert: _Tp inherits from Algorithm\n    addParam_(algo, parameter, ParamType<Algorithm>::type, &value, readOnly,\n              (Algorithm::Getter)getter, (Algorithm::Setter)setter, help);\n}\n\n}\n\n#ifdef _MSC_VER\n# pragma warning(pop)\n#endif\n\n#endif // __cplusplus\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/types_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_TYPES_H__\n#define __OPENCV_CORE_TYPES_H__\n\n#if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER\n#  if _MSC_VER > 1300\n#    define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio 2005 warnings */\n#  endif\n#endif\n\n\n#ifndef SKIP_INCLUDES\n\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n#include <float.h>\n\n#if !defined _MSC_VER && !defined __BORLANDC__\n#  include <stdint.h>\n#endif\n\n#if defined __ICL\n#  define CV_ICC   __ICL\n#elif defined __ICC\n#  define CV_ICC   __ICC\n#elif defined __ECL\n#  define CV_ICC   __ECL\n#elif defined __ECC\n#  define CV_ICC   __ECC\n#elif defined __INTEL_COMPILER\n#  define CV_ICC   __INTEL_COMPILER\n#endif\n\n#if defined CV_ICC && !defined CV_ENABLE_UNROLLED\n#  define CV_ENABLE_UNROLLED 0\n#else\n#  define CV_ENABLE_UNROLLED 1\n#endif\n\n#if (defined _M_X64 && defined _MSC_VER && _MSC_VER >= 1400) || (__GNUC__ >= 4 && defined __x86_64__)\n#  if defined WIN32\n#    include <intrin.h>\n#  endif\n#  if defined __SSE2__ || !defined __GNUC__\n#    include <emmintrin.h>\n#  endif\n#endif\n\n#if defined __BORLANDC__\n#  include <fastmath.h>\n#else\n#  include <math.h>\n#endif\n\n#ifdef HAVE_IPL\n#  ifndef __IPL_H__\n#    if defined WIN32 || defined _WIN32\n#      include <ipl.h>\n#    else\n#      include <ipl/ipl.h>\n#    endif\n#  endif\n#elif defined __IPL_H__\n#  define HAVE_IPL\n#endif\n\n#endif // SKIP_INCLUDES\n\n#if defined WIN32 || defined _WIN32\n#  define CV_CDECL __cdecl\n#  define CV_STDCALL __stdcall\n#else\n#  define CV_CDECL\n#  define CV_STDCALL\n#endif\n\n#ifndef CV_EXTERN_C\n#  ifdef __cplusplus\n#    define CV_EXTERN_C extern \"C\"\n#    define CV_DEFAULT(val) = val\n#  else\n#    define CV_EXTERN_C\n#    define CV_DEFAULT(val)\n#  endif\n#endif\n\n#ifndef CV_EXTERN_C_FUNCPTR\n#  ifdef __cplusplus\n#    define CV_EXTERN_C_FUNCPTR(x) extern \"C\" { typedef x; }\n#  else\n#    define CV_EXTERN_C_FUNCPTR(x) typedef x\n#  endif\n#endif\n\n#ifndef CV_INLINE\n#  if defined __cplusplus\n#    define CV_INLINE inline\n#  elif defined _MSC_VER\n#    define CV_INLINE __inline\n#  else\n#    define CV_INLINE static\n#  endif\n#endif /* CV_INLINE */\n\n#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS\n#  define CV_EXPORTS __declspec(dllexport)\n#else\n#  define CV_EXPORTS\n#endif\n\n#ifndef CVAPI\n#  define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL\n#endif\n\n#if defined _MSC_VER || defined __BORLANDC__\n   typedef __int64 int64;\n   typedef unsigned __int64 uint64;\n#  define CV_BIG_INT(n)   n##I64\n#  define CV_BIG_UINT(n)  n##UI64\n#else\n   typedef int64_t int64;\n   typedef uint64_t uint64;\n#  define CV_BIG_INT(n)   n##LL\n#  define CV_BIG_UINT(n)  n##ULL\n#endif\n\n#ifndef HAVE_IPL\n   typedef unsigned char uchar;\n   typedef unsigned short ushort;\n#endif\n\ntypedef signed char schar;\n\n/* special informative macros for wrapper generators */\n#define CV_CARRAY(counter)\n#define CV_CUSTOM_CARRAY(args)\n#define CV_EXPORTS_W CV_EXPORTS\n#define CV_EXPORTS_W_SIMPLE CV_EXPORTS\n#define CV_EXPORTS_AS(synonym) CV_EXPORTS\n#define CV_EXPORTS_W_MAP CV_EXPORTS\n#define CV_IN_OUT\n#define CV_OUT\n#define CV_PROP\n#define CV_PROP_RW\n#define CV_WRAP\n#define CV_WRAP_AS(synonym)\n#define CV_WRAP_DEFAULT(value)\n\n/* CvArr* is used to pass arbitrary\n * array-like data structures\n * into functions where the particular\n * array type is recognized at runtime:\n */\ntypedef void CvArr;\n\ntypedef union Cv32suf\n{\n    int i;\n    unsigned u;\n    float f;\n}\nCv32suf;\n\ntypedef union Cv64suf\n{\n    int64 i;\n    uint64 u;\n    double f;\n}\nCv64suf;\n\ntypedef int CVStatus;\n\nenum {\n CV_StsOk=                       0,  /* everithing is ok                */\n CV_StsBackTrace=               -1,  /* pseudo error for back trace     */\n CV_StsError=                   -2,  /* unknown /unspecified error      */\n CV_StsInternal=                -3,  /* internal error (bad state)      */\n CV_StsNoMem=                   -4,  /* insufficient memory             */\n CV_StsBadArg=                  -5,  /* function arg/param is bad       */\n CV_StsBadFunc=                 -6,  /* unsupported function            */\n CV_StsNoConv=                  -7,  /* iter. didn't converge           */\n CV_StsAutoTrace=               -8,  /* tracing                         */\n CV_HeaderIsNull=               -9,  /* image header is NULL            */\n CV_BadImageSize=              -10, /* image size is invalid           */\n CV_BadOffset=                 -11, /* offset is invalid               */\n CV_BadDataPtr=                -12, /**/\n CV_BadStep=                   -13, /**/\n CV_BadModelOrChSeq=           -14, /**/\n CV_BadNumChannels=            -15, /**/\n CV_BadNumChannel1U=           -16, /**/\n CV_BadDepth=                  -17, /**/\n CV_BadAlphaChannel=           -18, /**/\n CV_BadOrder=                  -19, /**/\n CV_BadOrigin=                 -20, /**/\n CV_BadAlign=                  -21, /**/\n CV_BadCallBack=               -22, /**/\n CV_BadTileSize=               -23, /**/\n CV_BadCOI=                    -24, /**/\n CV_BadROISize=                -25, /**/\n CV_MaskIsTiled=               -26, /**/\n CV_StsNullPtr=                -27, /* null pointer */\n CV_StsVecLengthErr=           -28, /* incorrect vector length */\n CV_StsFilterStructContentErr= -29, /* incorr. filter structure content */\n CV_StsKernelStructContentErr= -30, /* incorr. transform kernel content */\n CV_StsFilterOffsetErr=        -31, /* incorrect filter offset value */\n CV_StsBadSize=                -201, /* the input/output structure size is incorrect  */\n CV_StsDivByZero=              -202, /* division by zero */\n CV_StsInplaceNotSupported=    -203, /* in-place operation is not supported */\n CV_StsObjectNotFound=         -204, /* request can't be completed */\n CV_StsUnmatchedFormats=       -205, /* formats of input/output arrays differ */\n CV_StsBadFlag=                -206, /* flag is wrong or not supported */\n CV_StsBadPoint=               -207, /* bad CvPoint */\n CV_StsBadMask=                -208, /* bad format of mask (neither 8uC1 nor 8sC1)*/\n CV_StsUnmatchedSizes=         -209, /* sizes of input/output structures do not match */\n CV_StsUnsupportedFormat=      -210, /* the data format/type is not supported by the function*/\n CV_StsOutOfRange=             -211, /* some of parameters are out of range */\n CV_StsParseError=             -212, /* invalid syntax/structure of the parsed file */\n CV_StsNotImplemented=         -213, /* the requested function/feature is not implemented */\n CV_StsBadMemBlock=            -214, /* an allocated block has been corrupted */\n CV_StsAssert=                 -215, /* assertion failed */\n CV_GpuNotSupported=           -216,\n CV_GpuApiCallError=           -217,\n CV_OpenGlNotSupported=        -218,\n CV_OpenGlApiCallError=        -219,\n CV_OpenCLDoubleNotSupported=  -220,\n CV_OpenCLInitError=           -221,\n CV_OpenCLNoAMDBlasFft=        -222\n};\n\n/****************************************************************************************\\\n*                             Common macros and inline functions                         *\n\\****************************************************************************************/\n\n#ifdef HAVE_TEGRA_OPTIMIZATION\n#  include \"tegra_round.hpp\"\n#endif\n\n#define CV_PI   3.1415926535897932384626433832795\n#define CV_LOG2 0.69314718055994530941723212145818\n\n#define CV_SWAP(a,b,t) ((t) = (a), (a) = (b), (b) = (t))\n\n#ifndef MIN\n#  define MIN(a,b)  ((a) > (b) ? (b) : (a))\n#endif\n\n#ifndef MAX\n#  define MAX(a,b)  ((a) < (b) ? (b) : (a))\n#endif\n\n/* min & max without jumps */\n#define  CV_IMIN(a, b)  ((a) ^ (((a)^(b)) & (((a) < (b)) - 1)))\n\n#define  CV_IMAX(a, b)  ((a) ^ (((a)^(b)) & (((a) > (b)) - 1)))\n\n/* absolute value without jumps */\n#ifndef __cplusplus\n#  define  CV_IABS(a)     (((a) ^ ((a) < 0 ? -1 : 0)) - ((a) < 0 ? -1 : 0))\n#else\n#  define  CV_IABS(a)     abs(a)\n#endif\n#define  CV_CMP(a,b)    (((a) > (b)) - ((a) < (b)))\n#define  CV_SIGN(a)     CV_CMP((a),0)\n\nCV_INLINE  int  cvRound( double value )\n{\n#if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__ && defined __SSE2__ && !defined __APPLE__)\n    __m128d t = _mm_set_sd( value );\n    return _mm_cvtsd_si32(t);\n#elif defined _MSC_VER && defined _M_IX86\n    int t;\n    __asm\n    {\n        fld value;\n        fistp t;\n    }\n    return t;\n#elif defined _MSC_VER && defined _M_ARM && defined HAVE_TEGRA_OPTIMIZATION\n    TEGRA_ROUND(value);\n#elif defined CV_ICC || defined __GNUC__\n#  ifdef HAVE_TEGRA_OPTIMIZATION\n    TEGRA_ROUND(value);\n#  else\n    return (int)lrint(value);\n#  endif\n#else\n    double intpart, fractpart;\n    fractpart = modf(value, &intpart);\n    if ((fabs(fractpart) != 0.5) || ((((int)intpart) % 2) != 0))\n        return (int)(value + (value >= 0 ? 0.5 : -0.5));\n    else\n        return (int)intpart;\n#endif\n}\n\n#if defined __SSE2__ || (defined _M_IX86_FP && 2 == _M_IX86_FP)\n#  include \"emmintrin.h\"\n#endif\n\nCV_INLINE  int  cvFloor( double value )\n{\n#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__ && !defined __APPLE__)\n    __m128d t = _mm_set_sd( value );\n    int i = _mm_cvtsd_si32(t);\n    return i - _mm_movemask_pd(_mm_cmplt_sd(t, _mm_cvtsi32_sd(t,i)));\n#elif defined __GNUC__\n    int i = (int)value;\n    return i - (i > value);\n#else\n    int i = cvRound(value);\n    float diff = (float)(value - i);\n    return i - (diff < 0);\n#endif\n}\n\n\nCV_INLINE  int  cvCeil( double value )\n{\n#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__&& !defined __APPLE__)\n    __m128d t = _mm_set_sd( value );\n    int i = _mm_cvtsd_si32(t);\n    return i + _mm_movemask_pd(_mm_cmplt_sd(_mm_cvtsi32_sd(t,i), t));\n#elif defined __GNUC__\n    int i = (int)value;\n    return i + (i < value);\n#else\n    int i = cvRound(value);\n    float diff = (float)(i - value);\n    return i + (diff < 0);\n#endif\n}\n\n#define cvInvSqrt(value) ((float)(1./sqrt(value)))\n#define cvSqrt(value)  ((float)sqrt(value))\n\nCV_INLINE int cvIsNaN( double value )\n{\n    Cv64suf ieee754;\n    ieee754.f = value;\n    return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) +\n           ((unsigned)ieee754.u != 0) > 0x7ff00000;\n}\n\n\nCV_INLINE int cvIsInf( double value )\n{\n    Cv64suf ieee754;\n    ieee754.f = value;\n    return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 &&\n           (unsigned)ieee754.u == 0;\n}\n\n\n/*************** Random number generation *******************/\n\ntypedef uint64 CvRNG;\n\n#define CV_RNG_COEFF 4164903690U\n\nCV_INLINE CvRNG cvRNG( int64 seed CV_DEFAULT(-1))\n{\n    CvRNG rng = seed ? (uint64)seed : (uint64)(int64)-1;\n    return rng;\n}\n\n/* Return random 32-bit unsigned integer: */\nCV_INLINE unsigned cvRandInt( CvRNG* rng )\n{\n    uint64 temp = *rng;\n    temp = (uint64)(unsigned)temp*CV_RNG_COEFF + (temp >> 32);\n    *rng = temp;\n    return (unsigned)temp;\n}\n\n/* Returns random floating-point number between 0 and 1: */\nCV_INLINE double cvRandReal( CvRNG* rng )\n{\n    return cvRandInt(rng)*2.3283064365386962890625e-10 /* 2^-32 */;\n}\n\n/****************************************************************************************\\\n*                                  Image type (IplImage)                                 *\n\\****************************************************************************************/\n\n#ifndef HAVE_IPL\n\n/*\n * The following definitions (until #endif)\n * is an extract from IPL headers.\n * Copyright (c) 1995 Intel Corporation.\n */\n#define IPL_DEPTH_SIGN 0x80000000\n\n#define IPL_DEPTH_1U     1\n#define IPL_DEPTH_8U     8\n#define IPL_DEPTH_16U   16\n#define IPL_DEPTH_32F   32\n\n#define IPL_DEPTH_8S  (IPL_DEPTH_SIGN| 8)\n#define IPL_DEPTH_16S (IPL_DEPTH_SIGN|16)\n#define IPL_DEPTH_32S (IPL_DEPTH_SIGN|32)\n\n#define IPL_DATA_ORDER_PIXEL  0\n#define IPL_DATA_ORDER_PLANE  1\n\n#define IPL_ORIGIN_TL 0\n#define IPL_ORIGIN_BL 1\n\n#define IPL_ALIGN_4BYTES   4\n#define IPL_ALIGN_8BYTES   8\n#define IPL_ALIGN_16BYTES 16\n#define IPL_ALIGN_32BYTES 32\n\n#define IPL_ALIGN_DWORD   IPL_ALIGN_4BYTES\n#define IPL_ALIGN_QWORD   IPL_ALIGN_8BYTES\n\n#define IPL_BORDER_CONSTANT   0\n#define IPL_BORDER_REPLICATE  1\n#define IPL_BORDER_REFLECT    2\n#define IPL_BORDER_WRAP       3\n\ntypedef struct _IplImage\n{\n    int  nSize;             /* sizeof(IplImage) */\n    int  ID;                /* version (=0)*/\n    int  nChannels;         /* Most of OpenCV functions support 1,2,3 or 4 channels */\n    int  alphaChannel;      /* Ignored by OpenCV */\n    int  depth;             /* Pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,\n                               IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported.  */\n    char colorModel[4];     /* Ignored by OpenCV */\n    char channelSeq[4];     /* ditto */\n    int  dataOrder;         /* 0 - interleaved color channels, 1 - separate color channels.\n                               cvCreateImage can only create interleaved images */\n    int  origin;            /* 0 - top-left origin,\n                               1 - bottom-left origin (Windows bitmaps style).  */\n    int  align;             /* Alignment of image rows (4 or 8).\n                               OpenCV ignores it and uses widthStep instead.    */\n    int  width;             /* Image width in pixels.                           */\n    int  height;            /* Image height in pixels.                          */\n    struct _IplROI *roi;    /* Image ROI. If NULL, the whole image is selected. */\n    struct _IplImage *maskROI;      /* Must be NULL. */\n    void  *imageId;                 /* \"           \" */\n    struct _IplTileInfo *tileInfo;  /* \"           \" */\n    int  imageSize;         /* Image data size in bytes\n                               (==image->height*image->widthStep\n                               in case of interleaved data)*/\n    char *imageData;        /* Pointer to aligned image data.         */\n    int  widthStep;         /* Size of aligned image row in bytes.    */\n    int  BorderMode[4];     /* Ignored by OpenCV.                     */\n    int  BorderConst[4];    /* Ditto.                                 */\n    char *imageDataOrigin;  /* Pointer to very origin of image data\n                               (not necessarily aligned) -\n                               needed for correct deallocation */\n}\nIplImage;\n\ntypedef struct _IplTileInfo IplTileInfo;\n\ntypedef struct _IplROI\n{\n    int  coi; /* 0 - no COI (all channels are selected), 1 - 0th channel is selected ...*/\n    int  xOffset;\n    int  yOffset;\n    int  width;\n    int  height;\n}\nIplROI;\n\ntypedef struct _IplConvKernel\n{\n    int  nCols;\n    int  nRows;\n    int  anchorX;\n    int  anchorY;\n    int *values;\n    int  nShiftR;\n}\nIplConvKernel;\n\ntypedef struct _IplConvKernelFP\n{\n    int  nCols;\n    int  nRows;\n    int  anchorX;\n    int  anchorY;\n    float *values;\n}\nIplConvKernelFP;\n\n#define IPL_IMAGE_HEADER 1\n#define IPL_IMAGE_DATA   2\n#define IPL_IMAGE_ROI    4\n\n#endif/*HAVE_IPL*/\n\n/* extra border mode */\n#define IPL_BORDER_REFLECT_101    4\n#define IPL_BORDER_TRANSPARENT    5\n\n#define IPL_IMAGE_MAGIC_VAL  ((int)sizeof(IplImage))\n#define CV_TYPE_NAME_IMAGE \"opencv-image\"\n\n#define CV_IS_IMAGE_HDR(img) \\\n    ((img) != NULL && ((const IplImage*)(img))->nSize == sizeof(IplImage))\n\n#define CV_IS_IMAGE(img) \\\n    (CV_IS_IMAGE_HDR(img) && ((IplImage*)img)->imageData != NULL)\n\n/* for storing double-precision\n   floating point data in IplImage's */\n#define IPL_DEPTH_64F  64\n\n/* get reference to pixel at (col,row),\n   for multi-channel images (col) should be multiplied by number of channels */\n#define CV_IMAGE_ELEM( image, elemtype, row, col )       \\\n    (((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])\n\n/****************************************************************************************\\\n*                                  Matrix type (CvMat)                                   *\n\\****************************************************************************************/\n\n#define CV_CN_MAX     512\n#define CV_CN_SHIFT   3\n#define CV_DEPTH_MAX  (1 << CV_CN_SHIFT)\n\n#define CV_8U   0\n#define CV_8S   1\n#define CV_16U  2\n#define CV_16S  3\n#define CV_32S  4\n#define CV_32F  5\n#define CV_64F  6\n#define CV_USRTYPE1 7\n\n#define CV_MAT_DEPTH_MASK       (CV_DEPTH_MAX - 1)\n#define CV_MAT_DEPTH(flags)     ((flags) & CV_MAT_DEPTH_MASK)\n\n#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))\n#define CV_MAKE_TYPE CV_MAKETYPE\n\n#define CV_8UC1 CV_MAKETYPE(CV_8U,1)\n#define CV_8UC2 CV_MAKETYPE(CV_8U,2)\n#define CV_8UC3 CV_MAKETYPE(CV_8U,3)\n#define CV_8UC4 CV_MAKETYPE(CV_8U,4)\n#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))\n\n#define CV_8SC1 CV_MAKETYPE(CV_8S,1)\n#define CV_8SC2 CV_MAKETYPE(CV_8S,2)\n#define CV_8SC3 CV_MAKETYPE(CV_8S,3)\n#define CV_8SC4 CV_MAKETYPE(CV_8S,4)\n#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))\n\n#define CV_16UC1 CV_MAKETYPE(CV_16U,1)\n#define CV_16UC2 CV_MAKETYPE(CV_16U,2)\n#define CV_16UC3 CV_MAKETYPE(CV_16U,3)\n#define CV_16UC4 CV_MAKETYPE(CV_16U,4)\n#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))\n\n#define CV_16SC1 CV_MAKETYPE(CV_16S,1)\n#define CV_16SC2 CV_MAKETYPE(CV_16S,2)\n#define CV_16SC3 CV_MAKETYPE(CV_16S,3)\n#define CV_16SC4 CV_MAKETYPE(CV_16S,4)\n#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))\n\n#define CV_32SC1 CV_MAKETYPE(CV_32S,1)\n#define CV_32SC2 CV_MAKETYPE(CV_32S,2)\n#define CV_32SC3 CV_MAKETYPE(CV_32S,3)\n#define CV_32SC4 CV_MAKETYPE(CV_32S,4)\n#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))\n\n#define CV_32FC1 CV_MAKETYPE(CV_32F,1)\n#define CV_32FC2 CV_MAKETYPE(CV_32F,2)\n#define CV_32FC3 CV_MAKETYPE(CV_32F,3)\n#define CV_32FC4 CV_MAKETYPE(CV_32F,4)\n#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))\n\n#define CV_64FC1 CV_MAKETYPE(CV_64F,1)\n#define CV_64FC2 CV_MAKETYPE(CV_64F,2)\n#define CV_64FC3 CV_MAKETYPE(CV_64F,3)\n#define CV_64FC4 CV_MAKETYPE(CV_64F,4)\n#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))\n\n#define CV_AUTO_STEP  0x7fffffff\n#define CV_WHOLE_ARR  cvSlice( 0, 0x3fffffff )\n\n#define CV_MAT_CN_MASK          ((CV_CN_MAX - 1) << CV_CN_SHIFT)\n#define CV_MAT_CN(flags)        ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1)\n#define CV_MAT_TYPE_MASK        (CV_DEPTH_MAX*CV_CN_MAX - 1)\n#define CV_MAT_TYPE(flags)      ((flags) & CV_MAT_TYPE_MASK)\n#define CV_MAT_CONT_FLAG_SHIFT  14\n#define CV_MAT_CONT_FLAG        (1 << CV_MAT_CONT_FLAG_SHIFT)\n#define CV_IS_MAT_CONT(flags)   ((flags) & CV_MAT_CONT_FLAG)\n#define CV_IS_CONT_MAT          CV_IS_MAT_CONT\n#define CV_SUBMAT_FLAG_SHIFT    15\n#define CV_SUBMAT_FLAG          (1 << CV_SUBMAT_FLAG_SHIFT)\n#define CV_IS_SUBMAT(flags)     ((flags) & CV_MAT_SUBMAT_FLAG)\n\n#define CV_MAGIC_MASK       0xFFFF0000\n#define CV_MAT_MAGIC_VAL    0x42420000\n#define CV_TYPE_NAME_MAT    \"opencv-matrix\"\n\ntypedef struct CvMat\n{\n    int type;\n    int step;\n\n    /* for internal use only */\n    int* refcount;\n    int hdr_refcount;\n\n    union\n    {\n        uchar* ptr;\n        short* s;\n        int* i;\n        float* fl;\n        double* db;\n    } data;\n\n#ifdef __cplusplus\n    union\n    {\n        int rows;\n        int height;\n    };\n\n    union\n    {\n        int cols;\n        int width;\n    };\n#else\n    int rows;\n    int cols;\n#endif\n\n}\nCvMat;\n\n\n#define CV_IS_MAT_HDR(mat) \\\n    ((mat) != NULL && \\\n    (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \\\n    ((const CvMat*)(mat))->cols > 0 && ((const CvMat*)(mat))->rows > 0)\n\n#define CV_IS_MAT_HDR_Z(mat) \\\n    ((mat) != NULL && \\\n    (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \\\n    ((const CvMat*)(mat))->cols >= 0 && ((const CvMat*)(mat))->rows >= 0)\n\n#define CV_IS_MAT(mat) \\\n    (CV_IS_MAT_HDR(mat) && ((const CvMat*)(mat))->data.ptr != NULL)\n\n#define CV_IS_MASK_ARR(mat) \\\n    (((mat)->type & (CV_MAT_TYPE_MASK & ~CV_8SC1)) == 0)\n\n#define CV_ARE_TYPES_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_TYPE_MASK) == 0)\n\n#define CV_ARE_CNS_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_CN_MASK) == 0)\n\n#define CV_ARE_DEPTHS_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_DEPTH_MASK) == 0)\n\n#define CV_ARE_SIZES_EQ(mat1, mat2) \\\n    ((mat1)->rows == (mat2)->rows && (mat1)->cols == (mat2)->cols)\n\n#define CV_IS_MAT_CONST(mat)  \\\n    (((mat)->rows|(mat)->cols) == 1)\n\n/* Size of each channel item,\n   0x124489 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */\n#define CV_ELEM_SIZE1(type) \\\n    ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15)\n\n/* 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */\n#define CV_ELEM_SIZE(type) \\\n    (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3))\n\n#define IPL2CV_DEPTH(depth) \\\n    ((((CV_8U)+(CV_16U<<4)+(CV_32F<<8)+(CV_64F<<16)+(CV_8S<<20)+ \\\n    (CV_16S<<24)+(CV_32S<<28)) >> ((((depth) & 0xF0) >> 2) + \\\n    (((depth) & IPL_DEPTH_SIGN) ? 20 : 0))) & 15)\n\n/* Inline constructor. No data is allocated internally!!!\n * (Use together with cvCreateData, or use cvCreateMat instead to\n * get a matrix with allocated data):\n */\nCV_INLINE CvMat cvMat( int rows, int cols, int type, void* data CV_DEFAULT(NULL))\n{\n    CvMat m;\n\n    assert( (unsigned)CV_MAT_DEPTH(type) <= CV_64F );\n    type = CV_MAT_TYPE(type);\n    m.type = CV_MAT_MAGIC_VAL | CV_MAT_CONT_FLAG | type;\n    m.cols = cols;\n    m.rows = rows;\n    m.step = m.cols*CV_ELEM_SIZE(type);\n    m.data.ptr = (uchar*)data;\n    m.refcount = NULL;\n    m.hdr_refcount = 0;\n\n    return m;\n}\n\n\n#define CV_MAT_ELEM_PTR_FAST( mat, row, col, pix_size )  \\\n    (assert( (unsigned)(row) < (unsigned)(mat).rows &&   \\\n             (unsigned)(col) < (unsigned)(mat).cols ),   \\\n     (mat).data.ptr + (size_t)(mat).step*(row) + (pix_size)*(col))\n\n#define CV_MAT_ELEM_PTR( mat, row, col )                 \\\n    CV_MAT_ELEM_PTR_FAST( mat, row, col, CV_ELEM_SIZE((mat).type) )\n\n#define CV_MAT_ELEM( mat, elemtype, row, col )           \\\n    (*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype)))\n\n\nCV_INLINE  double  cvmGet( const CvMat* mat, int row, int col )\n{\n    int type;\n\n    type = CV_MAT_TYPE(mat->type);\n    assert( (unsigned)row < (unsigned)mat->rows &&\n            (unsigned)col < (unsigned)mat->cols );\n\n    if( type == CV_32FC1 )\n        return ((float*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col];\n    else\n    {\n        assert( type == CV_64FC1 );\n        return ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col];\n    }\n}\n\n\nCV_INLINE  void  cvmSet( CvMat* mat, int row, int col, double value )\n{\n    int type;\n    type = CV_MAT_TYPE(mat->type);\n    assert( (unsigned)row < (unsigned)mat->rows &&\n            (unsigned)col < (unsigned)mat->cols );\n\n    if( type == CV_32FC1 )\n        ((float*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (float)value;\n    else\n    {\n        assert( type == CV_64FC1 );\n        ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (double)value;\n    }\n}\n\n\nCV_INLINE int cvIplDepth( int type )\n{\n    int depth = CV_MAT_DEPTH(type);\n    return CV_ELEM_SIZE1(depth)*8 | (depth == CV_8S || depth == CV_16S ||\n           depth == CV_32S ? IPL_DEPTH_SIGN : 0);\n}\n\n\n/****************************************************************************************\\\n*                       Multi-dimensional dense array (CvMatND)                          *\n\\****************************************************************************************/\n\n#define CV_MATND_MAGIC_VAL    0x42430000\n#define CV_TYPE_NAME_MATND    \"opencv-nd-matrix\"\n\n#define CV_MAX_DIM            32\n#define CV_MAX_DIM_HEAP       1024\n\ntypedef struct CvMatND\n{\n    int type;\n    int dims;\n\n    int* refcount;\n    int hdr_refcount;\n\n    union\n    {\n        uchar* ptr;\n        float* fl;\n        double* db;\n        int* i;\n        short* s;\n    } data;\n\n    struct\n    {\n        int size;\n        int step;\n    }\n    dim[CV_MAX_DIM];\n}\nCvMatND;\n\n#define CV_IS_MATND_HDR(mat) \\\n    ((mat) != NULL && (((const CvMatND*)(mat))->type & CV_MAGIC_MASK) == CV_MATND_MAGIC_VAL)\n\n#define CV_IS_MATND(mat) \\\n    (CV_IS_MATND_HDR(mat) && ((const CvMatND*)(mat))->data.ptr != NULL)\n\n\n/****************************************************************************************\\\n*                      Multi-dimensional sparse array (CvSparseMat)                      *\n\\****************************************************************************************/\n\n#define CV_SPARSE_MAT_MAGIC_VAL    0x42440000\n#define CV_TYPE_NAME_SPARSE_MAT    \"opencv-sparse-matrix\"\n\nstruct CvSet;\n\ntypedef struct CvSparseMat\n{\n    int type;\n    int dims;\n    int* refcount;\n    int hdr_refcount;\n\n    struct CvSet* heap;\n    void** hashtable;\n    int hashsize;\n    int valoffset;\n    int idxoffset;\n    int size[CV_MAX_DIM];\n}\nCvSparseMat;\n\n#define CV_IS_SPARSE_MAT_HDR(mat) \\\n    ((mat) != NULL && \\\n    (((const CvSparseMat*)(mat))->type & CV_MAGIC_MASK) == CV_SPARSE_MAT_MAGIC_VAL)\n\n#define CV_IS_SPARSE_MAT(mat) \\\n    CV_IS_SPARSE_MAT_HDR(mat)\n\n/**************** iteration through a sparse array *****************/\n\ntypedef struct CvSparseNode\n{\n    unsigned hashval;\n    struct CvSparseNode* next;\n}\nCvSparseNode;\n\ntypedef struct CvSparseMatIterator\n{\n    CvSparseMat* mat;\n    CvSparseNode* node;\n    int curidx;\n}\nCvSparseMatIterator;\n\n#define CV_NODE_VAL(mat,node)   ((void*)((uchar*)(node) + (mat)->valoffset))\n#define CV_NODE_IDX(mat,node)   ((int*)((uchar*)(node) + (mat)->idxoffset))\n\n/****************************************************************************************\\\n*                                         Histogram                                      *\n\\****************************************************************************************/\n\ntypedef int CvHistType;\n\n#define CV_HIST_MAGIC_VAL     0x42450000\n#define CV_HIST_UNIFORM_FLAG  (1 << 10)\n\n/* indicates whether bin ranges are set already or not */\n#define CV_HIST_RANGES_FLAG   (1 << 11)\n\n#define CV_HIST_ARRAY         0\n#define CV_HIST_SPARSE        1\n#define CV_HIST_TREE          CV_HIST_SPARSE\n\n/* should be used as a parameter only,\n   it turns to CV_HIST_UNIFORM_FLAG of hist->type */\n#define CV_HIST_UNIFORM       1\n\ntypedef struct CvHistogram\n{\n    int     type;\n    CvArr*  bins;\n    float   thresh[CV_MAX_DIM][2];  /* For uniform histograms.                      */\n    float** thresh2;                /* For non-uniform histograms.                  */\n    CvMatND mat;                    /* Embedded matrix header for array histograms. */\n}\nCvHistogram;\n\n#define CV_IS_HIST( hist ) \\\n    ((hist) != NULL  && \\\n     (((CvHistogram*)(hist))->type & CV_MAGIC_MASK) == CV_HIST_MAGIC_VAL && \\\n     (hist)->bins != NULL)\n\n#define CV_IS_UNIFORM_HIST( hist ) \\\n    (((hist)->type & CV_HIST_UNIFORM_FLAG) != 0)\n\n#define CV_IS_SPARSE_HIST( hist ) \\\n    CV_IS_SPARSE_MAT((hist)->bins)\n\n#define CV_HIST_HAS_RANGES( hist ) \\\n    (((hist)->type & CV_HIST_RANGES_FLAG) != 0)\n\n/****************************************************************************************\\\n*                      Other supplementary data type definitions                         *\n\\****************************************************************************************/\n\n/*************************************** CvRect *****************************************/\n\ntypedef struct CvRect\n{\n    int x;\n    int y;\n    int width;\n    int height;\n}\nCvRect;\n\nCV_INLINE  CvRect  cvRect( int x, int y, int width, int height )\n{\n    CvRect r;\n\n    r.x = x;\n    r.y = y;\n    r.width = width;\n    r.height = height;\n\n    return r;\n}\n\n\nCV_INLINE  IplROI  cvRectToROI( CvRect rect, int coi )\n{\n    IplROI roi;\n    roi.xOffset = rect.x;\n    roi.yOffset = rect.y;\n    roi.width = rect.width;\n    roi.height = rect.height;\n    roi.coi = coi;\n\n    return roi;\n}\n\n\nCV_INLINE  CvRect  cvROIToRect( IplROI roi )\n{\n    return cvRect( roi.xOffset, roi.yOffset, roi.width, roi.height );\n}\n\n/*********************************** CvTermCriteria *************************************/\n\n#define CV_TERMCRIT_ITER    1\n#define CV_TERMCRIT_NUMBER  CV_TERMCRIT_ITER\n#define CV_TERMCRIT_EPS     2\n\ntypedef struct CvTermCriteria\n{\n    int    type;  /* may be combination of\n                     CV_TERMCRIT_ITER\n                     CV_TERMCRIT_EPS */\n    int    max_iter;\n    double epsilon;\n}\nCvTermCriteria;\n\nCV_INLINE  CvTermCriteria  cvTermCriteria( int type, int max_iter, double epsilon )\n{\n    CvTermCriteria t;\n\n    t.type = type;\n    t.max_iter = max_iter;\n    t.epsilon = (float)epsilon;\n\n    return t;\n}\n\n\n/******************************* CvPoint and variants ***********************************/\n\ntypedef struct CvPoint\n{\n    int x;\n    int y;\n}\nCvPoint;\n\n\nCV_INLINE  CvPoint  cvPoint( int x, int y )\n{\n    CvPoint p;\n\n    p.x = x;\n    p.y = y;\n\n    return p;\n}\n\n\ntypedef struct CvPoint2D32f\n{\n    float x;\n    float y;\n}\nCvPoint2D32f;\n\n\nCV_INLINE  CvPoint2D32f  cvPoint2D32f( double x, double y )\n{\n    CvPoint2D32f p;\n\n    p.x = (float)x;\n    p.y = (float)y;\n\n    return p;\n}\n\n\nCV_INLINE  CvPoint2D32f  cvPointTo32f( CvPoint point )\n{\n    return cvPoint2D32f( (float)point.x, (float)point.y );\n}\n\n\nCV_INLINE  CvPoint  cvPointFrom32f( CvPoint2D32f point )\n{\n    CvPoint ipt;\n    ipt.x = cvRound(point.x);\n    ipt.y = cvRound(point.y);\n\n    return ipt;\n}\n\n\ntypedef struct CvPoint3D32f\n{\n    float x;\n    float y;\n    float z;\n}\nCvPoint3D32f;\n\n\nCV_INLINE  CvPoint3D32f  cvPoint3D32f( double x, double y, double z )\n{\n    CvPoint3D32f p;\n\n    p.x = (float)x;\n    p.y = (float)y;\n    p.z = (float)z;\n\n    return p;\n}\n\n\ntypedef struct CvPoint2D64f\n{\n    double x;\n    double y;\n}\nCvPoint2D64f;\n\n\nCV_INLINE  CvPoint2D64f  cvPoint2D64f( double x, double y )\n{\n    CvPoint2D64f p;\n\n    p.x = x;\n    p.y = y;\n\n    return p;\n}\n\n\ntypedef struct CvPoint3D64f\n{\n    double x;\n    double y;\n    double z;\n}\nCvPoint3D64f;\n\n\nCV_INLINE  CvPoint3D64f  cvPoint3D64f( double x, double y, double z )\n{\n    CvPoint3D64f p;\n\n    p.x = x;\n    p.y = y;\n    p.z = z;\n\n    return p;\n}\n\n\n/******************************** CvSize's & CvBox **************************************/\n\ntypedef struct CvSize\n{\n    int width;\n    int height;\n}\nCvSize;\n\nCV_INLINE  CvSize  cvSize( int width, int height )\n{\n    CvSize s;\n\n    s.width = width;\n    s.height = height;\n\n    return s;\n}\n\ntypedef struct CvSize2D32f\n{\n    float width;\n    float height;\n}\nCvSize2D32f;\n\n\nCV_INLINE  CvSize2D32f  cvSize2D32f( double width, double height )\n{\n    CvSize2D32f s;\n\n    s.width = (float)width;\n    s.height = (float)height;\n\n    return s;\n}\n\ntypedef struct CvBox2D\n{\n    CvPoint2D32f center;  /* Center of the box.                          */\n    CvSize2D32f  size;    /* Box width and length.                       */\n    float angle;          /* Angle between the horizontal axis           */\n                          /* and the first side (i.e. length) in degrees */\n}\nCvBox2D;\n\n\n/* Line iterator state: */\ntypedef struct CvLineIterator\n{\n    /* Pointer to the current point: */\n    uchar* ptr;\n\n    /* Bresenham algorithm state: */\n    int  err;\n    int  plus_delta;\n    int  minus_delta;\n    int  plus_step;\n    int  minus_step;\n}\nCvLineIterator;\n\n\n\n/************************************* CvSlice ******************************************/\n\ntypedef struct CvSlice\n{\n    int  start_index, end_index;\n}\nCvSlice;\n\nCV_INLINE  CvSlice  cvSlice( int start, int end )\n{\n    CvSlice slice;\n    slice.start_index = start;\n    slice.end_index = end;\n\n    return slice;\n}\n\n#define CV_WHOLE_SEQ_END_INDEX 0x3fffffff\n#define CV_WHOLE_SEQ  cvSlice(0, CV_WHOLE_SEQ_END_INDEX)\n\n\n/************************************* CvScalar *****************************************/\n\ntypedef struct CvScalar\n{\n    double val[4];\n}\nCvScalar;\n\nCV_INLINE  CvScalar  cvScalar( double val0, double val1 CV_DEFAULT(0),\n                               double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0))\n{\n    CvScalar scalar;\n    scalar.val[0] = val0; scalar.val[1] = val1;\n    scalar.val[2] = val2; scalar.val[3] = val3;\n    return scalar;\n}\n\n\nCV_INLINE  CvScalar  cvRealScalar( double val0 )\n{\n    CvScalar scalar;\n    scalar.val[0] = val0;\n    scalar.val[1] = scalar.val[2] = scalar.val[3] = 0;\n    return scalar;\n}\n\nCV_INLINE  CvScalar  cvScalarAll( double val0123 )\n{\n    CvScalar scalar;\n    scalar.val[0] = val0123;\n    scalar.val[1] = val0123;\n    scalar.val[2] = val0123;\n    scalar.val[3] = val0123;\n    return scalar;\n}\n\n/****************************************************************************************\\\n*                                   Dynamic Data structures                              *\n\\****************************************************************************************/\n\n/******************************** Memory storage ****************************************/\n\ntypedef struct CvMemBlock\n{\n    struct CvMemBlock*  prev;\n    struct CvMemBlock*  next;\n}\nCvMemBlock;\n\n#define CV_STORAGE_MAGIC_VAL    0x42890000\n\ntypedef struct CvMemStorage\n{\n    int signature;\n    CvMemBlock* bottom;           /* First allocated block.                   */\n    CvMemBlock* top;              /* Current memory block - top of the stack. */\n    struct  CvMemStorage* parent; /* We get new blocks from parent as needed. */\n    int block_size;               /* Block size.                              */\n    int free_space;               /* Remaining free space in current block.   */\n}\nCvMemStorage;\n\n#define CV_IS_STORAGE(storage)  \\\n    ((storage) != NULL &&       \\\n    (((CvMemStorage*)(storage))->signature & CV_MAGIC_MASK) == CV_STORAGE_MAGIC_VAL)\n\n\ntypedef struct CvMemStoragePos\n{\n    CvMemBlock* top;\n    int free_space;\n}\nCvMemStoragePos;\n\n\n/*********************************** Sequence *******************************************/\n\ntypedef struct CvSeqBlock\n{\n    struct CvSeqBlock*  prev; /* Previous sequence block.                   */\n    struct CvSeqBlock*  next; /* Next sequence block.                       */\n  int    start_index;         /* Index of the first element in the block +  */\n                              /* sequence->first->start_index.              */\n    int    count;             /* Number of elements in the block.           */\n    schar* data;              /* Pointer to the first element of the block. */\n}\nCvSeqBlock;\n\n\n#define CV_TREE_NODE_FIELDS(node_type)                               \\\n    int       flags;             /* Miscellaneous flags.     */      \\\n    int       header_size;       /* Size of sequence header. */      \\\n    struct    node_type* h_prev; /* Previous sequence.       */      \\\n    struct    node_type* h_next; /* Next sequence.           */      \\\n    struct    node_type* v_prev; /* 2nd previous sequence.   */      \\\n    struct    node_type* v_next  /* 2nd next sequence.       */\n\n/*\n   Read/Write sequence.\n   Elements can be dynamically inserted to or deleted from the sequence.\n*/\n#define CV_SEQUENCE_FIELDS()                                              \\\n    CV_TREE_NODE_FIELDS(CvSeq);                                           \\\n    int       total;          /* Total number of elements.            */  \\\n    int       elem_size;      /* Size of sequence element in bytes.   */  \\\n    schar*    block_max;      /* Maximal bound of the last block.     */  \\\n    schar*    ptr;            /* Current write pointer.               */  \\\n    int       delta_elems;    /* Grow seq this many at a time.        */  \\\n    CvMemStorage* storage;    /* Where the seq is stored.             */  \\\n    CvSeqBlock* free_blocks;  /* Free blocks list.                    */  \\\n    CvSeqBlock* first;        /* Pointer to the first sequence block. */\n\ntypedef struct CvSeq\n{\n    CV_SEQUENCE_FIELDS()\n}\nCvSeq;\n\n#define CV_TYPE_NAME_SEQ             \"opencv-sequence\"\n#define CV_TYPE_NAME_SEQ_TREE        \"opencv-sequence-tree\"\n\n/*************************************** Set ********************************************/\n/*\n  Set.\n  Order is not preserved. There can be gaps between sequence elements.\n  After the element has been inserted it stays in the same place all the time.\n  The MSB(most-significant or sign bit) of the first field (flags) is 0 iff the element exists.\n*/\n#define CV_SET_ELEM_FIELDS(elem_type)   \\\n    int  flags;                         \\\n    struct elem_type* next_free;\n\ntypedef struct CvSetElem\n{\n    CV_SET_ELEM_FIELDS(CvSetElem)\n}\nCvSetElem;\n\n#define CV_SET_FIELDS()      \\\n    CV_SEQUENCE_FIELDS()     \\\n    CvSetElem* free_elems;   \\\n    int active_count;\n\ntypedef struct CvSet\n{\n    CV_SET_FIELDS()\n}\nCvSet;\n\n\n#define CV_SET_ELEM_IDX_MASK   ((1 << 26) - 1)\n#define CV_SET_ELEM_FREE_FLAG  (1 << (sizeof(int)*8-1))\n\n/* Checks whether the element pointed by ptr belongs to a set or not */\n#define CV_IS_SET_ELEM( ptr )  (((CvSetElem*)(ptr))->flags >= 0)\n\n/************************************* Graph ********************************************/\n\n/*\n  We represent a graph as a set of vertices.\n  Vertices contain their adjacency lists (more exactly, pointers to first incoming or\n  outcoming edge (or 0 if isolated vertex)). Edges are stored in another set.\n  There is a singly-linked list of incoming/outcoming edges for each vertex.\n\n  Each edge consists of\n\n     o   Two pointers to the starting and ending vertices\n         (vtx[0] and vtx[1] respectively).\n\n   A graph may be oriented or not. In the latter case, edges between\n   vertex i to vertex j are not distinguished during search operations.\n\n     o   Two pointers to next edges for the starting and ending vertices, where\n         next[0] points to the next edge in the vtx[0] adjacency list and\n         next[1] points to the next edge in the vtx[1] adjacency list.\n*/\n#define CV_GRAPH_EDGE_FIELDS()      \\\n    int flags;                      \\\n    float weight;                   \\\n    struct CvGraphEdge* next[2];    \\\n    struct CvGraphVtx* vtx[2];\n\n\n#define CV_GRAPH_VERTEX_FIELDS()    \\\n    int flags;                      \\\n    struct CvGraphEdge* first;\n\n\ntypedef struct CvGraphEdge\n{\n    CV_GRAPH_EDGE_FIELDS()\n}\nCvGraphEdge;\n\ntypedef struct CvGraphVtx\n{\n    CV_GRAPH_VERTEX_FIELDS()\n}\nCvGraphVtx;\n\ntypedef struct CvGraphVtx2D\n{\n    CV_GRAPH_VERTEX_FIELDS()\n    CvPoint2D32f* ptr;\n}\nCvGraphVtx2D;\n\n/*\n   Graph is \"derived\" from the set (this is set a of vertices)\n   and includes another set (edges)\n*/\n#define  CV_GRAPH_FIELDS()   \\\n    CV_SET_FIELDS()          \\\n    CvSet* edges;\n\ntypedef struct CvGraph\n{\n    CV_GRAPH_FIELDS()\n}\nCvGraph;\n\n#define CV_TYPE_NAME_GRAPH \"opencv-graph\"\n\n/*********************************** Chain/Countour *************************************/\n\ntypedef struct CvChain\n{\n    CV_SEQUENCE_FIELDS()\n    CvPoint  origin;\n}\nCvChain;\n\n#define CV_CONTOUR_FIELDS()  \\\n    CV_SEQUENCE_FIELDS()     \\\n    CvRect rect;             \\\n    int color;               \\\n    int reserved[3];\n\ntypedef struct CvContour\n{\n    CV_CONTOUR_FIELDS()\n}\nCvContour;\n\ntypedef CvContour CvPoint2DSeq;\n\n/****************************************************************************************\\\n*                                    Sequence types                                      *\n\\****************************************************************************************/\n\n#define CV_SEQ_MAGIC_VAL             0x42990000\n\n#define CV_IS_SEQ(seq) \\\n    ((seq) != NULL && (((CvSeq*)(seq))->flags & CV_MAGIC_MASK) == CV_SEQ_MAGIC_VAL)\n\n#define CV_SET_MAGIC_VAL             0x42980000\n#define CV_IS_SET(set) \\\n    ((set) != NULL && (((CvSeq*)(set))->flags & CV_MAGIC_MASK) == CV_SET_MAGIC_VAL)\n\n#define CV_SEQ_ELTYPE_BITS           12\n#define CV_SEQ_ELTYPE_MASK           ((1 << CV_SEQ_ELTYPE_BITS) - 1)\n\n#define CV_SEQ_ELTYPE_POINT          CV_32SC2  /* (x,y) */\n#define CV_SEQ_ELTYPE_CODE           CV_8UC1   /* freeman code: 0..7 */\n#define CV_SEQ_ELTYPE_GENERIC        0\n#define CV_SEQ_ELTYPE_PTR            CV_USRTYPE1\n#define CV_SEQ_ELTYPE_PPOINT         CV_SEQ_ELTYPE_PTR  /* &(x,y) */\n#define CV_SEQ_ELTYPE_INDEX          CV_32SC1  /* #(x,y) */\n#define CV_SEQ_ELTYPE_GRAPH_EDGE     0  /* &next_o, &next_d, &vtx_o, &vtx_d */\n#define CV_SEQ_ELTYPE_GRAPH_VERTEX   0  /* first_edge, &(x,y) */\n#define CV_SEQ_ELTYPE_TRIAN_ATR      0  /* vertex of the binary tree   */\n#define CV_SEQ_ELTYPE_CONNECTED_COMP 0  /* connected component  */\n#define CV_SEQ_ELTYPE_POINT3D        CV_32FC3  /* (x,y,z)  */\n\n#define CV_SEQ_KIND_BITS        2\n#define CV_SEQ_KIND_MASK        (((1 << CV_SEQ_KIND_BITS) - 1)<<CV_SEQ_ELTYPE_BITS)\n\n/* types of sequences */\n#define CV_SEQ_KIND_GENERIC     (0 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_CURVE       (1 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_BIN_TREE    (2 << CV_SEQ_ELTYPE_BITS)\n\n/* types of sparse sequences (sets) */\n#define CV_SEQ_KIND_GRAPH       (1 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_SUBDIV2D    (2 << CV_SEQ_ELTYPE_BITS)\n\n#define CV_SEQ_FLAG_SHIFT       (CV_SEQ_KIND_BITS + CV_SEQ_ELTYPE_BITS)\n\n/* flags for curves */\n#define CV_SEQ_FLAG_CLOSED     (1 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_SIMPLE     (0 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_CONVEX     (0 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_HOLE       (2 << CV_SEQ_FLAG_SHIFT)\n\n/* flags for graphs */\n#define CV_GRAPH_FLAG_ORIENTED (1 << CV_SEQ_FLAG_SHIFT)\n\n#define CV_GRAPH               CV_SEQ_KIND_GRAPH\n#define CV_ORIENTED_GRAPH      (CV_SEQ_KIND_GRAPH|CV_GRAPH_FLAG_ORIENTED)\n\n/* point sets */\n#define CV_SEQ_POINT_SET       (CV_SEQ_KIND_GENERIC| CV_SEQ_ELTYPE_POINT)\n#define CV_SEQ_POINT3D_SET     (CV_SEQ_KIND_GENERIC| CV_SEQ_ELTYPE_POINT3D)\n#define CV_SEQ_POLYLINE        (CV_SEQ_KIND_CURVE  | CV_SEQ_ELTYPE_POINT)\n#define CV_SEQ_POLYGON         (CV_SEQ_FLAG_CLOSED | CV_SEQ_POLYLINE )\n#define CV_SEQ_CONTOUR         CV_SEQ_POLYGON\n#define CV_SEQ_SIMPLE_POLYGON  (CV_SEQ_FLAG_SIMPLE | CV_SEQ_POLYGON  )\n\n/* chain-coded curves */\n#define CV_SEQ_CHAIN           (CV_SEQ_KIND_CURVE  | CV_SEQ_ELTYPE_CODE)\n#define CV_SEQ_CHAIN_CONTOUR   (CV_SEQ_FLAG_CLOSED | CV_SEQ_CHAIN)\n\n/* binary tree for the contour */\n#define CV_SEQ_POLYGON_TREE    (CV_SEQ_KIND_BIN_TREE  | CV_SEQ_ELTYPE_TRIAN_ATR)\n\n/* sequence of the connected components */\n#define CV_SEQ_CONNECTED_COMP  (CV_SEQ_KIND_GENERIC  | CV_SEQ_ELTYPE_CONNECTED_COMP)\n\n/* sequence of the integer numbers */\n#define CV_SEQ_INDEX           (CV_SEQ_KIND_GENERIC  | CV_SEQ_ELTYPE_INDEX)\n\n#define CV_SEQ_ELTYPE( seq )   ((seq)->flags & CV_SEQ_ELTYPE_MASK)\n#define CV_SEQ_KIND( seq )     ((seq)->flags & CV_SEQ_KIND_MASK )\n\n/* flag checking */\n#define CV_IS_SEQ_INDEX( seq )      ((CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_INDEX) && \\\n                                     (CV_SEQ_KIND(seq) == CV_SEQ_KIND_GENERIC))\n\n#define CV_IS_SEQ_CURVE( seq )      (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE)\n#define CV_IS_SEQ_CLOSED( seq )     (((seq)->flags & CV_SEQ_FLAG_CLOSED) != 0)\n#define CV_IS_SEQ_CONVEX( seq )     0\n#define CV_IS_SEQ_HOLE( seq )       (((seq)->flags & CV_SEQ_FLAG_HOLE) != 0)\n#define CV_IS_SEQ_SIMPLE( seq )     1\n\n/* type checking macros */\n#define CV_IS_SEQ_POINT_SET( seq ) \\\n    ((CV_SEQ_ELTYPE(seq) == CV_32SC2 || CV_SEQ_ELTYPE(seq) == CV_32FC2))\n\n#define CV_IS_SEQ_POINT_SUBSET( seq ) \\\n    (CV_IS_SEQ_INDEX( seq ) || CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_PPOINT)\n\n#define CV_IS_SEQ_POLYLINE( seq )   \\\n    (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && CV_IS_SEQ_POINT_SET(seq))\n\n#define CV_IS_SEQ_POLYGON( seq )   \\\n    (CV_IS_SEQ_POLYLINE(seq) && CV_IS_SEQ_CLOSED(seq))\n\n#define CV_IS_SEQ_CHAIN( seq )   \\\n    (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && (seq)->elem_size == 1)\n\n#define CV_IS_SEQ_CONTOUR( seq )   \\\n    (CV_IS_SEQ_CLOSED(seq) && (CV_IS_SEQ_POLYLINE(seq) || CV_IS_SEQ_CHAIN(seq)))\n\n#define CV_IS_SEQ_CHAIN_CONTOUR( seq ) \\\n    (CV_IS_SEQ_CHAIN( seq ) && CV_IS_SEQ_CLOSED( seq ))\n\n#define CV_IS_SEQ_POLYGON_TREE( seq ) \\\n    (CV_SEQ_ELTYPE (seq) ==  CV_SEQ_ELTYPE_TRIAN_ATR &&    \\\n    CV_SEQ_KIND( seq ) ==  CV_SEQ_KIND_BIN_TREE )\n\n#define CV_IS_GRAPH( seq )    \\\n    (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_GRAPH)\n\n#define CV_IS_GRAPH_ORIENTED( seq )   \\\n    (((seq)->flags & CV_GRAPH_FLAG_ORIENTED) != 0)\n\n#define CV_IS_SUBDIV2D( seq )  \\\n    (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_SUBDIV2D)\n\n/****************************************************************************************/\n/*                            Sequence writer & reader                                  */\n/****************************************************************************************/\n\n#define CV_SEQ_WRITER_FIELDS()                                     \\\n    int          header_size;                                      \\\n    CvSeq*       seq;        /* the sequence written */            \\\n    CvSeqBlock*  block;      /* current block */                   \\\n    schar*       ptr;        /* pointer to free space */           \\\n    schar*       block_min;  /* pointer to the beginning of block*/\\\n    schar*       block_max;  /* pointer to the end of block */\n\ntypedef struct CvSeqWriter\n{\n    CV_SEQ_WRITER_FIELDS()\n}\nCvSeqWriter;\n\n\n#define CV_SEQ_READER_FIELDS()                                      \\\n    int          header_size;                                       \\\n    CvSeq*       seq;        /* sequence, beign read */             \\\n    CvSeqBlock*  block;      /* current block */                    \\\n    schar*       ptr;        /* pointer to element be read next */  \\\n    schar*       block_min;  /* pointer to the beginning of block */\\\n    schar*       block_max;  /* pointer to the end of block */      \\\n    int          delta_index;/* = seq->first->start_index   */      \\\n    schar*       prev_elem;  /* pointer to previous element */\n\n\ntypedef struct CvSeqReader\n{\n    CV_SEQ_READER_FIELDS()\n}\nCvSeqReader;\n\n/****************************************************************************************/\n/*                                Operations on sequences                               */\n/****************************************************************************************/\n\n#define  CV_SEQ_ELEM( seq, elem_type, index )                    \\\n/* assert gives some guarantee that <seq> parameter is valid */  \\\n(   assert(sizeof((seq)->first[0]) == sizeof(CvSeqBlock) &&      \\\n    (seq)->elem_size == sizeof(elem_type)),                      \\\n    (elem_type*)((seq)->first && (unsigned)index <               \\\n    (unsigned)((seq)->first->count) ?                            \\\n    (seq)->first->data + (index) * sizeof(elem_type) :           \\\n    cvGetSeqElem( (CvSeq*)(seq), (index) )))\n#define CV_GET_SEQ_ELEM( elem_type, seq, index ) CV_SEQ_ELEM( (seq), elem_type, (index) )\n\n/* Add element to sequence: */\n#define CV_WRITE_SEQ_ELEM_VAR( elem_ptr, writer )     \\\n{                                                     \\\n    if( (writer).ptr >= (writer).block_max )          \\\n    {                                                 \\\n        cvCreateSeqBlock( &writer);                   \\\n    }                                                 \\\n    memcpy((writer).ptr, elem_ptr, (writer).seq->elem_size);\\\n    (writer).ptr += (writer).seq->elem_size;          \\\n}\n\n#define CV_WRITE_SEQ_ELEM( elem, writer )             \\\n{                                                     \\\n    assert( (writer).seq->elem_size == sizeof(elem)); \\\n    if( (writer).ptr >= (writer).block_max )          \\\n    {                                                 \\\n        cvCreateSeqBlock( &writer);                   \\\n    }                                                 \\\n    assert( (writer).ptr <= (writer).block_max - sizeof(elem));\\\n    memcpy((writer).ptr, &(elem), sizeof(elem));      \\\n    (writer).ptr += sizeof(elem);                     \\\n}\n\n\n/* Move reader position forward: */\n#define CV_NEXT_SEQ_ELEM( elem_size, reader )                 \\\n{                                                             \\\n    if( ((reader).ptr += (elem_size)) >= (reader).block_max ) \\\n    {                                                         \\\n        cvChangeSeqBlock( &(reader), 1 );                     \\\n    }                                                         \\\n}\n\n\n/* Move reader position backward: */\n#define CV_PREV_SEQ_ELEM( elem_size, reader )                \\\n{                                                            \\\n    if( ((reader).ptr -= (elem_size)) < (reader).block_min ) \\\n    {                                                        \\\n        cvChangeSeqBlock( &(reader), -1 );                   \\\n    }                                                        \\\n}\n\n/* Read element and move read position forward: */\n#define CV_READ_SEQ_ELEM( elem, reader )                       \\\n{                                                              \\\n    assert( (reader).seq->elem_size == sizeof(elem));          \\\n    memcpy( &(elem), (reader).ptr, sizeof((elem)));            \\\n    CV_NEXT_SEQ_ELEM( sizeof(elem), reader )                   \\\n}\n\n/* Read element and move read position backward: */\n#define CV_REV_READ_SEQ_ELEM( elem, reader )                     \\\n{                                                                \\\n    assert( (reader).seq->elem_size == sizeof(elem));            \\\n    memcpy(&(elem), (reader).ptr, sizeof((elem)));               \\\n    CV_PREV_SEQ_ELEM( sizeof(elem), reader )                     \\\n}\n\n\n#define CV_READ_CHAIN_POINT( _pt, reader )                              \\\n{                                                                       \\\n    (_pt) = (reader).pt;                                                \\\n    if( (reader).ptr )                                                  \\\n    {                                                                   \\\n        CV_READ_SEQ_ELEM( (reader).code, (reader));                     \\\n        assert( ((reader).code & ~7) == 0 );                            \\\n        (reader).pt.x += (reader).deltas[(int)(reader).code][0];        \\\n        (reader).pt.y += (reader).deltas[(int)(reader).code][1];        \\\n    }                                                                   \\\n}\n\n#define CV_CURRENT_POINT( reader )  (*((CvPoint*)((reader).ptr)))\n#define CV_PREV_POINT( reader )     (*((CvPoint*)((reader).prev_elem)))\n\n#define CV_READ_EDGE( pt1, pt2, reader )               \\\n{                                                      \\\n    assert( sizeof(pt1) == sizeof(CvPoint) &&          \\\n            sizeof(pt2) == sizeof(CvPoint) &&          \\\n            reader.seq->elem_size == sizeof(CvPoint)); \\\n    (pt1) = CV_PREV_POINT( reader );                   \\\n    (pt2) = CV_CURRENT_POINT( reader );                \\\n    (reader).prev_elem = (reader).ptr;                 \\\n    CV_NEXT_SEQ_ELEM( sizeof(CvPoint), (reader));      \\\n}\n\n/************ Graph macros ************/\n\n/* Return next graph edge for given vertex: */\n#define  CV_NEXT_GRAPH_EDGE( edge, vertex )                              \\\n     (assert((edge)->vtx[0] == (vertex) || (edge)->vtx[1] == (vertex)),  \\\n      (edge)->next[(edge)->vtx[1] == (vertex)])\n\n\n\n/****************************************************************************************\\\n*             Data structures for persistence (a.k.a serialization) functionality        *\n\\****************************************************************************************/\n\n/* \"black box\" file storage */\ntypedef struct CvFileStorage CvFileStorage;\n\n/* Storage flags: */\n#define CV_STORAGE_READ          0\n#define CV_STORAGE_WRITE         1\n#define CV_STORAGE_WRITE_TEXT    CV_STORAGE_WRITE\n#define CV_STORAGE_WRITE_BINARY  CV_STORAGE_WRITE\n#define CV_STORAGE_APPEND        2\n#define CV_STORAGE_MEMORY        4\n#define CV_STORAGE_FORMAT_MASK   (7<<3)\n#define CV_STORAGE_FORMAT_AUTO   0\n#define CV_STORAGE_FORMAT_XML    8\n#define CV_STORAGE_FORMAT_YAML  16\n\n/* List of attributes: */\ntypedef struct CvAttrList\n{\n    const char** attr;         /* NULL-terminated array of (attribute_name,attribute_value) pairs. */\n    struct CvAttrList* next;   /* Pointer to next chunk of the attributes list.                    */\n}\nCvAttrList;\n\nCV_INLINE CvAttrList cvAttrList( const char** attr CV_DEFAULT(NULL),\n                                 CvAttrList* next CV_DEFAULT(NULL) )\n{\n    CvAttrList l;\n    l.attr = attr;\n    l.next = next;\n\n    return l;\n}\n\nstruct CvTypeInfo;\n\n#define CV_NODE_NONE        0\n#define CV_NODE_INT         1\n#define CV_NODE_INTEGER     CV_NODE_INT\n#define CV_NODE_REAL        2\n#define CV_NODE_FLOAT       CV_NODE_REAL\n#define CV_NODE_STR         3\n#define CV_NODE_STRING      CV_NODE_STR\n#define CV_NODE_REF         4 /* not used */\n#define CV_NODE_SEQ         5\n#define CV_NODE_MAP         6\n#define CV_NODE_TYPE_MASK   7\n\n#define CV_NODE_TYPE(flags)  ((flags) & CV_NODE_TYPE_MASK)\n\n/* file node flags */\n#define CV_NODE_FLOW        8 /* Used only for writing structures in YAML format. */\n#define CV_NODE_USER        16\n#define CV_NODE_EMPTY       32\n#define CV_NODE_NAMED       64\n\n#define CV_NODE_IS_INT(flags)        (CV_NODE_TYPE(flags) == CV_NODE_INT)\n#define CV_NODE_IS_REAL(flags)       (CV_NODE_TYPE(flags) == CV_NODE_REAL)\n#define CV_NODE_IS_STRING(flags)     (CV_NODE_TYPE(flags) == CV_NODE_STRING)\n#define CV_NODE_IS_SEQ(flags)        (CV_NODE_TYPE(flags) == CV_NODE_SEQ)\n#define CV_NODE_IS_MAP(flags)        (CV_NODE_TYPE(flags) == CV_NODE_MAP)\n#define CV_NODE_IS_COLLECTION(flags) (CV_NODE_TYPE(flags) >= CV_NODE_SEQ)\n#define CV_NODE_IS_FLOW(flags)       (((flags) & CV_NODE_FLOW) != 0)\n#define CV_NODE_IS_EMPTY(flags)      (((flags) & CV_NODE_EMPTY) != 0)\n#define CV_NODE_IS_USER(flags)       (((flags) & CV_NODE_USER) != 0)\n#define CV_NODE_HAS_NAME(flags)      (((flags) & CV_NODE_NAMED) != 0)\n\n#define CV_NODE_SEQ_SIMPLE 256\n#define CV_NODE_SEQ_IS_SIMPLE(seq) (((seq)->flags & CV_NODE_SEQ_SIMPLE) != 0)\n\ntypedef struct CvString\n{\n    int len;\n    char* ptr;\n}\nCvString;\n\n/* All the keys (names) of elements in the readed file storage\n   are stored in the hash to speed up the lookup operations: */\ntypedef struct CvStringHashNode\n{\n    unsigned hashval;\n    CvString str;\n    struct CvStringHashNode* next;\n}\nCvStringHashNode;\n\ntypedef struct CvGenericHash CvFileNodeHash;\n\n/* Basic element of the file storage - scalar or collection: */\ntypedef struct CvFileNode\n{\n    int tag;\n    struct CvTypeInfo* info; /* type information\n            (only for user-defined object, for others it is 0) */\n    union\n    {\n        double f; /* scalar floating-point number */\n        int i;    /* scalar integer number */\n        CvString str; /* text string */\n        CvSeq* seq; /* sequence (ordered collection of file nodes) */\n        CvFileNodeHash* map; /* map (collection of named file nodes) */\n    } data;\n}\nCvFileNode;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\ntypedef int (CV_CDECL *CvIsInstanceFunc)( const void* struct_ptr );\ntypedef void (CV_CDECL *CvReleaseFunc)( void** struct_dblptr );\ntypedef void* (CV_CDECL *CvReadFunc)( CvFileStorage* storage, CvFileNode* node );\ntypedef void (CV_CDECL *CvWriteFunc)( CvFileStorage* storage, const char* name,\n                                      const void* struct_ptr, CvAttrList attributes );\ntypedef void* (CV_CDECL *CvCloneFunc)( const void* struct_ptr );\n#ifdef __cplusplus\n}\n#endif\n\ntypedef struct CvTypeInfo\n{\n    int flags;\n    int header_size;\n    struct CvTypeInfo* prev;\n    struct CvTypeInfo* next;\n    const char* type_name;\n    CvIsInstanceFunc is_instance;\n    CvReleaseFunc release;\n    CvReadFunc read;\n    CvWriteFunc write;\n    CvCloneFunc clone;\n}\nCvTypeInfo;\n\n\n/**** System data types ******/\n\ntypedef struct CvPluginFuncInfo\n{\n    void** func_addr;\n    void* default_func_addr;\n    const char* func_names;\n    int search_modules;\n    int loaded_from;\n}\nCvPluginFuncInfo;\n\ntypedef struct CvModuleInfo\n{\n    struct CvModuleInfo* next;\n    const char* name;\n    const char* version;\n    CvPluginFuncInfo* func_tab;\n}\nCvModuleInfo;\n\n#endif /*__OPENCV_CORE_TYPES_H__*/\n\n/* End of file. */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/version.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright( C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort(including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n/*\n  definition of the current version of OpenCV\n  Usefull to test in user programs\n*/\n\n#ifndef __OPENCV_VERSION_HPP__\n#define __OPENCV_VERSION_HPP__\n\n#define CV_VERSION_EPOCH    2\n#define CV_VERSION_MAJOR    4\n#define CV_VERSION_MINOR    9\n#define CV_VERSION_REVISION 0\n\n#define CVAUX_STR_EXP(__A)  #__A\n#define CVAUX_STR(__A)      CVAUX_STR_EXP(__A)\n\n#define CVAUX_STRW_EXP(__A)  L#__A\n#define CVAUX_STRW(__A)      CVAUX_STRW_EXP(__A)\n\n#if CV_VERSION_REVISION\n#  define CV_VERSION        CVAUX_STR(CV_VERSION_EPOCH) \".\" CVAUX_STR(CV_VERSION_MAJOR) \".\" CVAUX_STR(CV_VERSION_MINOR) \".\" CVAUX_STR(CV_VERSION_REVISION)\n#else\n#  define CV_VERSION        CVAUX_STR(CV_VERSION_EPOCH) \".\" CVAUX_STR(CV_VERSION_MAJOR) \".\" CVAUX_STR(CV_VERSION_MINOR)\n#endif\n\n/* old  style version constants*/\n#define CV_MAJOR_VERSION    CV_VERSION_EPOCH\n#define CV_MINOR_VERSION    CV_VERSION_MAJOR\n#define CV_SUBMINOR_VERSION CV_VERSION_MINOR\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/core/wimage.hpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to\n//  this license.  If you do not agree to this license, do not download,\n//  install, copy or use the software.\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2008, Google, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//  * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//  * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//  * The name of Intel Corporation or contributors may not be used to endorse\n//     or promote products derived from this software without specific\n//     prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\"\n// and any express or implied warranties, including, but not limited to, the\n// implied warranties of merchantability and fitness for a particular purpose\n// are disclaimed. In no event shall the Intel Corporation or contributors be\n// liable for any direct, indirect, incidental, special, exemplary, or\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n\n\n/////////////////////////////////////////////////////////////////////////////////\n//\n// Image class which provides a thin layer around an IplImage.  The goals\n// of the class design are:\n//    1. All the data has explicit ownership to avoid memory leaks\n//    2. No hidden allocations or copies for performance.\n//    3. Easy access to OpenCV methods (which will access IPP if available)\n//    4. Can easily treat external data as an image\n//    5. Easy to create images which are subsets of other images\n//    6. Fast pixel access which can take advantage of number of channels\n//          if known at compile time.\n//\n// The WImage class is the image class which provides the data accessors.\n// The 'W' comes from the fact that it is also a wrapper around the popular\n// but inconvenient IplImage class. A WImage can be constructed either using a\n// WImageBuffer class which allocates and frees the data,\n// or using a WImageView class which constructs a subimage or a view into\n// external data.  The view class does no memory management.  Each class\n// actually has two versions, one when the number of channels is known at\n// compile time and one when it isn't.  Using the one with the number of\n// channels specified can provide some compile time optimizations by using the\n// fact that the number of channels is a constant.\n//\n// We use the convention (c,r) to refer to column c and row r with (0,0) being\n// the upper left corner.  This is similar to standard Euclidean coordinates\n// with the first coordinate varying in the horizontal direction and the second\n// coordinate varying in the vertical direction.\n// Thus (c,r) is usually in the domain [0, width) X [0, height)\n//\n// Example usage:\n// WImageBuffer3_b  im(5,7);  // Make a 5X7 3 channel image of type uchar\n// WImageView3_b  sub_im(im, 2,2, 3,3); // 3X3 submatrix\n// vector<float> vec(10, 3.0f);\n// WImageView1_f user_im(&vec[0], 2, 5);  // 2X5 image w/ supplied data\n//\n// im.SetZero();  // same as cvSetZero(im.Ipl())\n// *im(2, 3) = 15;  // Modify the element at column 2, row 3\n// MySetRand(&sub_im);\n//\n// // Copy the second row into the first.  This can be done with no memory\n// // allocation and will use SSE if IPP is available.\n// int w = im.Width();\n// im.View(0,0, w,1).CopyFrom(im.View(0,1, w,1));\n//\n// // Doesn't care about source of data since using WImage\n// void MySetRand(WImage_b* im) { // Works with any number of channels\n//   for (int r = 0; r < im->Height(); ++r) {\n//     float* row = im->Row(r);\n//     for (int c = 0; c < im->Width(); ++c) {\n//        for (int ch = 0; ch < im->Channels(); ++ch, ++row) {\n//          *row = uchar(rand() & 255);\n//        }\n//     }\n//   }\n// }\n//\n// Functions that are not part of the basic image allocation, viewing, and\n// access should come from OpenCV, except some useful functions that are not\n// part of OpenCV can be found in wimage_util.h\n#ifndef __OPENCV_CORE_WIMAGE_HPP__\n#define __OPENCV_CORE_WIMAGE_HPP__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\n\nnamespace cv {\n\ntemplate <typename T> class WImage;\ntemplate <typename T> class WImageBuffer;\ntemplate <typename T> class WImageView;\n\ntemplate<typename T, int C> class WImageC;\ntemplate<typename T, int C> class WImageBufferC;\ntemplate<typename T, int C> class WImageViewC;\n\n// Commonly used typedefs.\ntypedef WImage<uchar>            WImage_b;\ntypedef WImageView<uchar>        WImageView_b;\ntypedef WImageBuffer<uchar>      WImageBuffer_b;\n\ntypedef WImageC<uchar, 1>        WImage1_b;\ntypedef WImageViewC<uchar, 1>    WImageView1_b;\ntypedef WImageBufferC<uchar, 1>  WImageBuffer1_b;\n\ntypedef WImageC<uchar, 3>        WImage3_b;\ntypedef WImageViewC<uchar, 3>    WImageView3_b;\ntypedef WImageBufferC<uchar, 3>  WImageBuffer3_b;\n\ntypedef WImage<float>            WImage_f;\ntypedef WImageView<float>        WImageView_f;\ntypedef WImageBuffer<float>      WImageBuffer_f;\n\ntypedef WImageC<float, 1>        WImage1_f;\ntypedef WImageViewC<float, 1>    WImageView1_f;\ntypedef WImageBufferC<float, 1>  WImageBuffer1_f;\n\ntypedef WImageC<float, 3>        WImage3_f;\ntypedef WImageViewC<float, 3>    WImageView3_f;\ntypedef WImageBufferC<float, 3>  WImageBuffer3_f;\n\n// There isn't a standard for signed and unsigned short so be more\n// explicit in the typename for these cases.\ntypedef WImage<short>            WImage_16s;\ntypedef WImageView<short>        WImageView_16s;\ntypedef WImageBuffer<short>      WImageBuffer_16s;\n\ntypedef WImageC<short, 1>        WImage1_16s;\ntypedef WImageViewC<short, 1>    WImageView1_16s;\ntypedef WImageBufferC<short, 1>  WImageBuffer1_16s;\n\ntypedef WImageC<short, 3>        WImage3_16s;\ntypedef WImageViewC<short, 3>    WImageView3_16s;\ntypedef WImageBufferC<short, 3>  WImageBuffer3_16s;\n\ntypedef WImage<ushort>            WImage_16u;\ntypedef WImageView<ushort>        WImageView_16u;\ntypedef WImageBuffer<ushort>      WImageBuffer_16u;\n\ntypedef WImageC<ushort, 1>        WImage1_16u;\ntypedef WImageViewC<ushort, 1>    WImageView1_16u;\ntypedef WImageBufferC<ushort, 1>  WImageBuffer1_16u;\n\ntypedef WImageC<ushort, 3>        WImage3_16u;\ntypedef WImageViewC<ushort, 3>    WImageView3_16u;\ntypedef WImageBufferC<ushort, 3>  WImageBuffer3_16u;\n\n//\n// WImage definitions\n//\n// This WImage class gives access to the data it refers to.  It can be\n// constructed either by allocating the data with a WImageBuffer class or\n// using the WImageView class to refer to a subimage or outside data.\ntemplate<typename T>\nclass WImage\n{\npublic:\n    typedef T BaseType;\n\n    // WImage is an abstract class with no other virtual methods so make the\n    // destructor virtual.\n    virtual ~WImage() = 0;\n\n    // Accessors\n    IplImage* Ipl() {return image_; }\n    const IplImage* Ipl() const {return image_; }\n    T* ImageData() { return reinterpret_cast<T*>(image_->imageData); }\n    const T* ImageData() const {\n        return reinterpret_cast<const T*>(image_->imageData);\n    }\n\n    int Width() const {return image_->width; }\n    int Height() const {return image_->height; }\n\n    // WidthStep is the number of bytes to go to the pixel with the next y coord\n    int WidthStep() const {return image_->widthStep; }\n\n    int Channels() const {return image_->nChannels; }\n    int ChannelSize() const {return sizeof(T); }  // number of bytes per channel\n\n    // Number of bytes per pixel\n    int PixelSize() const {return Channels() * ChannelSize(); }\n\n    // Return depth type (e.g. IPL_DEPTH_8U, IPL_DEPTH_32F) which is the number\n    // of bits per channel and with the signed bit set.\n    // This is known at compile time using specializations.\n    int Depth() const;\n\n    inline const T* Row(int r) const {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep);\n    }\n\n    inline T* Row(int r) {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep);\n    }\n\n    // Pixel accessors which returns a pointer to the start of the channel\n    inline T* operator() (int c, int r)  {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep) +\n            c*Channels();\n    }\n\n    inline const T* operator() (int c, int r) const  {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep) +\n            c*Channels();\n    }\n\n    // Copy the contents from another image which is just a convenience to cvCopy\n    void CopyFrom(const WImage<T>& src) { cvCopy(src.Ipl(), image_); }\n\n    // Set contents to zero which is just a convenient to cvSetZero\n    void SetZero() { cvSetZero(image_); }\n\n    // Construct a view into a region of this image\n    WImageView<T> View(int c, int r, int width, int height);\n\nprotected:\n    // Disallow copy and assignment\n    WImage(const WImage&);\n    void operator=(const WImage&);\n\n    explicit WImage(IplImage* img) : image_(img) {\n        assert(!img || img->depth == Depth());\n    }\n\n    void SetIpl(IplImage* image) {\n        assert(!image || image->depth == Depth());\n        image_ = image;\n    }\n\n    IplImage* image_;\n};\n\n\n\n// Image class when both the pixel type and number of channels\n// are known at compile time.  This wrapper will speed up some of the operations\n// like accessing individual pixels using the () operator.\ntemplate<typename T, int C>\nclass WImageC : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    explicit WImageC(IplImage* img) : WImage<T>(img) {\n        assert(!img || img->nChannels == Channels());\n    }\n\n    // Construct a view into a region of this image\n    WImageViewC<T, C> View(int c, int r, int width, int height);\n\n    // Copy the contents from another image which is just a convenience to cvCopy\n    void CopyFrom(const WImageC<T, C>& src) {\n        cvCopy(src.Ipl(), WImage<T>::image_);\n    }\n\n    // WImageC is an abstract class with no other virtual methods so make the\n    // destructor virtual.\n    virtual ~WImageC() = 0;\n\n    int Channels() const {return C; }\n\nprotected:\n    // Disallow copy and assignment\n    WImageC(const WImageC&);\n    void operator=(const WImageC&);\n\n    void SetIpl(IplImage* image) {\n        assert(!image || image->depth == WImage<T>::Depth());\n        WImage<T>::SetIpl(image);\n    }\n};\n\n//\n// WImageBuffer definitions\n//\n// Image class which owns the data, so it can be allocated and is always\n// freed.  It cannot be copied but can be explicity cloned.\n//\ntemplate<typename T>\nclass WImageBuffer : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n\n    // Default constructor which creates an object that can be\n    WImageBuffer() : WImage<T>(0) {}\n\n    WImageBuffer(int width, int height, int nchannels) : WImage<T>(0) {\n        Allocate(width, height, nchannels);\n    }\n\n    // Constructor which takes ownership of a given IplImage so releases\n    // the image on destruction.\n    explicit WImageBuffer(IplImage* img) : WImage<T>(img) {}\n\n    // Allocate an image.  Does nothing if current size is the same as\n    // the new size.\n    void Allocate(int width, int height, int nchannels);\n\n    // Set the data to point to an image, releasing the old data\n    void SetIpl(IplImage* img) {\n        ReleaseImage();\n        WImage<T>::SetIpl(img);\n    }\n\n    // Clone an image which reallocates the image if of a different dimension.\n    void CloneFrom(const WImage<T>& src) {\n        Allocate(src.Width(), src.Height(), src.Channels());\n        CopyFrom(src);\n    }\n\n    ~WImageBuffer() {\n        ReleaseImage();\n    }\n\n    // Release the image if it isn't null.\n    void ReleaseImage() {\n        if (WImage<T>::image_) {\n            IplImage* image = WImage<T>::image_;\n            cvReleaseImage(&image);\n            WImage<T>::SetIpl(0);\n        }\n    }\n\n    bool IsNull() const {return WImage<T>::image_ == NULL; }\n\nprivate:\n    // Disallow copy and assignment\n    WImageBuffer(const WImageBuffer&);\n    void operator=(const WImageBuffer&);\n};\n\n// Like a WImageBuffer class but when the number of channels is known\n// at compile time.\ntemplate<typename T, int C>\nclass WImageBufferC : public WImageC<T, C>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    // Default constructor which creates an object that can be\n    WImageBufferC() : WImageC<T, C>(0) {}\n\n    WImageBufferC(int width, int height) : WImageC<T, C>(0) {\n        Allocate(width, height);\n    }\n\n    // Constructor which takes ownership of a given IplImage so releases\n    // the image on destruction.\n    explicit WImageBufferC(IplImage* img) : WImageC<T, C>(img) {}\n\n    // Allocate an image.  Does nothing if current size is the same as\n    // the new size.\n    void Allocate(int width, int height);\n\n    // Set the data to point to an image, releasing the old data\n    void SetIpl(IplImage* img) {\n        ReleaseImage();\n        WImageC<T, C>::SetIpl(img);\n    }\n\n    // Clone an image which reallocates the image if of a different dimension.\n    void CloneFrom(const WImageC<T, C>& src) {\n        Allocate(src.Width(), src.Height());\n        CopyFrom(src);\n    }\n\n    ~WImageBufferC() {\n        ReleaseImage();\n    }\n\n    // Release the image if it isn't null.\n    void ReleaseImage() {\n        if (WImage<T>::image_) {\n            IplImage* image = WImage<T>::image_;\n            cvReleaseImage(&image);\n            WImageC<T, C>::SetIpl(0);\n        }\n    }\n\n    bool IsNull() const {return WImage<T>::image_ == NULL; }\n\nprivate:\n    // Disallow copy and assignment\n    WImageBufferC(const WImageBufferC&);\n    void operator=(const WImageBufferC&);\n};\n\n//\n// WImageView definitions\n//\n// View into an image class which allows treating a subimage as an image\n// or treating external data as an image\n//\ntemplate<typename T>\nclass WImageView : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n\n    // Construct a subimage.  No checks are done that the subimage lies\n    // completely inside the original image.\n    WImageView(WImage<T>* img, int c, int r, int width, int height);\n\n    // Refer to external data.\n    // If not given width_step assumed to be same as width.\n    WImageView(T* data, int width, int height, int channels, int width_step = -1);\n\n    // Refer to external data.  This does NOT take ownership\n    // of the supplied IplImage.\n    WImageView(IplImage* img) : WImage<T>(img) {}\n\n    // Copy constructor\n    WImageView(const WImage<T>& img) : WImage<T>(0) {\n        header_ = *(img.Ipl());\n        WImage<T>::SetIpl(&header_);\n    }\n\n    WImageView& operator=(const WImage<T>& img) {\n        header_ = *(img.Ipl());\n        WImage<T>::SetIpl(&header_);\n        return *this;\n    }\n\nprotected:\n    IplImage header_;\n};\n\n\ntemplate<typename T, int C>\nclass WImageViewC : public WImageC<T, C>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    // Default constructor needed for vectors of views.\n    WImageViewC();\n\n    virtual ~WImageViewC() {}\n\n    // Construct a subimage.  No checks are done that the subimage lies\n    // completely inside the original image.\n    WImageViewC(WImageC<T, C>* img,\n        int c, int r, int width, int height);\n\n    // Refer to external data\n    WImageViewC(T* data, int width, int height, int width_step = -1);\n\n    // Refer to external data.  This does NOT take ownership\n    // of the supplied IplImage.\n    WImageViewC(IplImage* img) : WImageC<T, C>(img) {}\n\n    // Copy constructor which does a shallow copy to allow multiple views\n    // of same data.  gcc-4.1.1 gets confused if both versions of\n    // the constructor and assignment operator are not provided.\n    WImageViewC(const WImageC<T, C>& img) : WImageC<T, C>(0) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n    }\n    WImageViewC(const WImageViewC<T, C>& img) : WImageC<T, C>(0) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n    }\n\n    WImageViewC& operator=(const WImageC<T, C>& img) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n        return *this;\n    }\n    WImageViewC& operator=(const WImageViewC<T, C>& img) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n        return *this;\n    }\n\nprotected:\n    IplImage header_;\n};\n\n\n// Specializations for depth\ntemplate<>\ninline int WImage<uchar>::Depth() const {return IPL_DEPTH_8U; }\ntemplate<>\ninline int WImage<signed char>::Depth() const {return IPL_DEPTH_8S; }\ntemplate<>\ninline int WImage<short>::Depth() const {return IPL_DEPTH_16S; }\ntemplate<>\ninline int WImage<ushort>::Depth() const {return IPL_DEPTH_16U; }\ntemplate<>\ninline int WImage<int>::Depth() const {return IPL_DEPTH_32S; }\ntemplate<>\ninline int WImage<float>::Depth() const {return IPL_DEPTH_32F; }\ntemplate<>\ninline int WImage<double>::Depth() const {return IPL_DEPTH_64F; }\n\n//\n// Pure virtual destructors still need to be defined.\n//\ntemplate<typename T> inline WImage<T>::~WImage() {}\ntemplate<typename T, int C> inline WImageC<T, C>::~WImageC() {}\n\n//\n// Allocate ImageData\n//\ntemplate<typename T>\ninline void WImageBuffer<T>::Allocate(int width, int height, int nchannels)\n{\n    if (IsNull() || WImage<T>::Width() != width ||\n        WImage<T>::Height() != height || WImage<T>::Channels() != nchannels) {\n        ReleaseImage();\n        WImage<T>::image_ = cvCreateImage(cvSize(width, height),\n            WImage<T>::Depth(), nchannels);\n    }\n}\n\ntemplate<typename T, int C>\ninline void WImageBufferC<T, C>::Allocate(int width, int height)\n{\n    if (IsNull() || WImage<T>::Width() != width || WImage<T>::Height() != height) {\n        ReleaseImage();\n        WImageC<T, C>::SetIpl(cvCreateImage(cvSize(width, height),WImage<T>::Depth(), C));\n    }\n}\n\n//\n// ImageView methods\n//\ntemplate<typename T>\nWImageView<T>::WImageView(WImage<T>* img, int c, int r, int width, int height)\n        : WImage<T>(0)\n{\n    header_ = *(img->Ipl());\n    header_.imageData = reinterpret_cast<char*>((*img)(c, r));\n    header_.width = width;\n    header_.height = height;\n    WImage<T>::SetIpl(&header_);\n}\n\ntemplate<typename T>\nWImageView<T>::WImageView(T* data, int width, int height, int nchannels, int width_step)\n          : WImage<T>(0)\n{\n    cvInitImageHeader(&header_, cvSize(width, height), WImage<T>::Depth(), nchannels);\n    header_.imageData = reinterpret_cast<char*>(data);\n    if (width_step > 0) {\n        header_.widthStep = width_step;\n    }\n    WImage<T>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC(WImageC<T, C>* img, int c, int r, int width, int height)\n        : WImageC<T, C>(0)\n{\n    header_ = *(img->Ipl());\n    header_.imageData = reinterpret_cast<char*>((*img)(c, r));\n    header_.width = width;\n    header_.height = height;\n    WImageC<T, C>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC() : WImageC<T, C>(0) {\n    cvInitImageHeader(&header_, cvSize(0, 0), WImage<T>::Depth(), C);\n    header_.imageData = reinterpret_cast<char*>(0);\n    WImageC<T, C>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC(T* data, int width, int height, int width_step)\n    : WImageC<T, C>(0)\n{\n    cvInitImageHeader(&header_, cvSize(width, height), WImage<T>::Depth(), C);\n    header_.imageData = reinterpret_cast<char*>(data);\n    if (width_step > 0) {\n        header_.widthStep = width_step;\n    }\n    WImageC<T, C>::SetIpl(&header_);\n}\n\n// Construct a view into a region of an image\ntemplate<typename T>\nWImageView<T> WImage<T>::View(int c, int r, int width, int height) {\n    return WImageView<T>(this, c, r, width, height);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C> WImageC<T, C>::View(int c, int r, int width, int height) {\n    return WImageViewC<T, C>(this, c, r, width, height);\n}\n\n}  // end of namespace\n\n#endif // __cplusplus\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/features2d/features2d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_FEATURES_2D_HPP__\n#define __OPENCV_FEATURES_2D_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/flann/miniflann.hpp\"\n\n#ifdef __cplusplus\n#include <limits>\n\nnamespace cv\n{\n\nCV_EXPORTS bool initModule_features2d();\n\n/*!\n The Keypoint Class\n\n The class instance stores a keypoint, i.e. a point feature found by one of many available keypoint detectors, such as\n Harris corner detector, cv::FAST, cv::StarDetector, cv::SURF, cv::SIFT, cv::LDetector etc.\n\n The keypoint is characterized by the 2D position, scale\n (proportional to the diameter of the neighborhood that needs to be taken into account),\n orientation and some other parameters. The keypoint neighborhood is then analyzed by another algorithm that builds a descriptor\n (usually represented as a feature vector). The keypoints representing the same object in different images can then be matched using\n cv::KDTree or another method.\n*/\nclass CV_EXPORTS_W_SIMPLE KeyPoint\n{\npublic:\n    //! the default constructor\n    CV_WRAP KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {}\n    //! the full constructor\n    KeyPoint(Point2f _pt, float _size, float _angle=-1,\n            float _response=0, int _octave=0, int _class_id=-1)\n            : pt(_pt), size(_size), angle(_angle),\n            response(_response), octave(_octave), class_id(_class_id) {}\n    //! another form of the full constructor\n    CV_WRAP KeyPoint(float x, float y, float _size, float _angle=-1,\n            float _response=0, int _octave=0, int _class_id=-1)\n            : pt(x, y), size(_size), angle(_angle),\n            response(_response), octave(_octave), class_id(_class_id) {}\n\n    size_t hash() const;\n\n    //! converts vector of keypoints to vector of points\n    static void convert(const vector<KeyPoint>& keypoints,\n                        CV_OUT vector<Point2f>& points2f,\n                        const vector<int>& keypointIndexes=vector<int>());\n    //! converts vector of points to the vector of keypoints, where each keypoint is assigned the same size and the same orientation\n    static void convert(const vector<Point2f>& points2f,\n                        CV_OUT vector<KeyPoint>& keypoints,\n                        float size=1, float response=1, int octave=0, int class_id=-1);\n\n    //! computes overlap for pair of keypoints;\n    //! overlap is a ratio between area of keypoint regions intersection and\n    //! area of keypoint regions union (now keypoint region is circle)\n    static float overlap(const KeyPoint& kp1, const KeyPoint& kp2);\n\n    CV_PROP_RW Point2f pt; //!< coordinates of the keypoints\n    CV_PROP_RW float size; //!< diameter of the meaningful keypoint neighborhood\n    CV_PROP_RW float angle; //!< computed orientation of the keypoint (-1 if not applicable);\n                            //!< it's in [0,360) degrees and measured relative to\n                            //!< image coordinate system, ie in clockwise.\n    CV_PROP_RW float response; //!< the response by which the most strong keypoints have been selected. Can be used for the further sorting or subsampling\n    CV_PROP_RW int octave; //!< octave (pyramid layer) from which the keypoint has been extracted\n    CV_PROP_RW int class_id; //!< object class (if the keypoints need to be clustered by an object they belong to)\n};\n\n//! writes vector of keypoints to the file storage\nCV_EXPORTS void write(FileStorage& fs, const string& name, const vector<KeyPoint>& keypoints);\n//! reads vector of keypoints from the specified file storage node\nCV_EXPORTS void read(const FileNode& node, CV_OUT vector<KeyPoint>& keypoints);\n\n/*\n * A class filters a vector of keypoints.\n * Because now it is difficult to provide a convenient interface for all usage scenarios of the keypoints filter class,\n * it has only several needed by now static methods.\n */\nclass CV_EXPORTS KeyPointsFilter\n{\npublic:\n    KeyPointsFilter(){}\n\n    /*\n     * Remove keypoints within borderPixels of an image edge.\n     */\n    static void runByImageBorder( vector<KeyPoint>& keypoints, Size imageSize, int borderSize );\n    /*\n     * Remove keypoints of sizes out of range.\n     */\n    static void runByKeypointSize( vector<KeyPoint>& keypoints, float minSize,\n                                   float maxSize=FLT_MAX );\n    /*\n     * Remove keypoints from some image by mask for pixels of this image.\n     */\n    static void runByPixelsMask( vector<KeyPoint>& keypoints, const Mat& mask );\n    /*\n     * Remove duplicated keypoints.\n     */\n    static void removeDuplicated( vector<KeyPoint>& keypoints );\n\n    /*\n     * Retain the specified number of the best keypoints (according to the response)\n     */\n    static void retainBest( vector<KeyPoint>& keypoints, int npoints );\n};\n\n\n/************************************ Base Classes ************************************/\n\n/*\n * Abstract base class for 2D image feature detectors.\n */\nclass CV_EXPORTS_W FeatureDetector : public virtual Algorithm\n{\npublic:\n    virtual ~FeatureDetector();\n\n    /*\n     * Detect keypoints in an image.\n     * image        The image.\n     * keypoints    The detected keypoints.\n     * mask         Mask specifying where to look for keypoints (optional). Must be a char\n     *              matrix with non-zero values in the region of interest.\n     */\n    CV_WRAP void detect( const Mat& image, CV_OUT vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    /*\n     * Detect keypoints in an image set.\n     * images       Image collection.\n     * keypoints    Collection of keypoints detected in an input images. keypoints[i] is a set of keypoints detected in an images[i].\n     * masks        Masks for image set. masks[i] is a mask for images[i].\n     */\n    void detect( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints, const vector<Mat>& masks=vector<Mat>() ) const;\n\n    // Return true if detector object is empty\n    CV_WRAP virtual bool empty() const;\n\n    // Create feature detector by detector name.\n    CV_WRAP static Ptr<FeatureDetector> create( const string& detectorType );\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const = 0;\n\n    /*\n     * Remove keypoints that are not in the mask.\n     * Helper function, useful when wrapping a library call for keypoint detection that\n     * does not support a mask argument.\n     */\n    static void removeInvalidPoints( const Mat& mask, vector<KeyPoint>& keypoints );\n};\n\n\n/*\n * Abstract base class for computing descriptors for image keypoints.\n *\n * In this interface we assume a keypoint descriptor can be represented as a\n * dense, fixed-dimensional vector of some basic type. Most descriptors used\n * in practice follow this pattern, as it makes it very easy to compute\n * distances between descriptors. Therefore we represent a collection of\n * descriptors as a Mat, where each row is one keypoint descriptor.\n */\nclass CV_EXPORTS_W DescriptorExtractor : public virtual Algorithm\n{\npublic:\n    virtual ~DescriptorExtractor();\n\n    /*\n     * Compute the descriptors for a set of keypoints in an image.\n     * image        The image.\n     * keypoints    The input keypoints. Keypoints for which a descriptor cannot be computed are removed.\n     * descriptors  Copmputed descriptors. Row i is the descriptor for keypoint i.\n     */\n    CV_WRAP void compute( const Mat& image, CV_OUT CV_IN_OUT vector<KeyPoint>& keypoints, CV_OUT Mat& descriptors ) const;\n\n    /*\n     * Compute the descriptors for a keypoints collection detected in image collection.\n     * images       Image collection.\n     * keypoints    Input keypoints collection. keypoints[i] is keypoints detected in images[i].\n     *              Keypoints for which a descriptor cannot be computed are removed.\n     * descriptors  Descriptor collection. descriptors[i] are descriptors computed for set keypoints[i].\n     */\n    void compute( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints, vector<Mat>& descriptors ) const;\n\n    CV_WRAP virtual int descriptorSize() const = 0;\n    CV_WRAP virtual int descriptorType() const = 0;\n\n    CV_WRAP virtual bool empty() const;\n\n    CV_WRAP static Ptr<DescriptorExtractor> create( const string& descriptorExtractorType );\n\nprotected:\n    virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const = 0;\n\n    /*\n     * Remove keypoints within borderPixels of an image edge.\n     */\n    static void removeBorderKeypoints( vector<KeyPoint>& keypoints,\n                                      Size imageSize, int borderSize );\n};\n\n\n\n/*\n * Abstract base class for simultaneous 2D feature detection descriptor extraction.\n */\nclass CV_EXPORTS_W Feature2D : public FeatureDetector, public DescriptorExtractor\n{\npublic:\n    /*\n     * Detect keypoints in an image.\n     * image        The image.\n     * keypoints    The detected keypoints.\n     * mask         Mask specifying where to look for keypoints (optional). Must be a char\n     *              matrix with non-zero values in the region of interest.\n     * useProvidedKeypoints If true, the method will skip the detection phase and will compute\n     *                      descriptors for the provided keypoints\n     */\n    CV_WRAP_AS(detectAndCompute) virtual void operator()( InputArray image, InputArray mask,\n                                     CV_OUT vector<KeyPoint>& keypoints,\n                                     OutputArray descriptors,\n                                     bool useProvidedKeypoints=false ) const = 0;\n\n    CV_WRAP void compute( const Mat& image, CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints, CV_OUT Mat& descriptors ) const;\n\n    // Create feature detector and descriptor extractor by name.\n    CV_WRAP static Ptr<Feature2D> create( const string& name );\n};\n\n/*!\n  BRISK implementation\n*/\nclass CV_EXPORTS_W BRISK : public Feature2D\n{\npublic:\n    CV_WRAP explicit BRISK(int thresh=30, int octaves=3, float patternScale=1.0f);\n\n    virtual ~BRISK();\n\n    // returns the descriptor size in bytes\n    int descriptorSize() const;\n    // returns the descriptor type\n    int descriptorType() const;\n\n    // Compute the BRISK features on an image\n    void operator()(InputArray image, InputArray mask, vector<KeyPoint>& keypoints) const;\n\n    // Compute the BRISK features and descriptors on an image\n    void operator()( InputArray image, InputArray mask, vector<KeyPoint>& keypoints,\n                      OutputArray descriptors, bool useProvidedKeypoints=false ) const;\n\n    AlgorithmInfo* info() const;\n\n    // custom setup\n    CV_WRAP explicit BRISK(std::vector<float> &radiusList, std::vector<int> &numberList,\n        float dMax=5.85f, float dMin=8.2f, std::vector<int> indexChange=std::vector<int>());\n\n    // call this to generate the kernel:\n    // circle of radius r (pixels), with n points;\n    // short pairings with dMax, long pairings with dMin\n    CV_WRAP void generateKernel(std::vector<float> &radiusList,\n        std::vector<int> &numberList, float dMax=5.85f, float dMin=8.2f,\n        std::vector<int> indexChange=std::vector<int>());\n\nprotected:\n\n    void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    void computeKeypointsNoOrientation(InputArray image, InputArray mask, vector<KeyPoint>& keypoints) const;\n    void computeDescriptorsAndOrOrientation(InputArray image, InputArray mask, vector<KeyPoint>& keypoints,\n                                       OutputArray descriptors, bool doDescriptors, bool doOrientation,\n                                       bool useProvidedKeypoints) const;\n\n    // Feature parameters\n    CV_PROP_RW int threshold;\n    CV_PROP_RW int octaves;\n\n    // some helper structures for the Brisk pattern representation\n    struct BriskPatternPoint{\n        float x;         // x coordinate relative to center\n        float y;         // x coordinate relative to center\n        float sigma;     // Gaussian smoothing sigma\n    };\n    struct BriskShortPair{\n        unsigned int i;  // index of the first pattern point\n        unsigned int j;  // index of other pattern point\n    };\n    struct BriskLongPair{\n        unsigned int i;  // index of the first pattern point\n        unsigned int j;  // index of other pattern point\n        int weighted_dx; // 1024.0/dx\n        int weighted_dy; // 1024.0/dy\n    };\n    inline int smoothedIntensity(const cv::Mat& image,\n                const cv::Mat& integral,const float key_x,\n                const float key_y, const unsigned int scale,\n                const unsigned int rot, const unsigned int point) const;\n    // pattern properties\n    BriskPatternPoint* patternPoints_;     //[i][rotation][scale]\n    unsigned int points_;                 // total number of collocation points\n    float* scaleList_;                     // lists the scaling per scale index [scale]\n    unsigned int* sizeList_;             // lists the total pattern size per scale index [scale]\n    static const unsigned int scales_;    // scales discretization\n    static const float scalerange_;     // span of sizes 40->4 Octaves - else, this needs to be adjusted...\n    static const unsigned int n_rot_;    // discretization of the rotation look-up\n\n    // pairs\n    int strings_;                        // number of uchars the descriptor consists of\n    float dMax_;                         // short pair maximum distance\n    float dMin_;                         // long pair maximum distance\n    BriskShortPair* shortPairs_;         // d<_dMax\n    BriskLongPair* longPairs_;             // d>_dMin\n    unsigned int noShortPairs_;         // number of shortParis\n    unsigned int noLongPairs_;             // number of longParis\n\n    // general\n    static const float basicSize_;\n};\n\n\n/*!\n ORB implementation.\n*/\nclass CV_EXPORTS_W ORB : public Feature2D\n{\npublic:\n    // the size of the signature in bytes\n    enum { kBytes = 32, HARRIS_SCORE=0, FAST_SCORE=1 };\n\n    CV_WRAP explicit ORB(int nfeatures = 500, float scaleFactor = 1.2f, int nlevels = 8, int edgeThreshold = 31,\n        int firstLevel = 0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31 );\n\n    // returns the descriptor size in bytes\n    int descriptorSize() const;\n    // returns the descriptor type\n    int descriptorType() const;\n\n    // Compute the ORB features and descriptors on an image\n    void operator()(InputArray image, InputArray mask, vector<KeyPoint>& keypoints) const;\n\n    // Compute the ORB features and descriptors on an image\n    void operator()( InputArray image, InputArray mask, vector<KeyPoint>& keypoints,\n                     OutputArray descriptors, bool useProvidedKeypoints=false ) const;\n\n    AlgorithmInfo* info() const;\n\nprotected:\n\n    void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    CV_PROP_RW int nfeatures;\n    CV_PROP_RW double scaleFactor;\n    CV_PROP_RW int nlevels;\n    CV_PROP_RW int edgeThreshold;\n    CV_PROP_RW int firstLevel;\n    CV_PROP_RW int WTA_K;\n    CV_PROP_RW int scoreType;\n    CV_PROP_RW int patchSize;\n};\n\ntypedef ORB OrbFeatureDetector;\ntypedef ORB OrbDescriptorExtractor;\n\n/*!\n  FREAK implementation\n*/\nclass CV_EXPORTS FREAK : public DescriptorExtractor\n{\npublic:\n    /** Constructor\n         * @param orientationNormalized enable orientation normalization\n         * @param scaleNormalized enable scale normalization\n         * @param patternScale scaling of the description pattern\n         * @param nOctaves number of octaves covered by the detected keypoints\n         * @param selectedPairs (optional) user defined selected pairs\n    */\n    explicit FREAK( bool orientationNormalized = true,\n           bool scaleNormalized = true,\n           float patternScale = 22.0f,\n           int nOctaves = 4,\n           const vector<int>& selectedPairs = vector<int>());\n    FREAK( const FREAK& rhs );\n    FREAK& operator=( const FREAK& );\n\n    virtual ~FREAK();\n\n    /** returns the descriptor length in bytes */\n    virtual int descriptorSize() const;\n\n    /** returns the descriptor type */\n    virtual int descriptorType() const;\n\n    /** select the 512 \"best description pairs\"\n         * @param images grayscale images set\n         * @param keypoints set of detected keypoints\n         * @param corrThresh correlation threshold\n         * @param verbose print construction information\n         * @return list of best pair indexes\n    */\n    vector<int> selectPairs( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints,\n                      const double corrThresh = 0.7, bool verbose = true );\n\n    AlgorithmInfo* info() const;\n\n    enum\n    {\n        NB_SCALES = 64, NB_PAIRS = 512, NB_ORIENPAIRS = 45\n    };\n\nprotected:\n    virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n    void buildPattern();\n    uchar meanIntensity( const Mat& image, const Mat& integral, const float kp_x, const float kp_y,\n                         const unsigned int scale, const unsigned int rot, const unsigned int point ) const;\n\n    bool orientationNormalized; //true if the orientation is normalized, false otherwise\n    bool scaleNormalized; //true if the scale is normalized, false otherwise\n    double patternScale; //scaling of the pattern\n    int nOctaves; //number of octaves\n    bool extAll; // true if all pairs need to be extracted for pairs selection\n\n    double patternScale0;\n    int nOctaves0;\n    vector<int> selectedPairs0;\n\n    struct PatternPoint\n    {\n        float x; // x coordinate relative to center\n        float y; // x coordinate relative to center\n        float sigma; // Gaussian smoothing sigma\n    };\n\n    struct DescriptionPair\n    {\n        uchar i; // index of the first point\n        uchar j; // index of the second point\n    };\n\n    struct OrientationPair\n    {\n        uchar i; // index of the first point\n        uchar j; // index of the second point\n        int weight_dx; // dx/(norm_sq))*4096\n        int weight_dy; // dy/(norm_sq))*4096\n    };\n\n    vector<PatternPoint> patternLookup; // look-up table for the pattern points (position+sigma of all points at all scales and orientation)\n    int patternSizes[NB_SCALES]; // size of the pattern at a specific scale (used to check if a point is within image boundaries)\n    DescriptionPair descriptionPairs[NB_PAIRS];\n    OrientationPair orientationPairs[NB_ORIENPAIRS];\n};\n\n\n/*!\n Maximal Stable Extremal Regions class.\n\n The class implements MSER algorithm introduced by J. Matas.\n Unlike SIFT, SURF and many other detectors in OpenCV, this is salient region detector,\n not the salient point detector.\n\n It returns the regions, each of those is encoded as a contour.\n*/\nclass CV_EXPORTS_W MSER : public FeatureDetector\n{\npublic:\n    //! the full constructor\n    CV_WRAP explicit MSER( int _delta=5, int _min_area=60, int _max_area=14400,\n          double _max_variation=0.25, double _min_diversity=.2,\n          int _max_evolution=200, double _area_threshold=1.01,\n          double _min_margin=0.003, int _edge_blur_size=5 );\n\n    //! the operator that extracts the MSERs from the image or the specific part of it\n    CV_WRAP_AS(detect) void operator()( const Mat& image, CV_OUT vector<vector<Point> >& msers,\n                                        const Mat& mask=Mat() ) const;\n    AlgorithmInfo* info() const;\n\nprotected:\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int delta;\n    int minArea;\n    int maxArea;\n    double maxVariation;\n    double minDiversity;\n    int maxEvolution;\n    double areaThreshold;\n    double minMargin;\n    int edgeBlurSize;\n};\n\ntypedef MSER MserFeatureDetector;\n\n/*!\n The \"Star\" Detector.\n\n The class implements the keypoint detector introduced by K. Konolige.\n*/\nclass CV_EXPORTS_W StarDetector : public FeatureDetector\n{\npublic:\n    //! the full constructor\n    CV_WRAP StarDetector(int _maxSize=45, int _responseThreshold=30,\n                 int _lineThresholdProjected=10,\n                 int _lineThresholdBinarized=8,\n                 int _suppressNonmaxSize=5);\n\n    //! finds the keypoints in the image\n    CV_WRAP_AS(detect) void operator()(const Mat& image,\n                CV_OUT vector<KeyPoint>& keypoints) const;\n\n    AlgorithmInfo* info() const;\n\nprotected:\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int maxSize;\n    int responseThreshold;\n    int lineThresholdProjected;\n    int lineThresholdBinarized;\n    int suppressNonmaxSize;\n};\n\n//! detects corners using FAST algorithm by E. Rosten\nCV_EXPORTS void FAST( InputArray image, CV_OUT vector<KeyPoint>& keypoints,\n                      int threshold, bool nonmaxSuppression=true );\n\nCV_EXPORTS void FASTX( InputArray image, CV_OUT vector<KeyPoint>& keypoints,\n                      int threshold, bool nonmaxSuppression, int type );\n\nclass CV_EXPORTS_W FastFeatureDetector : public FeatureDetector\n{\npublic:\n\n    enum\n    { // Define it in old class to simplify migration to 2.5\n      TYPE_5_8 = 0, TYPE_7_12 = 1, TYPE_9_16 = 2\n    };\n\n    CV_WRAP FastFeatureDetector( int threshold=10, bool nonmaxSuppression=true );\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int threshold;\n    bool nonmaxSuppression;\n};\n\n\nclass CV_EXPORTS_W GFTTDetector : public FeatureDetector\n{\npublic:\n    CV_WRAP GFTTDetector( int maxCorners=1000, double qualityLevel=0.01, double minDistance=1,\n                          int blockSize=3, bool useHarrisDetector=false, double k=0.04 );\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int nfeatures;\n    double qualityLevel;\n    double minDistance;\n    int blockSize;\n    bool useHarrisDetector;\n    double k;\n};\n\ntypedef GFTTDetector GoodFeaturesToTrackDetector;\ntypedef StarDetector StarFeatureDetector;\n\nclass CV_EXPORTS_W SimpleBlobDetector : public FeatureDetector\n{\npublic:\n  struct CV_EXPORTS_W_SIMPLE Params\n  {\n      CV_WRAP Params();\n      CV_PROP_RW float thresholdStep;\n      CV_PROP_RW float minThreshold;\n      CV_PROP_RW float maxThreshold;\n      CV_PROP_RW size_t minRepeatability;\n      CV_PROP_RW float minDistBetweenBlobs;\n\n      CV_PROP_RW bool filterByColor;\n      CV_PROP_RW uchar blobColor;\n\n      CV_PROP_RW bool filterByArea;\n      CV_PROP_RW float minArea, maxArea;\n\n      CV_PROP_RW bool filterByCircularity;\n      CV_PROP_RW float minCircularity, maxCircularity;\n\n      CV_PROP_RW bool filterByInertia;\n      CV_PROP_RW float minInertiaRatio, maxInertiaRatio;\n\n      CV_PROP_RW bool filterByConvexity;\n      CV_PROP_RW float minConvexity, maxConvexity;\n\n      void read( const FileNode& fn );\n      void write( FileStorage& fs ) const;\n  };\n\n  CV_WRAP SimpleBlobDetector(const SimpleBlobDetector::Params &parameters = SimpleBlobDetector::Params());\n\n  virtual void read( const FileNode& fn );\n  virtual void write( FileStorage& fs ) const;\n\nprotected:\n  struct CV_EXPORTS Center\n  {\n      Point2d location;\n      double radius;\n      double confidence;\n  };\n\n  virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n  virtual void findBlobs(const Mat &image, const Mat &binaryImage, vector<Center> &centers) const;\n\n  Params params;\n  AlgorithmInfo* info() const;\n};\n\n\nclass CV_EXPORTS DenseFeatureDetector : public FeatureDetector\n{\npublic:\n    explicit DenseFeatureDetector( float initFeatureScale=1.f, int featureScaleLevels=1,\n                                   float featureScaleMul=0.1f,\n                                   int initXyStep=6, int initImgBound=0,\n                                   bool varyXyStepWithScale=true,\n                                   bool varyImgBoundWithScale=false );\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    double initFeatureScale;\n    int featureScaleLevels;\n    double featureScaleMul;\n\n    int initXyStep;\n    int initImgBound;\n\n    bool varyXyStepWithScale;\n    bool varyImgBoundWithScale;\n};\n\n/*\n * Adapts a detector to partition the source image into a grid and detect\n * points in each cell.\n */\nclass CV_EXPORTS_W GridAdaptedFeatureDetector : public FeatureDetector\n{\npublic:\n    /*\n     * detector            Detector that will be adapted.\n     * maxTotalKeypoints   Maximum count of keypoints detected on the image. Only the strongest keypoints\n     *                      will be keeped.\n     * gridRows            Grid rows count.\n     * gridCols            Grid column count.\n     */\n    CV_WRAP GridAdaptedFeatureDetector( const Ptr<FeatureDetector>& detector=0,\n                                        int maxTotalKeypoints=1000,\n                                        int gridRows=4, int gridCols=4 );\n\n    // TODO implement read/write\n    virtual bool empty() const;\n\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    Ptr<FeatureDetector> detector;\n    int maxTotalKeypoints;\n    int gridRows;\n    int gridCols;\n};\n\n/*\n * Adapts a detector to detect points over multiple levels of a Gaussian\n * pyramid. Useful for detectors that are not inherently scaled.\n */\nclass CV_EXPORTS_W PyramidAdaptedFeatureDetector : public FeatureDetector\n{\npublic:\n    // maxLevel - The 0-based index of the last pyramid layer\n    CV_WRAP PyramidAdaptedFeatureDetector( const Ptr<FeatureDetector>& detector, int maxLevel=2 );\n\n    // TODO implement read/write\n    virtual bool empty() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    Ptr<FeatureDetector> detector;\n    int maxLevel;\n};\n\n/** \\brief A feature detector parameter adjuster, this is used by the DynamicAdaptedFeatureDetector\n *  and is a wrapper for FeatureDetector that allow them to be adjusted after a detection\n */\nclass CV_EXPORTS AdjusterAdapter: public FeatureDetector\n{\npublic:\n    /** pure virtual interface\n     */\n    virtual ~AdjusterAdapter() {}\n    /** too few features were detected so, adjust the detector params accordingly\n     * \\param min the minimum number of desired features\n     * \\param n_detected the number previously detected\n     */\n    virtual void tooFew(int min, int n_detected) = 0;\n    /** too many features were detected so, adjust the detector params accordingly\n     * \\param max the maximum number of desired features\n     * \\param n_detected the number previously detected\n     */\n    virtual void tooMany(int max, int n_detected) = 0;\n    /** are params maxed out or still valid?\n     * \\return false if the parameters can't be adjusted any more\n     */\n    virtual bool good() const = 0;\n\n    virtual Ptr<AdjusterAdapter> clone() const = 0;\n\n    static Ptr<AdjusterAdapter> create( const string& detectorType );\n};\n/** \\brief an adaptively adjusting detector that iteratively detects until the desired number\n * of features are detected.\n *  Beware that this is not thread safe - as the adjustment of parameters breaks the const\n *  of the detection routine...\n *  /TODO Make this const correct and thread safe\n *\n *  sample usage:\n //will create a detector that attempts to find 100 - 110 FAST Keypoints, and will at most run\n //FAST feature detection 10 times until that number of keypoints are found\n Ptr<FeatureDetector> detector(new DynamicAdaptedFeatureDetector(new FastAdjuster(20,true),100, 110, 10));\n\n */\nclass CV_EXPORTS DynamicAdaptedFeatureDetector: public FeatureDetector\n{\npublic:\n\n    /** \\param adjuster an AdjusterAdapter that will do the detection and parameter adjustment\n     *  \\param max_features the maximum desired number of features\n     *  \\param max_iters the maximum number of times to try to adjust the feature detector params\n     *          for the FastAdjuster this can be high, but with Star or Surf this can get time consuming\n     *  \\param min_features the minimum desired features\n     */\n    DynamicAdaptedFeatureDetector( const Ptr<AdjusterAdapter>& adjuster, int min_features=400, int max_features=500, int max_iters=5 );\n\n    virtual bool empty() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\nprivate:\n    DynamicAdaptedFeatureDetector& operator=(const DynamicAdaptedFeatureDetector&);\n    DynamicAdaptedFeatureDetector(const DynamicAdaptedFeatureDetector&);\n\n    int escape_iters_;\n    int min_features_, max_features_;\n    const Ptr<AdjusterAdapter> adjuster_;\n};\n\n/**\\brief an adjust for the FAST detector. This will basically decrement or increment the\n * threshold by 1\n */\nclass CV_EXPORTS FastAdjuster: public AdjusterAdapter\n{\npublic:\n    /**\\param init_thresh the initial threshold to start with, default = 20\n     * \\param nonmax whether to use non max or not for fast feature detection\n     */\n    FastAdjuster(int init_thresh=20, bool nonmax=true, int min_thresh=1, int max_thresh=200);\n\n    virtual void tooFew(int minv, int n_detected);\n    virtual void tooMany(int maxv, int n_detected);\n    virtual bool good() const;\n\n    virtual Ptr<AdjusterAdapter> clone() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int thresh_;\n    bool nonmax_;\n    int init_thresh_, min_thresh_, max_thresh_;\n};\n\n\n/** An adjuster for StarFeatureDetector, this one adjusts the responseThreshold for now\n * TODO find a faster way to converge the parameters for Star - use CvStarDetectorParams\n */\nclass CV_EXPORTS StarAdjuster: public AdjusterAdapter\n{\npublic:\n    StarAdjuster(double initial_thresh=30.0, double min_thresh=2., double max_thresh=200.);\n\n    virtual void tooFew(int minv, int n_detected);\n    virtual void tooMany(int maxv, int n_detected);\n    virtual bool good() const;\n\n    virtual Ptr<AdjusterAdapter> clone() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    double thresh_, init_thresh_, min_thresh_, max_thresh_;\n};\n\nclass CV_EXPORTS SurfAdjuster: public AdjusterAdapter\n{\npublic:\n    SurfAdjuster( double initial_thresh=400.f, double min_thresh=2, double max_thresh=1000 );\n\n    virtual void tooFew(int minv, int n_detected);\n    virtual void tooMany(int maxv, int n_detected);\n    virtual bool good() const;\n\n    virtual Ptr<AdjusterAdapter> clone() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    double thresh_, init_thresh_, min_thresh_, max_thresh_;\n};\n\nCV_EXPORTS Mat windowedMatchingMask( const vector<KeyPoint>& keypoints1, const vector<KeyPoint>& keypoints2,\n                                     float maxDeltaX, float maxDeltaY );\n\n\n\n/*\n * OpponentColorDescriptorExtractor\n *\n * Adapts a descriptor extractor to compute descripors in Opponent Color Space\n * (refer to van de Sande et al., CGIV 2008 \"Color Descriptors for Object Category Recognition\").\n * Input RGB image is transformed in Opponent Color Space. Then unadapted descriptor extractor\n * (set in constructor) computes descriptors on each of the three channel and concatenate\n * them into a single color descriptor.\n */\nclass CV_EXPORTS OpponentColorDescriptorExtractor : public DescriptorExtractor\n{\npublic:\n    OpponentColorDescriptorExtractor( const Ptr<DescriptorExtractor>& descriptorExtractor );\n\n    virtual void read( const FileNode& );\n    virtual void write( FileStorage& ) const;\n\n    virtual int descriptorSize() const;\n    virtual int descriptorType() const;\n\n    virtual bool empty() const;\n\nprotected:\n    virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n\n    Ptr<DescriptorExtractor> descriptorExtractor;\n};\n\n/*\n * BRIEF Descriptor\n */\nclass CV_EXPORTS BriefDescriptorExtractor : public DescriptorExtractor\n{\npublic:\n    static const int PATCH_SIZE = 48;\n    static const int KERNEL_SIZE = 9;\n\n    // bytes is a length of descriptor in bytes. It can be equal 16, 32 or 64 bytes.\n    BriefDescriptorExtractor( int bytes = 32 );\n\n    virtual void read( const FileNode& );\n    virtual void write( FileStorage& ) const;\n\n    virtual int descriptorSize() const;\n    virtual int descriptorType() const;\n\n    /// @todo read and write for brief\n\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void computeImpl(const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const;\n\n    typedef void(*PixelTestFn)(const Mat&, const vector<KeyPoint>&, Mat&);\n\n    int bytes_;\n    PixelTestFn test_fn_;\n};\n\n\n/****************************************************************************************\\\n*                                      Distance                                          *\n\\****************************************************************************************/\n\ntemplate<typename T>\nstruct CV_EXPORTS Accumulator\n{\n    typedef T Type;\n};\n\ntemplate<> struct Accumulator<unsigned char>  { typedef float Type; };\ntemplate<> struct Accumulator<unsigned short> { typedef float Type; };\ntemplate<> struct Accumulator<char>   { typedef float Type; };\ntemplate<> struct Accumulator<short>  { typedef float Type; };\n\n/*\n * Squared Euclidean distance functor\n */\ntemplate<class T>\nstruct CV_EXPORTS SL2\n{\n    enum { normType = NORM_L2SQR };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return normL2Sqr<ValueType, ResultType>(a, b, size);\n    }\n};\n\n/*\n * Euclidean distance functor\n */\ntemplate<class T>\nstruct CV_EXPORTS L2\n{\n    enum { normType = NORM_L2 };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return (ResultType)sqrt((double)normL2Sqr<ValueType, ResultType>(a, b, size));\n    }\n};\n\n/*\n * Manhattan distance (city block distance) functor\n */\ntemplate<class T>\nstruct CV_EXPORTS L1\n{\n    enum { normType = NORM_L1 };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return normL1<ValueType, ResultType>(a, b, size);\n    }\n};\n\n/*\n * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor\n * bit count of A exclusive XOR'ed with B\n */\nstruct CV_EXPORTS Hamming\n{\n    enum { normType = NORM_HAMMING };\n    typedef unsigned char ValueType;\n    typedef int ResultType;\n\n    /** this will count the bits in a ^ b\n     */\n    ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const\n    {\n        return normHamming(a, b, size);\n    }\n};\n\ntypedef Hamming HammingLUT;\n\ntemplate<int cellsize> struct HammingMultilevel\n{\n    enum { normType = NORM_HAMMING + (cellsize>1) };\n    typedef unsigned char ValueType;\n    typedef int ResultType;\n\n    ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const\n    {\n        return normHamming(a, b, size, cellsize);\n    }\n};\n\n/****************************************************************************************\\\n*                                      DMatch                                            *\n\\****************************************************************************************/\n/*\n * Struct for matching: query descriptor index, train descriptor index, train image index and distance between descriptors.\n */\nstruct CV_EXPORTS_W_SIMPLE DMatch\n{\n    CV_WRAP DMatch() : queryIdx(-1), trainIdx(-1), imgIdx(-1), distance(FLT_MAX) {}\n    CV_WRAP DMatch( int _queryIdx, int _trainIdx, float _distance ) :\n            queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(-1), distance(_distance) {}\n    CV_WRAP DMatch( int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) :\n            queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(_imgIdx), distance(_distance) {}\n\n    CV_PROP_RW int queryIdx; // query descriptor index\n    CV_PROP_RW int trainIdx; // train descriptor index\n    CV_PROP_RW int imgIdx;   // train image index\n\n    CV_PROP_RW float distance;\n\n    // less is better\n    bool operator<( const DMatch &m ) const\n    {\n        return distance < m.distance;\n    }\n};\n\n/****************************************************************************************\\\n*                                  DescriptorMatcher                                     *\n\\****************************************************************************************/\n/*\n * Abstract base class for matching two sets of descriptors.\n */\nclass CV_EXPORTS_W DescriptorMatcher : public Algorithm\n{\npublic:\n    virtual ~DescriptorMatcher();\n\n    /*\n     * Add descriptors to train descriptor collection.\n     * descriptors      Descriptors to add. Each descriptors[i] is a descriptors set from one image.\n     */\n    CV_WRAP virtual void add( const vector<Mat>& descriptors );\n    /*\n     * Get train descriptors collection.\n     */\n    CV_WRAP const vector<Mat>& getTrainDescriptors() const;\n    /*\n     * Clear train descriptors collection.\n     */\n    CV_WRAP virtual void clear();\n\n    /*\n     * Return true if there are not train descriptors in collection.\n     */\n    CV_WRAP virtual bool empty() const;\n    /*\n     * Return true if the matcher supports mask in match methods.\n     */\n    CV_WRAP virtual bool isMaskSupported() const = 0;\n\n    /*\n     * Train matcher (e.g. train flann index).\n     * In all methods to match the method train() is run every time before matching.\n     * Some descriptor matchers (e.g. BruteForceMatcher) have empty implementation\n     * of this method, other matchers really train their inner structures\n     * (e.g. FlannBasedMatcher trains flann::Index). So nonempty implementation\n     * of train() should check the class object state and do traing/retraining\n     * only if the state requires that (e.g. FlannBasedMatcher trains flann::Index\n     * if it has not trained yet or if new descriptors have been added to the train\n     * collection).\n     */\n    CV_WRAP virtual void train();\n    /*\n     * Group of methods to match descriptors from image pair.\n     * Method train() is run in this methods.\n     */\n    // Find one best match for each query descriptor (if mask is empty).\n    CV_WRAP void match( const Mat& queryDescriptors, const Mat& trainDescriptors,\n                CV_OUT vector<DMatch>& matches, const Mat& mask=Mat() ) const;\n    // Find k best matches for each query descriptor (in increasing order of distances).\n    // compactResult is used when mask is not empty. If compactResult is false matches\n    // vector will have the same size as queryDescriptors rows. If compactResult is true\n    // matches vector will not contain matches for fully masked out query descriptors.\n    CV_WRAP void knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors,\n                   CV_OUT vector<vector<DMatch> >& matches, int k,\n                   const Mat& mask=Mat(), bool compactResult=false ) const;\n    // Find best matches for each query descriptor which have distance less than\n    // maxDistance (in increasing order of distances).\n    void radiusMatch( const Mat& queryDescriptors, const Mat& trainDescriptors,\n                      vector<vector<DMatch> >& matches, float maxDistance,\n                      const Mat& mask=Mat(), bool compactResult=false ) const;\n    /*\n     * Group of methods to match descriptors from one image to image set.\n     * See description of similar methods for matching image pair above.\n     */\n    CV_WRAP void match( const Mat& queryDescriptors, CV_OUT vector<DMatch>& matches,\n                const vector<Mat>& masks=vector<Mat>() );\n    CV_WRAP void knnMatch( const Mat& queryDescriptors, CV_OUT vector<vector<DMatch> >& matches, int k,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n    void radiusMatch( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\n                   const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n\n    // Reads matcher object from a file node\n    virtual void read( const FileNode& );\n    // Writes matcher object to a file storage\n    virtual void write( FileStorage& ) const;\n\n    // Clone the matcher. If emptyTrainData is false the method create deep copy of the object, i.e. copies\n    // both parameters and train data. If emptyTrainData is true the method create object copy with current parameters\n    // but with empty train data.\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const = 0;\n\n    CV_WRAP static Ptr<DescriptorMatcher> create( const string& descriptorMatcherType );\nprotected:\n    /*\n     * Class to work with descriptors from several images as with one merged matrix.\n     * It is used e.g. in FlannBasedMatcher.\n     */\n    class CV_EXPORTS DescriptorCollection\n    {\n    public:\n        DescriptorCollection();\n        DescriptorCollection( const DescriptorCollection& collection );\n        virtual ~DescriptorCollection();\n\n        // Vector of matrices \"descriptors\" will be merged to one matrix \"mergedDescriptors\" here.\n        void set( const vector<Mat>& descriptors );\n        virtual void clear();\n\n        const Mat& getDescriptors() const;\n        const Mat getDescriptor( int imgIdx, int localDescIdx ) const;\n        const Mat getDescriptor( int globalDescIdx ) const;\n        void getLocalIdx( int globalDescIdx, int& imgIdx, int& localDescIdx ) const;\n\n        int size() const;\n\n    protected:\n        Mat mergedDescriptors;\n        vector<int> startIdxs;\n    };\n\n    // In fact the matching is implemented only by the following two methods. These methods suppose\n    // that the class object has been trained already. Public match methods call these methods\n    // after calling train().\n    virtual void knnMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, int k,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false ) = 0;\n    virtual void radiusMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false ) = 0;\n\n    static bool isPossibleMatch( const Mat& mask, int queryIdx, int trainIdx );\n    static bool isMaskedOut( const vector<Mat>& masks, int queryIdx );\n\n    static Mat clone_op( Mat m ) { return m.clone(); }\n    void checkMasks( const vector<Mat>& masks, int queryDescriptorsCount ) const;\n\n    // Collection of descriptors from train images.\n    vector<Mat> trainDescCollection;\n};\n\n/*\n * Brute-force descriptor matcher.\n *\n * For each descriptor in the first set, this matcher finds the closest\n * descriptor in the second set by trying each one.\n *\n * For efficiency, BruteForceMatcher is templated on the distance metric.\n * For float descriptors, a common choice would be cv::L2<float>.\n */\nclass CV_EXPORTS_W BFMatcher : public DescriptorMatcher\n{\npublic:\n    CV_WRAP BFMatcher( int normType=NORM_L2, bool crossCheck=false );\n    virtual ~BFMatcher() {}\n\n    virtual bool isMaskSupported() const { return true; }\n\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\n    AlgorithmInfo* info() const;\nprotected:\n    virtual void knnMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, int k,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n    virtual void radiusMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n\n    int normType;\n    bool crossCheck;\n};\n\n\n/*\n * Flann based matcher\n */\nclass CV_EXPORTS_W FlannBasedMatcher : public DescriptorMatcher\n{\npublic:\n    CV_WRAP FlannBasedMatcher( const Ptr<flann::IndexParams>& indexParams=new flann::KDTreeIndexParams(),\n                       const Ptr<flann::SearchParams>& searchParams=new flann::SearchParams() );\n\n    virtual void add( const vector<Mat>& descriptors );\n    virtual void clear();\n\n    // Reads matcher object from a file node\n    virtual void read( const FileNode& );\n    // Writes matcher object to a file storage\n    virtual void write( FileStorage& ) const;\n\n    virtual void train();\n    virtual bool isMaskSupported() const;\n\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\n    AlgorithmInfo* info() const;\nprotected:\n    static void convertToDMatches( const DescriptorCollection& descriptors,\n                                   const Mat& indices, const Mat& distances,\n                                   vector<vector<DMatch> >& matches );\n\n    virtual void knnMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, int k,\n                   const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n    virtual void radiusMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\n                   const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n\n    Ptr<flann::IndexParams> indexParams;\n    Ptr<flann::SearchParams> searchParams;\n    Ptr<flann::Index> flannIndex;\n\n    DescriptorCollection mergedDescriptors;\n    int addedDescCount;\n};\n\n/****************************************************************************************\\\n*                                GenericDescriptorMatcher                                *\n\\****************************************************************************************/\n/*\n *   Abstract interface for a keypoint descriptor and matcher\n */\nclass GenericDescriptorMatcher;\ntypedef GenericDescriptorMatcher GenericDescriptorMatch;\n\nclass CV_EXPORTS GenericDescriptorMatcher\n{\npublic:\n    GenericDescriptorMatcher();\n    virtual ~GenericDescriptorMatcher();\n\n    /*\n     * Add train collection: images and keypoints from them.\n     * images       A set of train images.\n     * ketpoints    Keypoint collection that have been detected on train images.\n     *\n     * Keypoints for which a descriptor cannot be computed are removed. Such keypoints\n     * must be filtered in this method befor adding keypoints to train collection \"trainPointCollection\".\n     * If inheritor class need perform such prefiltering the method add() must be overloaded.\n     * In the other class methods programmer has access to the train keypoints by a constant link.\n     */\n    virtual void add( const vector<Mat>& images,\n                      vector<vector<KeyPoint> >& keypoints );\n\n    const vector<Mat>& getTrainImages() const;\n    const vector<vector<KeyPoint> >& getTrainKeypoints() const;\n\n    /*\n     * Clear images and keypoints storing in train collection.\n     */\n    virtual void clear();\n    /*\n     * Returns true if matcher supports mask to match descriptors.\n     */\n    virtual bool isMaskSupported() = 0;\n    /*\n     * Train some inner structures (e.g. flann index or decision trees).\n     * train() methods is run every time in matching methods. So the method implementation\n     * should has a check whether these inner structures need be trained/retrained or not.\n     */\n    virtual void train();\n\n    /*\n     * Classifies query keypoints.\n     * queryImage    The query image\n     * queryKeypoints   Keypoints from the query image\n     * trainImage    The train image\n     * trainKeypoints   Keypoints from the train image\n     */\n    // Classify keypoints from query image under one train image.\n    void classify( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                           const Mat& trainImage, vector<KeyPoint>& trainKeypoints ) const;\n    // Classify keypoints from query image under train image collection.\n    void classify( const Mat& queryImage, vector<KeyPoint>& queryKeypoints );\n\n    /*\n     * Group of methods to match keypoints from image pair.\n     * Keypoints for which a descriptor cannot be computed are removed.\n     * train() method is called here.\n     */\n    // Find one best match for each query descriptor (if mask is empty).\n    void match( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                const Mat& trainImage, vector<KeyPoint>& trainKeypoints,\n                vector<DMatch>& matches, const Mat& mask=Mat() ) const;\n    // Find k best matches for each query keypoint (in increasing order of distances).\n    // compactResult is used when mask is not empty. If compactResult is false matches\n    // vector will have the same size as queryDescriptors rows.\n    // If compactResult is true matches vector will not contain matches for fully masked out query descriptors.\n    void knnMatch( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                   const Mat& trainImage, vector<KeyPoint>& trainKeypoints,\n                   vector<vector<DMatch> >& matches, int k,\n                   const Mat& mask=Mat(), bool compactResult=false ) const;\n    // Find best matches for each query descriptor which have distance less than maxDistance (in increasing order of distances).\n    void radiusMatch( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                      const Mat& trainImage, vector<KeyPoint>& trainKeypoints,\n                      vector<vector<DMatch> >& matches, float maxDistance,\n                      const Mat& mask=Mat(), bool compactResult=false ) const;\n    /*\n     * Group of methods to match keypoints from one image to image set.\n     * See description of similar methods for matching image pair above.\n     */\n    void match( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                vector<DMatch>& matches, const vector<Mat>& masks=vector<Mat>() );\n    void knnMatch( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                   vector<vector<DMatch> >& matches, int k,\n                   const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n    void radiusMatch( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                      vector<vector<DMatch> >& matches, float maxDistance,\n                      const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n\n    // Reads matcher object from a file node\n    virtual void read( const FileNode& fn );\n    // Writes matcher object to a file storage\n    virtual void write( FileStorage& fs ) const;\n\n    // Return true if matching object is empty (e.g. feature detector or descriptor matcher are empty)\n    virtual bool empty() const;\n\n    // Clone the matcher. If emptyTrainData is false the method create deep copy of the object, i.e. copies\n    // both parameters and train data. If emptyTrainData is true the method create object copy with current parameters\n    // but with empty train data.\n    virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const = 0;\n\n    static Ptr<GenericDescriptorMatcher> create( const string& genericDescritptorMatcherType,\n                                                 const string &paramsFilename=string() );\n\nprotected:\n    // In fact the matching is implemented only by the following two methods. These methods suppose\n    // that the class object has been trained already. Public match methods call these methods\n    // after calling train().\n    virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                               vector<vector<DMatch> >& matches, int k,\n                               const vector<Mat>& masks, bool compactResult ) = 0;\n    virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                                  vector<vector<DMatch> >& matches, float maxDistance,\n                                  const vector<Mat>& masks, bool compactResult ) = 0;\n    /*\n     * A storage for sets of keypoints together with corresponding images and class IDs\n     */\n    class CV_EXPORTS KeyPointCollection\n    {\n    public:\n        KeyPointCollection();\n        KeyPointCollection( const KeyPointCollection& collection );\n        void add( const vector<Mat>& images, const vector<vector<KeyPoint> >& keypoints );\n        void clear();\n\n        // Returns the total number of keypoints in the collection\n        size_t keypointCount() const;\n        size_t imageCount() const;\n\n        const vector<vector<KeyPoint> >& getKeypoints() const;\n        const vector<KeyPoint>& getKeypoints( int imgIdx ) const;\n        const KeyPoint& getKeyPoint( int imgIdx, int localPointIdx ) const;\n        const KeyPoint& getKeyPoint( int globalPointIdx ) const;\n        void getLocalIdx( int globalPointIdx, int& imgIdx, int& localPointIdx ) const;\n\n        const vector<Mat>& getImages() const;\n        const Mat& getImage( int imgIdx ) const;\n\n    protected:\n        int pointCount;\n\n        vector<Mat> images;\n        vector<vector<KeyPoint> > keypoints;\n        // global indices of the first points in each image, startIndices.size() = keypoints.size()\n        vector<int> startIndices;\n\n    private:\n        static Mat clone_op( Mat m ) { return m.clone(); }\n    };\n\n    KeyPointCollection trainPointCollection;\n};\n\n\n/****************************************************************************************\\\n*                                VectorDescriptorMatcher                                 *\n\\****************************************************************************************/\n\n/*\n *  A class used for matching descriptors that can be described as vectors in a finite-dimensional space\n */\nclass VectorDescriptorMatcher;\ntypedef VectorDescriptorMatcher VectorDescriptorMatch;\n\nclass CV_EXPORTS VectorDescriptorMatcher : public GenericDescriptorMatcher\n{\npublic:\n    VectorDescriptorMatcher( const Ptr<DescriptorExtractor>& extractor, const Ptr<DescriptorMatcher>& matcher );\n    virtual ~VectorDescriptorMatcher();\n\n    virtual void add( const vector<Mat>& imgCollection,\n                      vector<vector<KeyPoint> >& pointCollection );\n\n    virtual void clear();\n\n    virtual void train();\n\n    virtual bool isMaskSupported();\n\n    virtual void read( const FileNode& fn );\n    virtual void write( FileStorage& fs ) const;\n    virtual bool empty() const;\n\n    virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\nprotected:\n    virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                               vector<vector<DMatch> >& matches, int k,\n                               const vector<Mat>& masks, bool compactResult );\n    virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                                  vector<vector<DMatch> >& matches, float maxDistance,\n                                  const vector<Mat>& masks, bool compactResult );\n\n    Ptr<DescriptorExtractor> extractor;\n    Ptr<DescriptorMatcher> matcher;\n};\n\n/****************************************************************************************\\\n*                                   Drawing functions                                    *\n\\****************************************************************************************/\nstruct CV_EXPORTS DrawMatchesFlags\n{\n    enum{ DEFAULT = 0, // Output image matrix will be created (Mat::create),\n                       // i.e. existing memory of output image may be reused.\n                       // Two source image, matches and single keypoints will be drawn.\n                       // For each keypoint only the center point will be drawn (without\n                       // the circle around keypoint with keypoint size and orientation).\n          DRAW_OVER_OUTIMG = 1, // Output image matrix will not be created (Mat::create).\n                                // Matches will be drawn on existing content of output image.\n          NOT_DRAW_SINGLE_POINTS = 2, // Single keypoints will not be drawn.\n          DRAW_RICH_KEYPOINTS = 4 // For each keypoint the circle around keypoint with keypoint size and\n                                  // orientation will be drawn.\n        };\n};\n\n// Draw keypoints.\nCV_EXPORTS_W void drawKeypoints( const Mat& image, const vector<KeyPoint>& keypoints, CV_OUT Mat& outImage,\n                               const Scalar& color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT );\n\n// Draws matches of keypints from two images on output image.\nCV_EXPORTS void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoints1,\n                             const Mat& img2, const vector<KeyPoint>& keypoints2,\n                             const vector<DMatch>& matches1to2, Mat& outImg,\n                             const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),\n                             const vector<char>& matchesMask=vector<char>(), int flags=DrawMatchesFlags::DEFAULT );\n\nCV_EXPORTS void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoints1,\n                             const Mat& img2, const vector<KeyPoint>& keypoints2,\n                             const vector<vector<DMatch> >& matches1to2, Mat& outImg,\n                             const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),\n                             const vector<vector<char> >& matchesMask=vector<vector<char> >(), int flags=DrawMatchesFlags::DEFAULT );\n\n/****************************************************************************************\\\n*   Functions to evaluate the feature detectors and [generic] descriptor extractors      *\n\\****************************************************************************************/\n\nCV_EXPORTS void evaluateFeatureDetector( const Mat& img1, const Mat& img2, const Mat& H1to2,\n                                         vector<KeyPoint>* keypoints1, vector<KeyPoint>* keypoints2,\n                                         float& repeatability, int& correspCount,\n                                         const Ptr<FeatureDetector>& fdetector=Ptr<FeatureDetector>() );\n\nCV_EXPORTS void computeRecallPrecisionCurve( const vector<vector<DMatch> >& matches1to2,\n                                             const vector<vector<uchar> >& correctMatches1to2Mask,\n                                             vector<Point2f>& recallPrecisionCurve );\n\nCV_EXPORTS float getRecall( const vector<Point2f>& recallPrecisionCurve, float l_precision );\nCV_EXPORTS int getNearestPoint( const vector<Point2f>& recallPrecisionCurve, float l_precision );\n\nCV_EXPORTS void evaluateGenericDescriptorMatcher( const Mat& img1, const Mat& img2, const Mat& H1to2,\n                                                  vector<KeyPoint>& keypoints1, vector<KeyPoint>& keypoints2,\n                                                  vector<vector<DMatch> >* matches1to2, vector<vector<uchar> >* correctMatches1to2Mask,\n                                                  vector<Point2f>& recallPrecisionCurve,\n                                                  const Ptr<GenericDescriptorMatcher>& dmatch=Ptr<GenericDescriptorMatcher>() );\n\n\n/****************************************************************************************\\\n*                                     Bag of visual words                                *\n\\****************************************************************************************/\n/*\n * Abstract base class for training of a 'bag of visual words' vocabulary from a set of descriptors\n */\nclass CV_EXPORTS BOWTrainer\n{\npublic:\n    BOWTrainer();\n    virtual ~BOWTrainer();\n\n    void add( const Mat& descriptors );\n    const vector<Mat>& getDescriptors() const;\n    int descripotorsCount() const;\n\n    virtual void clear();\n\n    /*\n     * Train visual words vocabulary, that is cluster training descriptors and\n     * compute cluster centers.\n     * Returns cluster centers.\n     *\n     * descriptors      Training descriptors computed on images keypoints.\n     */\n    virtual Mat cluster() const = 0;\n    virtual Mat cluster( const Mat& descriptors ) const = 0;\n\nprotected:\n    vector<Mat> descriptors;\n    int size;\n};\n\n/*\n * This is BOWTrainer using cv::kmeans to get vocabulary.\n */\nclass CV_EXPORTS BOWKMeansTrainer : public BOWTrainer\n{\npublic:\n    BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(),\n                      int attempts=3, int flags=KMEANS_PP_CENTERS );\n    virtual ~BOWKMeansTrainer();\n\n    // Returns trained vocabulary (i.e. cluster centers).\n    virtual Mat cluster() const;\n    virtual Mat cluster( const Mat& descriptors ) const;\n\nprotected:\n\n    int clusterCount;\n    TermCriteria termcrit;\n    int attempts;\n    int flags;\n};\n\n/*\n * Class to compute image descriptor using bag of visual words.\n */\nclass CV_EXPORTS BOWImgDescriptorExtractor\n{\npublic:\n    BOWImgDescriptorExtractor( const Ptr<DescriptorExtractor>& dextractor,\n                               const Ptr<DescriptorMatcher>& dmatcher );\n    virtual ~BOWImgDescriptorExtractor();\n\n    void setVocabulary( const Mat& vocabulary );\n    const Mat& getVocabulary() const;\n    void compute( const Mat& image, vector<KeyPoint>& keypoints, Mat& imgDescriptor,\n                  vector<vector<int> >* pointIdxsOfClusters=0, Mat* descriptors=0 );\n    // compute() is not constant because DescriptorMatcher::match is not constant\n\n    int descriptorSize() const;\n    int descriptorType() const;\n\nprotected:\n    Mat vocabulary;\n    Ptr<DescriptorExtractor> dextractor;\n    Ptr<DescriptorMatcher> dmatcher;\n};\n\n} /* namespace cv */\n\n#endif /* __cplusplus */\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/all_indices.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_ALL_INDICES_H_\n#define OPENCV_FLANN_ALL_INDICES_H_\n\n#include \"general.h\"\n\n#include \"nn_index.h\"\n#include \"kdtree_index.h\"\n#include \"kdtree_single_index.h\"\n#include \"kmeans_index.h\"\n#include \"composite_index.h\"\n#include \"linear_index.h\"\n#include \"hierarchical_clustering_index.h\"\n#include \"lsh_index.h\"\n#include \"autotuned_index.h\"\n\n\nnamespace cvflann\n{\n\ntemplate<typename KDTreeCapability, typename VectorSpace, typename Distance>\nstruct index_creator\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KDTREE_SINGLE:\n            nnIndex = new KDTreeSingleIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KDTREE:\n            nnIndex = new KDTreeIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KMEANS:\n            nnIndex = new KMeansIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_COMPOSITE:\n            nnIndex = new CompositeIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_AUTOTUNED:\n            nnIndex = new AutotunedIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename VectorSpace, typename Distance>\nstruct index_creator<False,VectorSpace,Distance>\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KMEANS:\n            nnIndex = new KMeansIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename Distance>\nstruct index_creator<False,False,Distance>\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename Distance>\nNNIndex<Distance>* create_index_by_type(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n{\n    return index_creator<typename Distance::is_kdtree_distance,\n                         typename Distance::is_vector_space_distance,\n                         Distance>::create(dataset, params,distance);\n}\n\n}\n\n#endif /* OPENCV_FLANN_ALL_INDICES_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/allocator.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_ALLOCATOR_H_\n#define OPENCV_FLANN_ALLOCATOR_H_\n\n#include <stdlib.h>\n#include <stdio.h>\n\n\nnamespace cvflann\n{\n\n/**\n * Allocates (using C's malloc) a generic type T.\n *\n * Params:\n *     count = number of instances to allocate.\n * Returns: pointer (of type T*) to memory buffer\n */\ntemplate <typename T>\nT* allocate(size_t count = 1)\n{\n    T* mem = (T*) ::malloc(sizeof(T)*count);\n    return mem;\n}\n\n\n/**\n * Pooled storage allocator\n *\n * The following routines allow for the efficient allocation of storage in\n * small chunks from a specified pool.  Rather than allowing each structure\n * to be freed individually, an entire pool of storage is freed at once.\n * This method has two advantages over just using malloc() and free().  First,\n * it is far more efficient for allocating small objects, as there is\n * no overhead for remembering all the information needed to free each\n * object or consolidating fragmented memory.  Second, the decision about\n * how long to keep an object is made at the time of allocation, and there\n * is no need to track down all the objects to free them.\n *\n */\n\nconst size_t     WORDSIZE=16;\nconst  size_t     BLOCKSIZE=8192;\n\nclass PooledAllocator\n{\n    /* We maintain memory alignment to word boundaries by requiring that all\n        allocations be in multiples of the machine wordsize.  */\n    /* Size of machine word in bytes.  Must be power of 2. */\n    /* Minimum number of bytes requested at a time from\tthe system.  Must be multiple of WORDSIZE. */\n\n\n    int     remaining;  /* Number of bytes left in current block of storage. */\n    void*   base;     /* Pointer to base of current block of storage. */\n    void*   loc;      /* Current location in block to next allocate memory. */\n    int     blocksize;\n\n\npublic:\n    int     usedMemory;\n    int     wastedMemory;\n\n    /**\n        Default constructor. Initializes a new pool.\n     */\n    PooledAllocator(int blockSize = BLOCKSIZE)\n    {\n        blocksize = blockSize;\n        remaining = 0;\n        base = NULL;\n\n        usedMemory = 0;\n        wastedMemory = 0;\n    }\n\n    /**\n     * Destructor. Frees all the memory allocated in this pool.\n     */\n    ~PooledAllocator()\n    {\n        void* prev;\n\n        while (base != NULL) {\n            prev = *((void**) base); /* Get pointer to prev block. */\n            ::free(base);\n            base = prev;\n        }\n    }\n\n    /**\n     * Returns a pointer to a piece of new memory of the given size in bytes\n     * allocated from the pool.\n     */\n    void* allocateMemory(int size)\n    {\n        int blockSize;\n\n        /* Round size up to a multiple of wordsize.  The following expression\n            only works for WORDSIZE that is a power of 2, by masking last bits of\n            incremented size to zero.\n         */\n        size = (size + (WORDSIZE - 1)) & ~(WORDSIZE - 1);\n\n        /* Check whether a new block must be allocated.  Note that the first word\n            of a block is reserved for a pointer to the previous block.\n         */\n        if (size > remaining) {\n\n            wastedMemory += remaining;\n\n            /* Allocate new storage. */\n            blockSize = (size + sizeof(void*) + (WORDSIZE-1) > BLOCKSIZE) ?\n                        size + sizeof(void*) + (WORDSIZE-1) : BLOCKSIZE;\n\n            // use the standard C malloc to allocate memory\n            void* m = ::malloc(blockSize);\n            if (!m) {\n                fprintf(stderr,\"Failed to allocate memory.\\n\");\n                return NULL;\n            }\n\n            /* Fill first word of new block with pointer to previous block. */\n            ((void**) m)[0] = base;\n            base = m;\n\n            int shift = 0;\n            //int shift = (WORDSIZE - ( (((size_t)m) + sizeof(void*)) & (WORDSIZE-1))) & (WORDSIZE-1);\n\n            remaining = blockSize - sizeof(void*) - shift;\n            loc = ((char*)m + sizeof(void*) + shift);\n        }\n        void* rloc = loc;\n        loc = (char*)loc + size;\n        remaining -= size;\n\n        usedMemory += size;\n\n        return rloc;\n    }\n\n    /**\n     * Allocates (using this pool) a generic type T.\n     *\n     * Params:\n     *     count = number of instances to allocate.\n     * Returns: pointer (of type T*) to memory buffer\n     */\n    template <typename T>\n    T* allocate(size_t count = 1)\n    {\n        T* mem = (T*) this->allocateMemory((int)(sizeof(T)*count));\n        return mem;\n    }\n\n};\n\n}\n\n#endif //OPENCV_FLANN_ALLOCATOR_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/any.h",
    "content": "#ifndef OPENCV_FLANN_ANY_H_\n#define OPENCV_FLANN_ANY_H_\n/*\n * (C) Copyright Christopher Diggins 2005-2011\n * (C) Copyright Pablo Aguilar 2005\n * (C) Copyright Kevlin Henney 2001\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt\n *\n * Adapted for FLANN by Marius Muja\n */\n\n#include \"defines.h\"\n#include <stdexcept>\n#include <ostream>\n#include <typeinfo>\n\nnamespace cvflann\n{\n\nnamespace anyimpl\n{\n\nstruct bad_any_cast\n{\n};\n\nstruct empty_any\n{\n};\n\ninline std::ostream& operator <<(std::ostream& out, const empty_any&)\n{\n    out << \"[empty_any]\";\n    return out;\n}\n\nstruct base_any_policy\n{\n    virtual void static_delete(void** x) = 0;\n    virtual void copy_from_value(void const* src, void** dest) = 0;\n    virtual void clone(void* const* src, void** dest) = 0;\n    virtual void move(void* const* src, void** dest) = 0;\n    virtual void* get_value(void** src) = 0;\n    virtual ::size_t get_size() = 0;\n    virtual const std::type_info& type() = 0;\n    virtual void print(std::ostream& out, void* const* src) = 0;\n\n#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY\n    virtual ~base_any_policy() {}\n#endif\n};\n\ntemplate<typename T>\nstruct typed_base_any_policy : base_any_policy\n{\n    virtual ::size_t get_size() { return sizeof(T); }\n    virtual const std::type_info& type() { return typeid(T); }\n\n};\n\ntemplate<typename T>\nstruct small_any_policy : typed_base_any_policy<T>\n{\n    virtual void static_delete(void**) { }\n    virtual void copy_from_value(void const* src, void** dest)\n    {\n        new (dest) T(* reinterpret_cast<T const*>(src));\n    }\n    virtual void clone(void* const* src, void** dest) { *dest = *src; }\n    virtual void move(void* const* src, void** dest) { *dest = *src; }\n    virtual void* get_value(void** src) { return reinterpret_cast<void*>(src); }\n    virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast<T const*>(src); }\n};\n\ntemplate<typename T>\nstruct big_any_policy : typed_base_any_policy<T>\n{\n    virtual void static_delete(void** x)\n    {\n        if (* x) delete (* reinterpret_cast<T**>(x)); *x = NULL;\n    }\n    virtual void copy_from_value(void const* src, void** dest)\n    {\n        *dest = new T(*reinterpret_cast<T const*>(src));\n    }\n    virtual void clone(void* const* src, void** dest)\n    {\n        *dest = new T(**reinterpret_cast<T* const*>(src));\n    }\n    virtual void move(void* const* src, void** dest)\n    {\n        (*reinterpret_cast<T**>(dest))->~T();\n        **reinterpret_cast<T**>(dest) = **reinterpret_cast<T* const*>(src);\n    }\n    virtual void* get_value(void** src) { return *src; }\n    virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast<T const*>(*src); }\n};\n\ntemplate<> inline void big_any_policy<flann_centers_init_t>::print(std::ostream& out, void* const* src)\n{\n    out << int(*reinterpret_cast<flann_centers_init_t const*>(*src));\n}\n\ntemplate<> inline void big_any_policy<flann_algorithm_t>::print(std::ostream& out, void* const* src)\n{\n    out << int(*reinterpret_cast<flann_algorithm_t const*>(*src));\n}\n\ntemplate<typename T>\nstruct choose_policy\n{\n    typedef big_any_policy<T> type;\n};\n\ntemplate<typename T>\nstruct choose_policy<T*>\n{\n    typedef small_any_policy<T*> type;\n};\n\nstruct any;\n\n/// Choosing the policy for an any type is illegal, but should never happen.\n/// This is designed to throw a compiler error.\ntemplate<>\nstruct choose_policy<any>\n{\n    typedef void type;\n};\n\n/// Specializations for small types.\n#define SMALL_POLICY(TYPE) \\\n    template<> \\\n    struct choose_policy<TYPE> { typedef small_any_policy<TYPE> type; \\\n    }\n\nSMALL_POLICY(signed char);\nSMALL_POLICY(unsigned char);\nSMALL_POLICY(signed short);\nSMALL_POLICY(unsigned short);\nSMALL_POLICY(signed int);\nSMALL_POLICY(unsigned int);\nSMALL_POLICY(signed long);\nSMALL_POLICY(unsigned long);\nSMALL_POLICY(float);\nSMALL_POLICY(bool);\n\n#undef SMALL_POLICY\n\n/// This function will return a different policy for each type.\ntemplate<typename T>\nbase_any_policy* get_policy()\n{\n    static typename choose_policy<T>::type policy;\n    return &policy;\n}\n} // namespace anyimpl\n\nstruct any\n{\nprivate:\n    // fields\n    anyimpl::base_any_policy* policy;\n    void* object;\n\npublic:\n    /// Initializing constructor.\n    template <typename T>\n    any(const T& x)\n        : policy(anyimpl::get_policy<anyimpl::empty_any>()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Empty constructor.\n    any()\n        : policy(anyimpl::get_policy<anyimpl::empty_any>()), object(NULL)\n    { }\n\n    /// Special initializing constructor for string literals.\n    any(const char* x)\n        : policy(anyimpl::get_policy<anyimpl::empty_any>()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Copy constructor.\n    any(const any& x)\n        : policy(anyimpl::get_policy<anyimpl::empty_any>()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Destructor.\n    ~any()\n    {\n        policy->static_delete(&object);\n    }\n\n    /// Assignment function from another any.\n    any& assign(const any& x)\n    {\n        reset();\n        policy = x.policy;\n        policy->clone(&x.object, &object);\n        return *this;\n    }\n\n    /// Assignment function.\n    template <typename T>\n    any& assign(const T& x)\n    {\n        reset();\n        policy = anyimpl::get_policy<T>();\n        policy->copy_from_value(&x, &object);\n        return *this;\n    }\n\n    /// Assignment operator.\n    template<typename T>\n    any& operator=(const T& x)\n    {\n        return assign(x);\n    }\n\n    /// Assignment operator, specialed for literal strings.\n    /// They have types like const char [6] which don't work as expected.\n    any& operator=(const char* x)\n    {\n        return assign(x);\n    }\n\n    /// Utility functions\n    any& swap(any& x)\n    {\n        std::swap(policy, x.policy);\n        std::swap(object, x.object);\n        return *this;\n    }\n\n    /// Cast operator. You can only cast to the original type.\n    template<typename T>\n    T& cast()\n    {\n        if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast();\n        T* r = reinterpret_cast<T*>(policy->get_value(&object));\n        return *r;\n    }\n\n    /// Cast operator. You can only cast to the original type.\n    template<typename T>\n    const T& cast() const\n    {\n        if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast();\n        T* r = reinterpret_cast<T*>(policy->get_value(const_cast<void **>(&object)));\n        return *r;\n    }\n\n    /// Returns true if the any contains no value.\n    bool empty() const\n    {\n        return policy->type() == typeid(anyimpl::empty_any);\n    }\n\n    /// Frees any allocated memory, and sets the value to NULL.\n    void reset()\n    {\n        policy->static_delete(&object);\n        policy = anyimpl::get_policy<anyimpl::empty_any>();\n    }\n\n    /// Returns true if the two types are the same.\n    bool compatible(const any& x) const\n    {\n        return policy->type() == x.policy->type();\n    }\n\n    /// Returns if the type is compatible with the policy\n    template<typename T>\n    bool has_type()\n    {\n        return policy->type() == typeid(T);\n    }\n\n    const std::type_info& type() const\n    {\n        return policy->type();\n    }\n\n    friend std::ostream& operator <<(std::ostream& out, const any& any_val);\n};\n\ninline std::ostream& operator <<(std::ostream& out, const any& any_val)\n{\n    any_val.policy->print(out,&any_val.object);\n    return out;\n}\n\n}\n\n#endif // OPENCV_FLANN_ANY_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/autotuned_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n#ifndef OPENCV_FLANN_AUTOTUNED_INDEX_H_\n#define OPENCV_FLANN_AUTOTUNED_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"ground_truth.h\"\n#include \"index_testing.h\"\n#include \"sampling.h\"\n#include \"kdtree_index.h\"\n#include \"kdtree_single_index.h\"\n#include \"kmeans_index.h\"\n#include \"composite_index.h\"\n#include \"linear_index.h\"\n#include \"logger.h\"\n\nnamespace cvflann\n{\n\ntemplate<typename Distance>\nNNIndex<Distance>* create_index_by_type(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance);\n\n\nstruct AutotunedIndexParams : public IndexParams\n{\n    AutotunedIndexParams(float target_precision = 0.8, float build_weight = 0.01, float memory_weight = 0, float sample_fraction = 0.1)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_AUTOTUNED;\n        // precision desired (used for autotuning, -1 otherwise)\n        (*this)[\"target_precision\"] = target_precision;\n        // build tree time weighting factor\n        (*this)[\"build_weight\"] = build_weight;\n        // index memory weighting factor\n        (*this)[\"memory_weight\"] = memory_weight;\n        // what fraction of the dataset to use for autotuning\n        (*this)[\"sample_fraction\"] = sample_fraction;\n    }\n};\n\n\ntemplate <typename Distance>\nclass AutotunedIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    AutotunedIndex(const Matrix<ElementType>& inputData, const IndexParams& params = AutotunedIndexParams(), Distance d = Distance()) :\n        dataset_(inputData), distance_(d)\n    {\n        target_precision_ = get_param(params, \"target_precision\",0.8f);\n        build_weight_ =  get_param(params,\"build_weight\", 0.01f);\n        memory_weight_ = get_param(params, \"memory_weight\", 0.0f);\n        sample_fraction_ = get_param(params,\"sample_fraction\", 0.1f);\n        bestIndex_ = NULL;\n    }\n\n    AutotunedIndex(const AutotunedIndex&);\n    AutotunedIndex& operator=(const AutotunedIndex&);\n\n    virtual ~AutotunedIndex()\n    {\n        if (bestIndex_ != NULL) {\n            delete bestIndex_;\n            bestIndex_ = NULL;\n        }\n    }\n\n    /**\n     *          Method responsible with building the index.\n     */\n    virtual void buildIndex()\n    {\n        bestParams_ = estimateBuildParams();\n        Logger::info(\"----------------------------------------------------\\n\");\n        Logger::info(\"Autotuned parameters:\\n\");\n        print_params(bestParams_);\n        Logger::info(\"----------------------------------------------------\\n\");\n\n        bestIndex_ = create_index_by_type(dataset_, bestParams_, distance_);\n        bestIndex_->buildIndex();\n        speedup_ = estimateSearchParams(bestSearchParams_);\n        Logger::info(\"----------------------------------------------------\\n\");\n        Logger::info(\"Search parameters:\\n\");\n        print_params(bestSearchParams_);\n        Logger::info(\"----------------------------------------------------\\n\");\n    }\n\n    /**\n     *  Saves the index to a stream\n     */\n    virtual void saveIndex(FILE* stream)\n    {\n        save_value(stream, (int)bestIndex_->getType());\n        bestIndex_->saveIndex(stream);\n        save_value(stream, get_param<int>(bestSearchParams_, \"checks\"));\n    }\n\n    /**\n     *  Loads the index from a stream\n     */\n    virtual void loadIndex(FILE* stream)\n    {\n        int index_type;\n\n        load_value(stream, index_type);\n        IndexParams params;\n        params[\"algorithm\"] = (flann_algorithm_t)index_type;\n        bestIndex_ = create_index_by_type<Distance>(dataset_, params, distance_);\n        bestIndex_->loadIndex(stream);\n        int checks;\n        load_value(stream, checks);\n        bestSearchParams_[\"checks\"] = checks;\n    }\n\n    /**\n     *      Method that searches for nearest-neighbors\n     */\n    virtual void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        int checks = get_param<int>(searchParams,\"checks\",FLANN_CHECKS_AUTOTUNED);\n        if (checks == FLANN_CHECKS_AUTOTUNED) {\n            bestIndex_->findNeighbors(result, vec, bestSearchParams_);\n        }\n        else {\n            bestIndex_->findNeighbors(result, vec, searchParams);\n        }\n    }\n\n\n    IndexParams getParameters() const\n    {\n        return bestIndex_->getParameters();\n    }\n\n    SearchParams getSearchParameters() const\n    {\n        return bestSearchParams_;\n    }\n\n    float getSpeedup() const\n    {\n        return speedup_;\n    }\n\n\n    /**\n     *      Number of features in this index.\n     */\n    virtual size_t size() const\n    {\n        return bestIndex_->size();\n    }\n\n    /**\n     *  The length of each vector in this index.\n     */\n    virtual size_t veclen() const\n    {\n        return bestIndex_->veclen();\n    }\n\n    /**\n     * The amount of memory (in bytes) this index uses.\n     */\n    virtual int usedMemory() const\n    {\n        return bestIndex_->usedMemory();\n    }\n\n    /**\n     * Algorithm name\n     */\n    virtual flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_AUTOTUNED;\n    }\n\nprivate:\n\n    struct CostData\n    {\n        float searchTimeCost;\n        float buildTimeCost;\n        float memoryCost;\n        float totalCost;\n        IndexParams params;\n    };\n\n    void evaluate_kmeans(CostData& cost)\n    {\n        StartStopTimer t;\n        int checks;\n        const int nn = 1;\n\n        Logger::info(\"KMeansTree using params: max_iterations=%d, branching=%d\\n\",\n                     get_param<int>(cost.params,\"iterations\"),\n                     get_param<int>(cost.params,\"branching\"));\n        KMeansIndex<Distance> kmeans(sampledDataset_, cost.params, distance_);\n        // measure index build time\n        t.start();\n        kmeans.buildIndex();\n        t.stop();\n        float buildTime = (float)t.value;\n\n        // measure search time\n        float searchTime = test_index_precision(kmeans, sampledDataset_, testDataset_, gt_matches_, target_precision_, checks, distance_, nn);\n\n        float datasetMemory = float(sampledDataset_.rows * sampledDataset_.cols * sizeof(float));\n        cost.memoryCost = (kmeans.usedMemory() + datasetMemory) / datasetMemory;\n        cost.searchTimeCost = searchTime;\n        cost.buildTimeCost = buildTime;\n        Logger::info(\"KMeansTree buildTime=%g, searchTime=%g, build_weight=%g\\n\", buildTime, searchTime, build_weight_);\n    }\n\n\n    void evaluate_kdtree(CostData& cost)\n    {\n        StartStopTimer t;\n        int checks;\n        const int nn = 1;\n\n        Logger::info(\"KDTree using params: trees=%d\\n\", get_param<int>(cost.params,\"trees\"));\n        KDTreeIndex<Distance> kdtree(sampledDataset_, cost.params, distance_);\n\n        t.start();\n        kdtree.buildIndex();\n        t.stop();\n        float buildTime = (float)t.value;\n\n        //measure search time\n        float searchTime = test_index_precision(kdtree, sampledDataset_, testDataset_, gt_matches_, target_precision_, checks, distance_, nn);\n\n        float datasetMemory = float(sampledDataset_.rows * sampledDataset_.cols * sizeof(float));\n        cost.memoryCost = (kdtree.usedMemory() + datasetMemory) / datasetMemory;\n        cost.searchTimeCost = searchTime;\n        cost.buildTimeCost = buildTime;\n        Logger::info(\"KDTree buildTime=%g, searchTime=%g\\n\", buildTime, searchTime);\n    }\n\n\n    //    struct KMeansSimpleDownhillFunctor {\n    //\n    //        Autotune& autotuner;\n    //        KMeansSimpleDownhillFunctor(Autotune& autotuner_) : autotuner(autotuner_) {};\n    //\n    //        float operator()(int* params) {\n    //\n    //            float maxFloat = numeric_limits<float>::max();\n    //\n    //            if (params[0]<2) return maxFloat;\n    //            if (params[1]<0) return maxFloat;\n    //\n    //            CostData c;\n    //            c.params[\"algorithm\"] = KMEANS;\n    //            c.params[\"centers-init\"] = CENTERS_RANDOM;\n    //            c.params[\"branching\"] = params[0];\n    //            c.params[\"max-iterations\"] = params[1];\n    //\n    //            autotuner.evaluate_kmeans(c);\n    //\n    //            return c.timeCost;\n    //\n    //        }\n    //    };\n    //\n    //    struct KDTreeSimpleDownhillFunctor {\n    //\n    //        Autotune& autotuner;\n    //        KDTreeSimpleDownhillFunctor(Autotune& autotuner_) : autotuner(autotuner_) {};\n    //\n    //        float operator()(int* params) {\n    //            float maxFloat = numeric_limits<float>::max();\n    //\n    //            if (params[0]<1) return maxFloat;\n    //\n    //            CostData c;\n    //            c.params[\"algorithm\"] = KDTREE;\n    //            c.params[\"trees\"] = params[0];\n    //\n    //            autotuner.evaluate_kdtree(c);\n    //\n    //            return c.timeCost;\n    //\n    //        }\n    //    };\n\n\n\n    void optimizeKMeans(std::vector<CostData>& costs)\n    {\n        Logger::info(\"KMEANS, Step 1: Exploring parameter space\\n\");\n\n        // explore kmeans parameters space using combinations of the parameters below\n        int maxIterations[] = { 1, 5, 10, 15 };\n        int branchingFactors[] = { 16, 32, 64, 128, 256 };\n\n        int kmeansParamSpaceSize = FLANN_ARRAY_LEN(maxIterations) * FLANN_ARRAY_LEN(branchingFactors);\n        costs.reserve(costs.size() + kmeansParamSpaceSize);\n\n        // evaluate kmeans for all parameter combinations\n        for (size_t i = 0; i < FLANN_ARRAY_LEN(maxIterations); ++i) {\n            for (size_t j = 0; j < FLANN_ARRAY_LEN(branchingFactors); ++j) {\n                CostData cost;\n                cost.params[\"algorithm\"] = FLANN_INDEX_KMEANS;\n                cost.params[\"centers_init\"] = FLANN_CENTERS_RANDOM;\n                cost.params[\"iterations\"] = maxIterations[i];\n                cost.params[\"branching\"] = branchingFactors[j];\n\n                evaluate_kmeans(cost);\n                costs.push_back(cost);\n            }\n        }\n\n        //         Logger::info(\"KMEANS, Step 2: simplex-downhill optimization\\n\");\n        //\n        //         const int n = 2;\n        //         // choose initial simplex points as the best parameters so far\n        //         int kmeansNMPoints[n*(n+1)];\n        //         float kmeansVals[n+1];\n        //         for (int i=0;i<n+1;++i) {\n        //             kmeansNMPoints[i*n] = (int)kmeansCosts[i].params[\"branching\"];\n        //             kmeansNMPoints[i*n+1] = (int)kmeansCosts[i].params[\"max-iterations\"];\n        //             kmeansVals[i] = kmeansCosts[i].timeCost;\n        //         }\n        //         KMeansSimpleDownhillFunctor kmeans_cost_func(*this);\n        //         // run optimization\n        //         optimizeSimplexDownhill(kmeansNMPoints,n,kmeans_cost_func,kmeansVals);\n        //         // store results\n        //         for (int i=0;i<n+1;++i) {\n        //             kmeansCosts[i].params[\"branching\"] = kmeansNMPoints[i*2];\n        //             kmeansCosts[i].params[\"max-iterations\"] = kmeansNMPoints[i*2+1];\n        //             kmeansCosts[i].timeCost = kmeansVals[i];\n        //         }\n    }\n\n\n    void optimizeKDTree(std::vector<CostData>& costs)\n    {\n        Logger::info(\"KD-TREE, Step 1: Exploring parameter space\\n\");\n\n        // explore kd-tree parameters space using the parameters below\n        int testTrees[] = { 1, 4, 8, 16, 32 };\n\n        // evaluate kdtree for all parameter combinations\n        for (size_t i = 0; i < FLANN_ARRAY_LEN(testTrees); ++i) {\n            CostData cost;\n            cost.params[\"trees\"] = testTrees[i];\n\n            evaluate_kdtree(cost);\n            costs.push_back(cost);\n        }\n\n        //         Logger::info(\"KD-TREE, Step 2: simplex-downhill optimization\\n\");\n        //\n        //         const int n = 1;\n        //         // choose initial simplex points as the best parameters so far\n        //         int kdtreeNMPoints[n*(n+1)];\n        //         float kdtreeVals[n+1];\n        //         for (int i=0;i<n+1;++i) {\n        //             kdtreeNMPoints[i] = (int)kdtreeCosts[i].params[\"trees\"];\n        //             kdtreeVals[i] = kdtreeCosts[i].timeCost;\n        //         }\n        //         KDTreeSimpleDownhillFunctor kdtree_cost_func(*this);\n        //         // run optimization\n        //         optimizeSimplexDownhill(kdtreeNMPoints,n,kdtree_cost_func,kdtreeVals);\n        //         // store results\n        //         for (int i=0;i<n+1;++i) {\n        //             kdtreeCosts[i].params[\"trees\"] = kdtreeNMPoints[i];\n        //             kdtreeCosts[i].timeCost = kdtreeVals[i];\n        //         }\n    }\n\n    /**\n     *  Chooses the best nearest-neighbor algorithm and estimates the optimal\n     *  parameters to use when building the index (for a given precision).\n     *  Returns a dictionary with the optimal parameters.\n     */\n    IndexParams estimateBuildParams()\n    {\n        std::vector<CostData> costs;\n\n        int sampleSize = int(sample_fraction_ * dataset_.rows);\n        int testSampleSize = std::min(sampleSize / 10, 1000);\n\n        Logger::info(\"Entering autotuning, dataset size: %d, sampleSize: %d, testSampleSize: %d, target precision: %g\\n\", dataset_.rows, sampleSize, testSampleSize, target_precision_);\n\n        // For a very small dataset, it makes no sense to build any fancy index, just\n        // use linear search\n        if (testSampleSize < 10) {\n            Logger::info(\"Choosing linear, dataset too small\\n\");\n            return LinearIndexParams();\n        }\n\n        // We use a fraction of the original dataset to speedup the autotune algorithm\n        sampledDataset_ = random_sample(dataset_, sampleSize);\n        // We use a cross-validation approach, first we sample a testset from the dataset\n        testDataset_ = random_sample(sampledDataset_, testSampleSize, true);\n\n        // We compute the ground truth using linear search\n        Logger::info(\"Computing ground truth... \\n\");\n        gt_matches_ = Matrix<int>(new int[testDataset_.rows], testDataset_.rows, 1);\n        StartStopTimer t;\n        t.start();\n        compute_ground_truth<Distance>(sampledDataset_, testDataset_, gt_matches_, 0, distance_);\n        t.stop();\n\n        CostData linear_cost;\n        linear_cost.searchTimeCost = (float)t.value;\n        linear_cost.buildTimeCost = 0;\n        linear_cost.memoryCost = 0;\n        linear_cost.params[\"algorithm\"] = FLANN_INDEX_LINEAR;\n\n        costs.push_back(linear_cost);\n\n        // Start parameter autotune process\n        Logger::info(\"Autotuning parameters...\\n\");\n\n        optimizeKMeans(costs);\n        optimizeKDTree(costs);\n\n        float bestTimeCost = costs[0].searchTimeCost;\n        for (size_t i = 0; i < costs.size(); ++i) {\n            float timeCost = costs[i].buildTimeCost * build_weight_ + costs[i].searchTimeCost;\n            if (timeCost < bestTimeCost) {\n                bestTimeCost = timeCost;\n            }\n        }\n\n        float bestCost = costs[0].searchTimeCost / bestTimeCost;\n        IndexParams bestParams = costs[0].params;\n        if (bestTimeCost > 0) {\n            for (size_t i = 0; i < costs.size(); ++i) {\n                float crtCost = (costs[i].buildTimeCost * build_weight_ + costs[i].searchTimeCost) / bestTimeCost +\n                                memory_weight_ * costs[i].memoryCost;\n                if (crtCost < bestCost) {\n                    bestCost = crtCost;\n                    bestParams = costs[i].params;\n                }\n            }\n        }\n\n        delete[] gt_matches_.data;\n        delete[] testDataset_.data;\n        delete[] sampledDataset_.data;\n\n        return bestParams;\n    }\n\n\n\n    /**\n     *  Estimates the search time parameters needed to get the desired precision.\n     *  Precondition: the index is built\n     *  Postcondition: the searchParams will have the optimum params set, also the speedup obtained over linear search.\n     */\n    float estimateSearchParams(SearchParams& searchParams)\n    {\n        const int nn = 1;\n        const size_t SAMPLE_COUNT = 1000;\n\n        assert(bestIndex_ != NULL); // must have a valid index\n\n        float speedup = 0;\n\n        int samples = (int)std::min(dataset_.rows / 10, SAMPLE_COUNT);\n        if (samples > 0) {\n            Matrix<ElementType> testDataset = random_sample(dataset_, samples);\n\n            Logger::info(\"Computing ground truth\\n\");\n\n            // we need to compute the ground truth first\n            Matrix<int> gt_matches(new int[testDataset.rows], testDataset.rows, 1);\n            StartStopTimer t;\n            t.start();\n            compute_ground_truth<Distance>(dataset_, testDataset, gt_matches, 1, distance_);\n            t.stop();\n            float linear = (float)t.value;\n\n            int checks;\n            Logger::info(\"Estimating number of checks\\n\");\n\n            float searchTime;\n            float cb_index;\n            if (bestIndex_->getType() == FLANN_INDEX_KMEANS) {\n                Logger::info(\"KMeans algorithm, estimating cluster border factor\\n\");\n                KMeansIndex<Distance>* kmeans = (KMeansIndex<Distance>*)bestIndex_;\n                float bestSearchTime = -1;\n                float best_cb_index = -1;\n                int best_checks = -1;\n                for (cb_index = 0; cb_index < 1.1f; cb_index += 0.2f) {\n                    kmeans->set_cb_index(cb_index);\n                    searchTime = test_index_precision(*kmeans, dataset_, testDataset, gt_matches, target_precision_, checks, distance_, nn, 1);\n                    if ((searchTime < bestSearchTime) || (bestSearchTime == -1)) {\n                        bestSearchTime = searchTime;\n                        best_cb_index = cb_index;\n                        best_checks = checks;\n                    }\n                }\n                searchTime = bestSearchTime;\n                cb_index = best_cb_index;\n                checks = best_checks;\n\n                kmeans->set_cb_index(best_cb_index);\n                Logger::info(\"Optimum cb_index: %g\\n\", cb_index);\n                bestParams_[\"cb_index\"] = cb_index;\n            }\n            else {\n                searchTime = test_index_precision(*bestIndex_, dataset_, testDataset, gt_matches, target_precision_, checks, distance_, nn, 1);\n            }\n\n            Logger::info(\"Required number of checks: %d \\n\", checks);\n            searchParams[\"checks\"] = checks;\n\n            speedup = linear / searchTime;\n\n            delete[] gt_matches.data;\n            delete[] testDataset.data;\n        }\n\n        return speedup;\n    }\n\nprivate:\n    NNIndex<Distance>* bestIndex_;\n\n    IndexParams bestParams_;\n    SearchParams bestSearchParams_;\n\n    Matrix<ElementType> sampledDataset_;\n    Matrix<ElementType> testDataset_;\n    Matrix<int> gt_matches_;\n\n    float speedup_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    /**\n     * Index parameters\n     */\n    float target_precision_;\n    float build_weight_;\n    float memory_weight_;\n    float sample_fraction_;\n\n    Distance distance_;\n\n\n};\n}\n\n#endif /* OPENCV_FLANN_AUTOTUNED_INDEX_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/composite_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_COMPOSITE_INDEX_H_\n#define OPENCV_FLANN_COMPOSITE_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"kdtree_index.h\"\n#include \"kmeans_index.h\"\n\nnamespace cvflann\n{\n\n/**\n * Index parameters for the CompositeIndex.\n */\nstruct CompositeIndexParams : public IndexParams\n{\n    CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11,\n                         flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, float cb_index = 0.2 )\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KMEANS;\n        // number of randomized trees to use (for kdtree)\n        (*this)[\"trees\"] = trees;\n        // branching factor\n        (*this)[\"branching\"] = branching;\n        // max iterations to perform in one kmeans clustering (kmeans tree)\n        (*this)[\"iterations\"] = iterations;\n        // algorithm used for picking the initial cluster centers for kmeans tree\n        (*this)[\"centers_init\"] = centers_init;\n        // cluster boundary index. Used when searching the kmeans tree\n        (*this)[\"cb_index\"] = cb_index;\n    }\n};\n\n\n/**\n * This index builds a kd-tree index and a k-means index and performs nearest\n * neighbour search both indexes. This gives a slight boost in search performance\n * as some of the neighbours that are missed by one index are found by the other.\n */\ntemplate <typename Distance>\nclass CompositeIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    /**\n     * Index constructor\n     * @param inputData dataset containing the points to index\n     * @param params Index parameters\n     * @param d Distance functor\n     * @return\n     */\n    CompositeIndex(const Matrix<ElementType>& inputData, const IndexParams& params = CompositeIndexParams(),\n                   Distance d = Distance()) : index_params_(params)\n    {\n        kdtree_index_ = new KDTreeIndex<Distance>(inputData, params, d);\n        kmeans_index_ = new KMeansIndex<Distance>(inputData, params, d);\n\n    }\n\n    CompositeIndex(const CompositeIndex&);\n    CompositeIndex& operator=(const CompositeIndex&);\n\n    virtual ~CompositeIndex()\n    {\n        delete kdtree_index_;\n        delete kmeans_index_;\n    }\n\n    /**\n     * @return The index type\n     */\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_COMPOSITE;\n    }\n\n    /**\n     * @return Size of the index\n     */\n    size_t size() const\n    {\n        return kdtree_index_->size();\n    }\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    size_t veclen() const\n    {\n        return kdtree_index_->veclen();\n    }\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    int usedMemory() const\n    {\n        return kmeans_index_->usedMemory() + kdtree_index_->usedMemory();\n    }\n\n    /**\n     * \\brief Builds the index\n     */\n    void buildIndex()\n    {\n        Logger::info(\"Building kmeans tree...\\n\");\n        kmeans_index_->buildIndex();\n        Logger::info(\"Building kdtree tree...\\n\");\n        kdtree_index_->buildIndex();\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    void saveIndex(FILE* stream)\n    {\n        kmeans_index_->saveIndex(stream);\n        kdtree_index_->saveIndex(stream);\n    }\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    void loadIndex(FILE* stream)\n    {\n        kmeans_index_->loadIndex(stream);\n        kdtree_index_->loadIndex(stream);\n    }\n\n    /**\n     * \\returns The index parameters\n     */\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        kmeans_index_->findNeighbors(result, vec, searchParams);\n        kdtree_index_->findNeighbors(result, vec, searchParams);\n    }\n\nprivate:\n    /** The k-means index */\n    KMeansIndex<Distance>* kmeans_index_;\n\n    /** The kd-tree index */\n    KDTreeIndex<Distance>* kdtree_index_;\n\n    /** The index parameters */\n    const IndexParams index_params_;\n};\n\n}\n\n#endif //OPENCV_FLANN_COMPOSITE_INDEX_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/config.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_CONFIG_H_\n#define OPENCV_FLANN_CONFIG_H_\n\n#ifdef FLANN_VERSION_\n#undef FLANN_VERSION_\n#endif\n#define FLANN_VERSION_ \"1.6.10\"\n\n#endif /* OPENCV_FLANN_CONFIG_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/defines.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_DEFINES_H_\n#define OPENCV_FLANN_DEFINES_H_\n\n#include \"config.h\"\n\n#ifdef FLANN_EXPORT\n#undef FLANN_EXPORT\n#endif\n#ifdef WIN32\n/* win32 dll export/import directives */\n #ifdef FLANN_EXPORTS\n  #define FLANN_EXPORT __declspec(dllexport)\n #elif defined(FLANN_STATIC)\n  #define FLANN_EXPORT\n #else\n  #define FLANN_EXPORT __declspec(dllimport)\n #endif\n#else\n/* unix needs nothing */\n #define FLANN_EXPORT\n#endif\n\n\n#ifdef FLANN_DEPRECATED\n#undef FLANN_DEPRECATED\n#endif\n#ifdef __GNUC__\n#define FLANN_DEPRECATED __attribute__ ((deprecated))\n#elif defined(_MSC_VER)\n#define FLANN_DEPRECATED __declspec(deprecated)\n#else\n#pragma message(\"WARNING: You need to implement FLANN_DEPRECATED for this compiler\")\n#define FLANN_DEPRECATED\n#endif\n\n\n#undef FLANN_PLATFORM_32_BIT\n#undef FLANN_PLATFORM_64_BIT\n#if defined __amd64__ || defined __x86_64__ || defined _WIN64 || defined _M_X64\n#define FLANN_PLATFORM_64_BIT\n#else\n#define FLANN_PLATFORM_32_BIT\n#endif\n\n\n#undef FLANN_ARRAY_LEN\n#define FLANN_ARRAY_LEN(a) (sizeof(a)/sizeof(a[0]))\n\nnamespace cvflann {\n\n/* Nearest neighbour index algorithms */\nenum flann_algorithm_t\n{\n    FLANN_INDEX_LINEAR = 0,\n    FLANN_INDEX_KDTREE = 1,\n    FLANN_INDEX_KMEANS = 2,\n    FLANN_INDEX_COMPOSITE = 3,\n    FLANN_INDEX_KDTREE_SINGLE = 4,\n    FLANN_INDEX_HIERARCHICAL = 5,\n    FLANN_INDEX_LSH = 6,\n    FLANN_INDEX_SAVED = 254,\n    FLANN_INDEX_AUTOTUNED = 255,\n\n    // deprecated constants, should use the FLANN_INDEX_* ones instead\n    LINEAR = 0,\n    KDTREE = 1,\n    KMEANS = 2,\n    COMPOSITE = 3,\n    KDTREE_SINGLE = 4,\n    SAVED = 254,\n    AUTOTUNED = 255\n};\n\n\n\nenum flann_centers_init_t\n{\n    FLANN_CENTERS_RANDOM = 0,\n    FLANN_CENTERS_GONZALES = 1,\n    FLANN_CENTERS_KMEANSPP = 2,\n\n    // deprecated constants, should use the FLANN_CENTERS_* ones instead\n    CENTERS_RANDOM = 0,\n    CENTERS_GONZALES = 1,\n    CENTERS_KMEANSPP = 2\n};\n\nenum flann_log_level_t\n{\n    FLANN_LOG_NONE = 0,\n    FLANN_LOG_FATAL = 1,\n    FLANN_LOG_ERROR = 2,\n    FLANN_LOG_WARN = 3,\n    FLANN_LOG_INFO = 4\n};\n\nenum flann_distance_t\n{\n    FLANN_DIST_EUCLIDEAN = 1,\n    FLANN_DIST_L2 = 1,\n    FLANN_DIST_MANHATTAN = 2,\n    FLANN_DIST_L1 = 2,\n    FLANN_DIST_MINKOWSKI = 3,\n    FLANN_DIST_MAX   = 4,\n    FLANN_DIST_HIST_INTERSECT   = 5,\n    FLANN_DIST_HELLINGER = 6,\n    FLANN_DIST_CHI_SQUARE = 7,\n    FLANN_DIST_CS         = 7,\n    FLANN_DIST_KULLBACK_LEIBLER  = 8,\n    FLANN_DIST_KL                = 8,\n    FLANN_DIST_HAMMING          = 9,\n\n    // deprecated constants, should use the FLANN_DIST_* ones instead\n    EUCLIDEAN = 1,\n    MANHATTAN = 2,\n    MINKOWSKI = 3,\n    MAX_DIST   = 4,\n    HIST_INTERSECT   = 5,\n    HELLINGER = 6,\n    CS         = 7,\n    KL         = 8,\n    KULLBACK_LEIBLER  = 8\n};\n\nenum flann_datatype_t\n{\n    FLANN_INT8 = 0,\n    FLANN_INT16 = 1,\n    FLANN_INT32 = 2,\n    FLANN_INT64 = 3,\n    FLANN_UINT8 = 4,\n    FLANN_UINT16 = 5,\n    FLANN_UINT32 = 6,\n    FLANN_UINT64 = 7,\n    FLANN_FLOAT32 = 8,\n    FLANN_FLOAT64 = 9\n};\n\nenum\n{\n    FLANN_CHECKS_UNLIMITED = -1,\n    FLANN_CHECKS_AUTOTUNED = -2\n};\n\n}\n\n#endif /* OPENCV_FLANN_DEFINES_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/dist.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DIST_H_\n#define OPENCV_FLANN_DIST_H_\n\n#include <cmath>\n#include <cstdlib>\n#include <string.h>\n#ifdef _MSC_VER\ntypedef unsigned __int32 uint32_t;\ntypedef unsigned __int64 uint64_t;\n#else\n#include <stdint.h>\n#endif\n\n#include \"defines.h\"\n\n#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)\n# include <Intrin.h>\n#endif\n\n#ifdef __ARM_NEON__\n# include \"arm_neon.h\"\n#endif\n\nnamespace cvflann\n{\n\ntemplate<typename T>\ninline T abs(T x) { return (x<0) ? -x : x; }\n\ntemplate<>\ninline int abs<int>(int x) { return ::abs(x); }\n\ntemplate<>\ninline float abs<float>(float x) { return fabsf(x); }\n\ntemplate<>\ninline double abs<double>(double x) { return fabs(x); }\n\ntemplate<typename T>\nstruct Accumulator { typedef T Type; };\ntemplate<>\nstruct Accumulator<unsigned char>  { typedef float Type; };\ntemplate<>\nstruct Accumulator<unsigned short> { typedef float Type; };\ntemplate<>\nstruct Accumulator<unsigned int> { typedef float Type; };\ntemplate<>\nstruct Accumulator<char>   { typedef float Type; };\ntemplate<>\nstruct Accumulator<short>  { typedef float Type; };\ntemplate<>\nstruct Accumulator<int> { typedef float Type; };\n\n#undef True\n#undef False\n\nclass True\n{\n};\n\nclass False\n{\n};\n\n\n/**\n * Squared Euclidean distance functor.\n *\n * This is the simpler, unrolled version. This is preferable for\n * very low dimensionality data (eg 3D points)\n */\ntemplate<class T>\nstruct L2_Simple\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff;\n        for(size_t i = 0; i < size; ++i ) {\n            diff = *a++ - *b++;\n            result += diff*diff;\n        }\n        return result;\n    }\n\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return (a-b)*(a-b);\n    }\n};\n\n\n\n/**\n * Squared Euclidean distance functor, optimized version\n */\ntemplate<class T>\nstruct L2\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the squared Euclidean distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     *\n     *\tThe computation of squared root at the end is omitted for\n     *\tefficiency.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)(a[0] - b[0]);\n            diff1 = (ResultType)(a[1] - b[1]);\n            diff2 = (ResultType)(a[2] - b[2]);\n            diff3 = (ResultType)(a[3] - b[3]);\n            result += diff0 * diff0 + diff1 * diff1 + diff2 * diff2 + diff3 * diff3;\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)(*a++ - *b++);\n            result += diff0 * diff0;\n        }\n        return result;\n    }\n\n    /**\n     *\tPartial euclidean distance, using just one dimension. This is used by the\n     *\tkd-tree when computing partial distances while traversing the tree.\n     *\n     *\tSquared root is omitted for efficiency.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return (a-b)*(a-b);\n    }\n};\n\n\n/*\n * Manhattan distance functor, optimized version\n */\ntemplate<class T>\nstruct L1\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the Manhattan (L_1) distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)abs(a[0] - b[0]);\n            diff1 = (ResultType)abs(a[1] - b[1]);\n            diff2 = (ResultType)abs(a[2] - b[2]);\n            diff3 = (ResultType)abs(a[3] - b[3]);\n            result += diff0 + diff1 + diff2 + diff3;\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)abs(*a++ - *b++);\n            result += diff0;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return abs(a-b);\n    }\n};\n\n\n\ntemplate<class T>\nstruct MinkowskiDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    int order;\n\n    MinkowskiDistance(int order_) : order(order_) {}\n\n    /**\n     *  Compute the Minkowsky (L_p) distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     *\n     *\tThe computation of squared root at the end is omitted for\n     *\tefficiency.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)abs(a[0] - b[0]);\n            diff1 = (ResultType)abs(a[1] - b[1]);\n            diff2 = (ResultType)abs(a[2] - b[2]);\n            diff3 = (ResultType)abs(a[3] - b[3]);\n            result += pow(diff0,order) + pow(diff1,order) + pow(diff2,order) + pow(diff3,order);\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)abs(*a++ - *b++);\n            result += pow(diff0,order);\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return pow(static_cast<ResultType>(abs(a-b)),order);\n    }\n};\n\n\n\ntemplate<class T>\nstruct MaxDistance\n{\n    typedef False is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the max distance (L_infinity) between two vectors.\n     *\n     *  This distance is not a valid kdtree distance, it's not dimensionwise additive.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = abs(a[0] - b[0]);\n            diff1 = abs(a[1] - b[1]);\n            diff2 = abs(a[2] - b[2]);\n            diff3 = abs(a[3] - b[3]);\n            if (diff0>result) {result = diff0; }\n            if (diff1>result) {result = diff1; }\n            if (diff2>result) {result = diff2; }\n            if (diff3>result) {result = diff3; }\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = abs(*a++ - *b++);\n            result = (diff0>result) ? diff0 : result;\n        }\n        return result;\n    }\n\n    /* This distance functor is not dimension-wise additive, which\n     * makes it an invalid kd-tree distance, not implementing the accum_dist method */\n\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor\n * bit count of A exclusive XOR'ed with B\n */\nstruct HammingLUT\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n    typedef unsigned char ElementType;\n    typedef int ResultType;\n\n    /** this will count the bits in a ^ b\n     */\n    ResultType operator()(const unsigned char* a, const unsigned char* b, int size) const\n    {\n        static const uchar popCountTable[] =\n        {\n            0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8\n        };\n        ResultType result = 0;\n        for (int i = 0; i < size; i++) {\n            result += popCountTable[a[i] ^ b[i]];\n        }\n        return result;\n    }\n};\n\n/**\n * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor\n * bit count of A exclusive XOR'ed with B\n */\nstruct HammingLUT2\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n    typedef unsigned char ElementType;\n    typedef int ResultType;\n\n    /** this will count the bits in a ^ b\n     */\n    ResultType operator()(const unsigned char* a, const unsigned char* b, size_t size) const\n    {\n        static const uchar popCountTable[] =\n        {\n            0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8\n        };\n        ResultType result = 0;\n        for (size_t i = 0; i < size; i++) {\n            result += popCountTable[a[i] ^ b[i]];\n        }\n        return result;\n    }\n};\n\n/**\n * Hamming distance functor (pop count between two binary vectors, i.e. xor them and count the number of bits set)\n * That code was taken from brief.cpp in OpenCV\n */\ntemplate<class T>\nstruct Hamming\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n\n    typedef T ElementType;\n    typedef int ResultType;\n\n    template<typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = 0;\n#ifdef __ARM_NEON__\n        {\n            uint32x4_t bits = vmovq_n_u32(0);\n            for (size_t i = 0; i < size; i += 16) {\n                uint8x16_t A_vec = vld1q_u8 (a + i);\n                uint8x16_t B_vec = vld1q_u8 (b + i);\n                uint8x16_t AxorB = veorq_u8 (A_vec, B_vec);\n                uint8x16_t bitsSet = vcntq_u8 (AxorB);\n                uint16x8_t bitSet8 = vpaddlq_u8 (bitsSet);\n                uint32x4_t bitSet4 = vpaddlq_u16 (bitSet8);\n                bits = vaddq_u32(bits, bitSet4);\n            }\n            uint64x2_t bitSet2 = vpaddlq_u32 (bits);\n            result = vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),0);\n            result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2);\n        }\n#elif __GNUC__\n        {\n            //for portability just use unsigned long -- and use the __builtin_popcountll (see docs for __builtin_popcountll)\n            typedef unsigned long long pop_t;\n            const size_t modulo = size % sizeof(pop_t);\n            const pop_t* a2 = reinterpret_cast<const pop_t*> (a);\n            const pop_t* b2 = reinterpret_cast<const pop_t*> (b);\n            const pop_t* a2_end = a2 + (size / sizeof(pop_t));\n\n            for (; a2 != a2_end; ++a2, ++b2) result += __builtin_popcountll((*a2) ^ (*b2));\n\n            if (modulo) {\n                //in the case where size is not dividable by sizeof(size_t)\n                //need to mask off the bits at the end\n                pop_t a_final = 0, b_final = 0;\n                memcpy(&a_final, a2, modulo);\n                memcpy(&b_final, b2, modulo);\n                result += __builtin_popcountll(a_final ^ b_final);\n            }\n        }\n#else // NO NEON and NOT GNUC\n        typedef unsigned long long pop_t;\n        HammingLUT lut;\n        result = lut(reinterpret_cast<const unsigned char*> (a),\n                     reinterpret_cast<const unsigned char*> (b), size * sizeof(pop_t));\n#endif\n        return result;\n    }\n};\n\ntemplate<typename T>\nstruct Hamming2\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef int ResultType;\n\n    /** This is popcount_3() from:\n     * http://en.wikipedia.org/wiki/Hamming_weight */\n    unsigned int popcnt32(uint32_t n) const\n    {\n        n -= ((n >> 1) & 0x55555555);\n        n = (n & 0x33333333) + ((n >> 2) & 0x33333333);\n        return (((n + (n >> 4))& 0xF0F0F0F)* 0x1010101) >> 24;\n    }\n\n#ifdef FLANN_PLATFORM_64_BIT\n    unsigned int popcnt64(uint64_t n) const\n    {\n        n -= ((n >> 1) & 0x5555555555555555);\n        n = (n & 0x3333333333333333) + ((n >> 2) & 0x3333333333333333);\n        return (((n + (n >> 4))& 0x0f0f0f0f0f0f0f0f)* 0x0101010101010101) >> 56;\n    }\n#endif\n\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n#ifdef FLANN_PLATFORM_64_BIT\n        const uint64_t* pa = reinterpret_cast<const uint64_t*>(a);\n        const uint64_t* pb = reinterpret_cast<const uint64_t*>(b);\n        ResultType result = 0;\n        size /= (sizeof(uint64_t)/sizeof(unsigned char));\n        for(size_t i = 0; i < size; ++i ) {\n            result += popcnt64(*pa ^ *pb);\n            ++pa;\n            ++pb;\n        }\n#else\n        const uint32_t* pa = reinterpret_cast<const uint32_t*>(a);\n        const uint32_t* pb = reinterpret_cast<const uint32_t*>(b);\n        ResultType result = 0;\n        size /= (sizeof(uint32_t)/sizeof(unsigned char));\n        for(size_t i = 0; i < size; ++i ) {\n            result += popcnt32(*pa ^ *pb);\n            ++pa;\n            ++pb;\n        }\n#endif\n        return result;\n    }\n};\n\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\ntemplate<class T>\nstruct HistIntersectionDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the histogram intersection distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType min0, min1, min2, min3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            min0 = (ResultType)(a[0] < b[0] ? a[0] : b[0]);\n            min1 = (ResultType)(a[1] < b[1] ? a[1] : b[1]);\n            min2 = (ResultType)(a[2] < b[2] ? a[2] : b[2]);\n            min3 = (ResultType)(a[3] < b[3] ? a[3] : b[3]);\n            result += min0 + min1 + min2 + min3;\n            a += 4;\n            b += 4;\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            min0 = (ResultType)(*a < *b ? *a : *b);\n            result += min0;\n            ++a;\n            ++b;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return a<b ? a : b;\n    }\n};\n\n\n\ntemplate<class T>\nstruct HellingerDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the histogram intersection distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = sqrt(static_cast<ResultType>(a[0])) - sqrt(static_cast<ResultType>(b[0]));\n            diff1 = sqrt(static_cast<ResultType>(a[1])) - sqrt(static_cast<ResultType>(b[1]));\n            diff2 = sqrt(static_cast<ResultType>(a[2])) - sqrt(static_cast<ResultType>(b[2]));\n            diff3 = sqrt(static_cast<ResultType>(a[3])) - sqrt(static_cast<ResultType>(b[3]));\n            result += diff0 * diff0 + diff1 * diff1 + diff2 * diff2 + diff3 * diff3;\n            a += 4;\n            b += 4;\n        }\n        while (a < last) {\n            diff0 = sqrt(static_cast<ResultType>(*a++)) - sqrt(static_cast<ResultType>(*b++));\n            result += diff0 * diff0;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return sqrt(static_cast<ResultType>(a)) - sqrt(static_cast<ResultType>(b));\n    }\n};\n\n\ntemplate<class T>\nstruct ChiSquareDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the chi-square distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType sum, diff;\n        Iterator1 last = a + size;\n\n        while (a < last) {\n            sum = (ResultType)(*a + *b);\n            if (sum>0) {\n                diff = (ResultType)(*a - *b);\n                result += diff*diff/sum;\n            }\n            ++a;\n            ++b;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        ResultType result = ResultType();\n        ResultType sum, diff;\n\n        sum = (ResultType)(a+b);\n        if (sum>0) {\n            diff = (ResultType)(a-b);\n            result = diff*diff/sum;\n        }\n        return result;\n    }\n};\n\n\ntemplate<class T>\nstruct KL_Divergence\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the Kullback–Leibler divergence\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        Iterator1 last = a + size;\n\n        while (a < last) {\n            if (* a != 0) {\n                ResultType ratio = (ResultType)(*a / *b);\n                if (ratio>0) {\n                    result += *a * log(ratio);\n                }\n            }\n            ++a;\n            ++b;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        ResultType result = ResultType();\n        ResultType ratio = (ResultType)(a / b);\n        if (ratio>0) {\n            result = a * log(ratio);\n        }\n        return result;\n    }\n};\n\n\n\n/*\n * This is a \"zero iterator\". It basically behaves like a zero filled\n * array to all algorithms that use arrays as iterators (STL style).\n * It's useful when there's a need to compute the distance between feature\n * and origin it and allows for better compiler optimisation than using a\n * zero-filled array.\n */\ntemplate <typename T>\nstruct ZeroIterator\n{\n\n    T operator*()\n    {\n        return 0;\n    }\n\n    T operator[](int)\n    {\n        return 0;\n    }\n\n    const ZeroIterator<T>& operator ++()\n    {\n        return *this;\n    }\n\n    ZeroIterator<T> operator ++(int)\n    {\n        return *this;\n    }\n\n    ZeroIterator<T>& operator+=(int)\n    {\n        return *this;\n    }\n\n};\n\n}\n\n#endif //OPENCV_FLANN_DIST_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/dummy.h",
    "content": "\n#ifndef OPENCV_FLANN_DUMMY_H_\n#define OPENCV_FLANN_DUMMY_H_\n\nnamespace cvflann\n{\n\n#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS\n__declspec(dllexport)\n#endif\nvoid dummyfunc();\n\n}\n\n\n#endif  /* OPENCV_FLANN_DUMMY_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/dynamic_bitset.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DYNAMIC_BITSET_H_\n#define OPENCV_FLANN_DYNAMIC_BITSET_H_\n\n#ifndef FLANN_USE_BOOST\n#  define FLANN_USE_BOOST 0\n#endif\n//#define FLANN_USE_BOOST 1\n#if FLANN_USE_BOOST\n#include <boost/dynamic_bitset.hpp>\ntypedef boost::dynamic_bitset<> DynamicBitset;\n#else\n\n#include <limits.h>\n\n#include \"dist.h\"\n\nnamespace cvflann {\n\n/** Class re-implementing the boost version of it\n * This helps not depending on boost, it also does not do the bound checks\n * and has a way to reset a block for speed\n */\nclass DynamicBitset\n{\npublic:\n    /** @param default constructor\n     */\n    DynamicBitset()\n    {\n    }\n\n    /** @param only constructor we use in our code\n     * @param the size of the bitset (in bits)\n     */\n    DynamicBitset(size_t sz)\n    {\n        resize(sz);\n        reset();\n    }\n\n    /** Sets all the bits to 0\n     */\n    void clear()\n    {\n        std::fill(bitset_.begin(), bitset_.end(), 0);\n    }\n\n    /** @brief checks if the bitset is empty\n     * @return true if the bitset is empty\n     */\n    bool empty() const\n    {\n        return bitset_.empty();\n    }\n\n    /** @param set all the bits to 0\n     */\n    void reset()\n    {\n        std::fill(bitset_.begin(), bitset_.end(), 0);\n    }\n\n    /** @brief set one bit to 0\n     * @param\n     */\n    void reset(size_t index)\n    {\n        bitset_[index / cell_bit_size_] &= ~(size_t(1) << (index % cell_bit_size_));\n    }\n\n    /** @brief sets a specific bit to 0, and more bits too\n     * This function is useful when resetting a given set of bits so that the\n     * whole bitset ends up being 0: if that's the case, we don't care about setting\n     * other bits to 0\n     * @param\n     */\n    void reset_block(size_t index)\n    {\n        bitset_[index / cell_bit_size_] = 0;\n    }\n\n    /** @param resize the bitset so that it contains at least size bits\n     * @param size\n     */\n    void resize(size_t sz)\n    {\n        size_ = sz;\n        bitset_.resize(sz / cell_bit_size_ + 1);\n    }\n\n    /** @param set a bit to true\n     * @param index the index of the bit to set to 1\n     */\n    void set(size_t index)\n    {\n        bitset_[index / cell_bit_size_] |= size_t(1) << (index % cell_bit_size_);\n    }\n\n    /** @param gives the number of contained bits\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /** @param check if a bit is set\n     * @param index the index of the bit to check\n     * @return true if the bit is set\n     */\n    bool test(size_t index) const\n    {\n        return (bitset_[index / cell_bit_size_] & (size_t(1) << (index % cell_bit_size_))) != 0;\n    }\n\nprivate:\n    std::vector<size_t> bitset_;\n    size_t size_;\n    static const unsigned int cell_bit_size_ = CHAR_BIT * sizeof(size_t);\n};\n\n} // namespace cvflann\n\n#endif\n\n#endif // OPENCV_FLANN_DYNAMIC_BITSET_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/flann.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef _OPENCV_FLANN_HPP_\n#define _OPENCV_FLANN_HPP_\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/types_c.h\"\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/flann/flann_base.hpp\"\n#include \"opencv2/flann/miniflann.hpp\"\n\nnamespace cvflann\n{\n    CV_EXPORTS flann_distance_t flann_distance_type();\n    FLANN_DEPRECATED CV_EXPORTS void set_distance_type(flann_distance_t distance_type, int order);\n}\n\n\nnamespace cv\n{\nnamespace flann\n{\n\ntemplate <typename T> struct CvType {};\ntemplate <> struct CvType<unsigned char> { static int type() { return CV_8U; } };\ntemplate <> struct CvType<char> { static int type() { return CV_8S; } };\ntemplate <> struct CvType<unsigned short> { static int type() { return CV_16U; } };\ntemplate <> struct CvType<short> { static int type() { return CV_16S; } };\ntemplate <> struct CvType<int> { static int type() { return CV_32S; } };\ntemplate <> struct CvType<float> { static int type() { return CV_32F; } };\ntemplate <> struct CvType<double> { static int type() { return CV_64F; } };\n\n\n// bring the flann parameters into this namespace\nusing ::cvflann::get_param;\nusing ::cvflann::print_params;\n\n// bring the flann distances into this namespace\nusing ::cvflann::L2_Simple;\nusing ::cvflann::L2;\nusing ::cvflann::L1;\nusing ::cvflann::MinkowskiDistance;\nusing ::cvflann::MaxDistance;\nusing ::cvflann::HammingLUT;\nusing ::cvflann::Hamming;\nusing ::cvflann::Hamming2;\nusing ::cvflann::HistIntersectionDistance;\nusing ::cvflann::HellingerDistance;\nusing ::cvflann::ChiSquareDistance;\nusing ::cvflann::KL_Divergence;\n\n\n\ntemplate <typename Distance>\nclass GenericIndex\n{\npublic:\n        typedef typename Distance::ElementType ElementType;\n        typedef typename Distance::ResultType DistanceType;\n\n        GenericIndex(const Mat& features, const ::cvflann::IndexParams& params, Distance distance = Distance());\n\n        ~GenericIndex();\n\n        void knnSearch(const vector<ElementType>& query, vector<int>& indices,\n                       vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& params);\n        void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params);\n\n        int radiusSearch(const vector<ElementType>& query, vector<int>& indices,\n                         vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n        int radiusSearch(const Mat& query, Mat& indices, Mat& dists,\n                         DistanceType radius, const ::cvflann::SearchParams& params);\n\n        void save(std::string filename) { nnIndex->save(filename); }\n\n        int veclen() const { return nnIndex->veclen(); }\n\n        int size() const { return nnIndex->size(); }\n\n        ::cvflann::IndexParams getParameters() { return nnIndex->getParameters(); }\n\n        FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() { return nnIndex->getIndexParameters(); }\n\nprivate:\n        ::cvflann::Index<Distance>* nnIndex;\n};\n\n\n#define FLANN_DISTANCE_CHECK \\\n    if ( ::cvflann::flann_distance_type() != cvflann::FLANN_DIST_L2) { \\\n        printf(\"[WARNING] You are using cv::flann::Index (or cv::flann::GenericIndex) and have also changed \"\\\n        \"the distance using cvflann::set_distance_type. This is no longer working as expected \"\\\n        \"(cv::flann::Index always uses L2). You should create the index templated on the distance, \"\\\n        \"for example for L1 distance use: GenericIndex< L1<float> > \\n\"); \\\n    }\n\n\ntemplate <typename Distance>\nGenericIndex<Distance>::GenericIndex(const Mat& dataset, const ::cvflann::IndexParams& params, Distance distance)\n{\n    CV_Assert(dataset.type() == CvType<ElementType>::type());\n    CV_Assert(dataset.isContinuous());\n    ::cvflann::Matrix<ElementType> m_dataset((ElementType*)dataset.ptr<ElementType>(0), dataset.rows, dataset.cols);\n\n    nnIndex = new ::cvflann::Index<Distance>(m_dataset, params, distance);\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->buildIndex();\n}\n\ntemplate <typename Distance>\nGenericIndex<Distance>::~GenericIndex()\n{\n    delete nnIndex;\n}\n\ntemplate <typename Distance>\nvoid GenericIndex<Distance>::knnSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n}\n\n\ntemplate <typename Distance>\nvoid GenericIndex<Distance>::knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(queries.type() == CvType<ElementType>::type());\n    CV_Assert(queries.isContinuous());\n    ::cvflann::Matrix<ElementType> m_queries((ElementType*)queries.ptr<ElementType>(0), queries.rows, queries.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n}\n\ntemplate <typename Distance>\nint GenericIndex<Distance>::radiusSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    FLANN_DISTANCE_CHECK\n\n    return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\ntemplate <typename Distance>\nint GenericIndex<Distance>::radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(query.type() == CvType<ElementType>::type());\n    CV_Assert(query.isContinuous());\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)query.ptr<ElementType>(0), query.rows, query.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    FLANN_DISTANCE_CHECK\n\n    return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\n/**\n * @deprecated Use GenericIndex class instead\n */\ntemplate <typename T>\nclass\n#ifndef _MSC_VER\n FLANN_DEPRECATED\n#endif\n Index_ {\npublic:\n        typedef typename L2<T>::ElementType ElementType;\n        typedef typename L2<T>::ResultType DistanceType;\n\n    Index_(const Mat& features, const ::cvflann::IndexParams& params);\n\n    ~Index_();\n\n    void knnSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& params);\n    void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params);\n\n    int radiusSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n    int radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n\n    void save(std::string filename)\n        {\n            if (nnIndex_L1) nnIndex_L1->save(filename);\n            if (nnIndex_L2) nnIndex_L2->save(filename);\n        }\n\n    int veclen() const\n    {\n            if (nnIndex_L1) return nnIndex_L1->veclen();\n            if (nnIndex_L2) return nnIndex_L2->veclen();\n        }\n\n    int size() const\n    {\n            if (nnIndex_L1) return nnIndex_L1->size();\n            if (nnIndex_L2) return nnIndex_L2->size();\n        }\n\n        ::cvflann::IndexParams getParameters()\n        {\n            if (nnIndex_L1) return nnIndex_L1->getParameters();\n            if (nnIndex_L2) return nnIndex_L2->getParameters();\n\n        }\n\n        FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters()\n        {\n            if (nnIndex_L1) return nnIndex_L1->getIndexParameters();\n            if (nnIndex_L2) return nnIndex_L2->getIndexParameters();\n        }\n\nprivate:\n        // providing backwards compatibility for L2 and L1 distances (most common)\n        ::cvflann::Index< L2<ElementType> >* nnIndex_L2;\n        ::cvflann::Index< L1<ElementType> >* nnIndex_L1;\n};\n\n#ifdef _MSC_VER\ntemplate <typename T>\nclass FLANN_DEPRECATED Index_;\n#endif\n\ntemplate <typename T>\nIndex_<T>::Index_(const Mat& dataset, const ::cvflann::IndexParams& params)\n{\n    printf(\"[WARNING] The cv::flann::Index_<T> class is deperecated, use cv::flann::GenericIndex<Distance> instead\\n\");\n\n    CV_Assert(dataset.type() == CvType<ElementType>::type());\n    CV_Assert(dataset.isContinuous());\n    ::cvflann::Matrix<ElementType> m_dataset((ElementType*)dataset.ptr<ElementType>(0), dataset.rows, dataset.cols);\n\n    if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L2 ) {\n        nnIndex_L1 = NULL;\n        nnIndex_L2 = new ::cvflann::Index< L2<ElementType> >(m_dataset, params);\n    }\n    else if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L1 ) {\n        nnIndex_L1 = new ::cvflann::Index< L1<ElementType> >(m_dataset, params);\n        nnIndex_L2 = NULL;\n    }\n    else {\n        printf(\"[ERROR] cv::flann::Index_<T> only provides backwards compatibility for the L1 and L2 distances. \"\n        \"For other distance types you must use cv::flann::GenericIndex<Distance>\\n\");\n        CV_Assert(0);\n    }\n    if (nnIndex_L1) nnIndex_L1->buildIndex();\n    if (nnIndex_L2) nnIndex_L2->buildIndex();\n}\n\ntemplate <typename T>\nIndex_<T>::~Index_()\n{\n    if (nnIndex_L1) delete nnIndex_L1;\n    if (nnIndex_L2) delete nnIndex_L2;\n}\n\ntemplate <typename T>\nvoid Index_<T>::knnSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    if (nnIndex_L1) nnIndex_L1->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n    if (nnIndex_L2) nnIndex_L2->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n}\n\n\ntemplate <typename T>\nvoid Index_<T>::knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(queries.type() == CvType<ElementType>::type());\n    CV_Assert(queries.isContinuous());\n    ::cvflann::Matrix<ElementType> m_queries((ElementType*)queries.ptr<ElementType>(0), queries.rows, queries.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    if (nnIndex_L1) nnIndex_L1->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n    if (nnIndex_L2) nnIndex_L2->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n}\n\ntemplate <typename T>\nint Index_<T>::radiusSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    if (nnIndex_L1) return nnIndex_L1->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n    if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\ntemplate <typename T>\nint Index_<T>::radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(query.type() == CvType<ElementType>::type());\n    CV_Assert(query.isContinuous());\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)query.ptr<ElementType>(0), query.rows, query.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    if (nnIndex_L1) return nnIndex_L1->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n    if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\n\ntemplate <typename Distance>\nint hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params,\n                           Distance d = Distance())\n{\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    CV_Assert(features.type() == CvType<ElementType>::type());\n    CV_Assert(features.isContinuous());\n    ::cvflann::Matrix<ElementType> m_features((ElementType*)features.ptr<ElementType>(0), features.rows, features.cols);\n\n    CV_Assert(centers.type() == CvType<DistanceType>::type());\n    CV_Assert(centers.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_centers((DistanceType*)centers.ptr<DistanceType>(0), centers.rows, centers.cols);\n\n    return ::cvflann::hierarchicalClustering<Distance>(m_features, m_centers, params, d);\n}\n\n\ntemplate <typename ELEM_TYPE, typename DIST_TYPE>\nFLANN_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params)\n{\n    printf(\"[WARNING] cv::flann::hierarchicalClustering<ELEM_TYPE,DIST_TYPE> is deprecated, use \"\n        \"cv::flann::hierarchicalClustering<Distance> instead\\n\");\n\n    if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L2 ) {\n        return hierarchicalClustering< L2<ELEM_TYPE> >(features, centers, params);\n    }\n    else if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L1 ) {\n        return hierarchicalClustering< L1<ELEM_TYPE> >(features, centers, params);\n    }\n    else {\n        printf(\"[ERROR] cv::flann::hierarchicalClustering<ELEM_TYPE,DIST_TYPE> only provides backwards \"\n        \"compatibility for the L1 and L2 distances. \"\n        \"For other distance types you must use cv::flann::hierarchicalClustering<Distance>\\n\");\n        CV_Assert(0);\n    }\n}\n\n} } // namespace cv::flann\n\n#endif // __cplusplus\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/flann_base.hpp",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_BASE_HPP_\n#define OPENCV_FLANN_BASE_HPP_\n\n#include <vector>\n#include <string>\n#include <cassert>\n#include <cstdio>\n\n#include \"general.h\"\n#include \"matrix.h\"\n#include \"params.h\"\n#include \"saving.h\"\n\n#include \"all_indices.h\"\n\nnamespace cvflann\n{\n\n/**\n * Sets the log level used for all flann functions\n * @param level Verbosity level\n */\ninline void log_verbosity(int level)\n{\n    if (level >= 0) {\n        Logger::setLevel(level);\n    }\n}\n\n/**\n * (Deprecated) Index parameters for creating a saved index.\n */\nstruct SavedIndexParams : public IndexParams\n{\n    SavedIndexParams(std::string filename)\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_SAVED;\n        (*this)[\"filename\"] = filename;\n    }\n};\n\n\ntemplate<typename Distance>\nNNIndex<Distance>* load_saved_index(const Matrix<typename Distance::ElementType>& dataset, const std::string& filename, Distance distance)\n{\n    typedef typename Distance::ElementType ElementType;\n\n    FILE* fin = fopen(filename.c_str(), \"rb\");\n    if (fin == NULL) {\n        return NULL;\n    }\n    IndexHeader header = load_header(fin);\n    if (header.data_type != Datatype<ElementType>::type()) {\n        throw FLANNException(\"Datatype of saved index is different than of the one to be created.\");\n    }\n    if ((size_t(header.rows) != dataset.rows)||(size_t(header.cols) != dataset.cols)) {\n        throw FLANNException(\"The index saved belongs to a different dataset\");\n    }\n\n    IndexParams params;\n    params[\"algorithm\"] = header.index_type;\n    NNIndex<Distance>* nnIndex = create_index_by_type<Distance>(dataset, params, distance);\n    nnIndex->loadIndex(fin);\n    fclose(fin);\n\n    return nnIndex;\n}\n\n\ntemplate<typename Distance>\nclass Index : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    Index(const Matrix<ElementType>& features, const IndexParams& params, Distance distance = Distance() )\n        : index_params_(params)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params,\"algorithm\");\n        loaded_ = false;\n\n        if (index_type == FLANN_INDEX_SAVED) {\n            nnIndex_ = load_saved_index<Distance>(features, get_param<std::string>(params,\"filename\"), distance);\n            loaded_ = true;\n        }\n        else {\n            nnIndex_ = create_index_by_type<Distance>(features, params, distance);\n        }\n    }\n\n    ~Index()\n    {\n        delete nnIndex_;\n    }\n\n    /**\n     * Builds the index.\n     */\n    void buildIndex()\n    {\n        if (!loaded_) {\n            nnIndex_->buildIndex();\n        }\n    }\n\n    void save(std::string filename)\n    {\n        FILE* fout = fopen(filename.c_str(), \"wb\");\n        if (fout == NULL) {\n            throw FLANNException(\"Cannot open file\");\n        }\n        save_header(fout, *nnIndex_);\n        saveIndex(fout);\n        fclose(fout);\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    virtual void saveIndex(FILE* stream)\n    {\n        nnIndex_->saveIndex(stream);\n    }\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    virtual void loadIndex(FILE* stream)\n    {\n        nnIndex_->loadIndex(stream);\n    }\n\n    /**\n     * \\returns number of features in this index.\n     */\n    size_t veclen() const\n    {\n        return nnIndex_->veclen();\n    }\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    size_t size() const\n    {\n        return nnIndex_->size();\n    }\n\n    /**\n     * \\returns The index type (kdtree, kmeans,...)\n     */\n    flann_algorithm_t getType() const\n    {\n        return nnIndex_->getType();\n    }\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    virtual int usedMemory() const\n    {\n        return nnIndex_->usedMemory();\n    }\n\n\n    /**\n     * \\returns The index parameters\n     */\n    IndexParams getParameters() const\n    {\n        return nnIndex_->getParameters();\n    }\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        nnIndex_->knnSearch(queries, indices, dists, knn, params);\n    }\n\n    /**\n     * \\brief Perform radius search\n     * \\param[in] query The query point\n     * \\param[out] indices The indinces of the neighbors found within the given radius\n     * \\param[out] dists The distances to the nearest neighbors found\n     * \\param[in] radius The radius used for search\n     * \\param[in] params Search parameters\n     * \\returns Number of neighbors found\n     */\n    int radiusSearch(const Matrix<ElementType>& query, Matrix<int>& indices, Matrix<DistanceType>& dists, float radius, const SearchParams& params)\n    {\n        return nnIndex_->radiusSearch(query, indices, dists, radius, params);\n    }\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        nnIndex_->findNeighbors(result, vec, searchParams);\n    }\n\n    /**\n     * \\brief Returns actual index\n     */\n    FLANN_DEPRECATED NNIndex<Distance>* getIndex()\n    {\n        return nnIndex_;\n    }\n\n    /**\n     * \\brief Returns index parameters.\n     * \\deprecated use getParameters() instead.\n     */\n    FLANN_DEPRECATED  const IndexParams* getIndexParameters()\n    {\n        return &index_params_;\n    }\n\nprivate:\n    /** Pointer to actual index class */\n    NNIndex<Distance>* nnIndex_;\n    /** Indices if the index was loaded from a file */\n    bool loaded_;\n    /** Parameters passed to the index */\n    IndexParams index_params_;\n};\n\n/**\n * Performs a hierarchical clustering of the points passed as argument and then takes a cut in the\n * the clustering tree to return a flat clustering.\n * @param[in] points Points to be clustered\n * @param centers The computed cluster centres. Matrix should be preallocated and centers.rows is the\n *  number of clusters requested.\n * @param params Clustering parameters (The same as for cvflann::KMeansIndex)\n * @param d Distance to be used for clustering (eg: cvflann::L2)\n * @return number of clusters computed (can be different than clusters.rows and is the highest number\n * of the form (branching-1)*K+1 smaller than clusters.rows).\n */\ntemplate <typename Distance>\nint hierarchicalClustering(const Matrix<typename Distance::ElementType>& points, Matrix<typename Distance::ResultType>& centers,\n                           const KMeansIndexParams& params, Distance d = Distance())\n{\n    KMeansIndex<Distance> kmeans(points, params, d);\n    kmeans.buildIndex();\n\n    int clusterNum = kmeans.getClusterCenters(centers);\n    return clusterNum;\n}\n\n}\n#endif /* OPENCV_FLANN_BASE_HPP_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/general.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_GENERAL_H_\n#define OPENCV_FLANN_GENERAL_H_\n\n#include \"defines.h\"\n#include <stdexcept>\n#include <cassert>\n\nnamespace cvflann\n{\n\nclass FLANNException : public std::runtime_error\n{\npublic:\n    FLANNException(const char* message) : std::runtime_error(message) { }\n\n    FLANNException(const std::string& message) : std::runtime_error(message) { }\n};\n\n}\n\n\n#endif  /* OPENCV_FLANN_GENERAL_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/ground_truth.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_GROUND_TRUTH_H_\n#define OPENCV_FLANN_GROUND_TRUTH_H_\n\n#include \"dist.h\"\n#include \"matrix.h\"\n\n\nnamespace cvflann\n{\n\ntemplate <typename Distance>\nvoid find_nearest(const Matrix<typename Distance::ElementType>& dataset, typename Distance::ElementType* query, int* matches, int nn,\n                  int skip = 0, Distance distance = Distance())\n{\n    typedef typename Distance::ResultType DistanceType;\n    int n = nn + skip;\n\n    std::vector<int> match(n);\n    std::vector<DistanceType> dists(n);\n\n    dists[0] = distance(dataset[0], query, dataset.cols);\n    match[0] = 0;\n    int dcnt = 1;\n\n    for (size_t i=1; i<dataset.rows; ++i) {\n        DistanceType tmp = distance(dataset[i], query, dataset.cols);\n\n        if (dcnt<n) {\n            match[dcnt] = (int)i;\n            dists[dcnt++] = tmp;\n        }\n        else if (tmp < dists[dcnt-1]) {\n            dists[dcnt-1] = tmp;\n            match[dcnt-1] = (int)i;\n        }\n\n        int j = dcnt-1;\n        // bubble up\n        while (j>=1 && dists[j]<dists[j-1]) {\n            std::swap(dists[j],dists[j-1]);\n            std::swap(match[j],match[j-1]);\n            j--;\n        }\n    }\n\n    for (int i=0; i<nn; ++i) {\n        matches[i] = match[i+skip];\n    }\n}\n\n\ntemplate <typename Distance>\nvoid compute_ground_truth(const Matrix<typename Distance::ElementType>& dataset, const Matrix<typename Distance::ElementType>& testset, Matrix<int>& matches,\n                          int skip=0, Distance d = Distance())\n{\n    for (size_t i=0; i<testset.rows; ++i) {\n        find_nearest<Distance>(dataset, testset[i], matches[i], (int)matches.cols, skip, d);\n    }\n}\n\n\n}\n\n#endif //OPENCV_FLANN_GROUND_TRUTH_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/hdf5.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_HDF5_H_\n#define OPENCV_FLANN_HDF5_H_\n\n#include <hdf5.h>\n\n#include \"matrix.h\"\n\n\nnamespace cvflann\n{\n\nnamespace\n{\n\ntemplate<typename T>\nhid_t get_hdf5_type()\n{\n    throw FLANNException(\"Unsupported type for IO operations\");\n}\n\ntemplate<>\nhid_t get_hdf5_type<char>() { return H5T_NATIVE_CHAR; }\ntemplate<>\nhid_t get_hdf5_type<unsigned char>() { return H5T_NATIVE_UCHAR; }\ntemplate<>\nhid_t get_hdf5_type<short int>() { return H5T_NATIVE_SHORT; }\ntemplate<>\nhid_t get_hdf5_type<unsigned short int>() { return H5T_NATIVE_USHORT; }\ntemplate<>\nhid_t get_hdf5_type<int>() { return H5T_NATIVE_INT; }\ntemplate<>\nhid_t get_hdf5_type<unsigned int>() { return H5T_NATIVE_UINT; }\ntemplate<>\nhid_t get_hdf5_type<long>() { return H5T_NATIVE_LONG; }\ntemplate<>\nhid_t get_hdf5_type<unsigned long>() { return H5T_NATIVE_ULONG; }\ntemplate<>\nhid_t get_hdf5_type<float>() { return H5T_NATIVE_FLOAT; }\ntemplate<>\nhid_t get_hdf5_type<double>() { return H5T_NATIVE_DOUBLE; }\n}\n\n\n#define CHECK_ERROR(x,y) if ((x)<0) throw FLANNException((y));\n\ntemplate<typename T>\nvoid save_to_file(const cvflann::Matrix<T>& dataset, const std::string& filename, const std::string& name)\n{\n\n#if H5Eset_auto_vers == 2\n    H5Eset_auto( H5E_DEFAULT, NULL, NULL );\n#else\n    H5Eset_auto( NULL, NULL );\n#endif\n\n    herr_t status;\n    hid_t file_id;\n    file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);\n    if (file_id < 0) {\n        file_id = H5Fcreate(filename.c_str(), H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);\n    }\n    CHECK_ERROR(file_id,\"Error creating hdf5 file.\");\n\n    hsize_t     dimsf[2];              // dataset dimensions\n    dimsf[0] = dataset.rows;\n    dimsf[1] = dataset.cols;\n\n    hid_t space_id = H5Screate_simple(2, dimsf, NULL);\n    hid_t memspace_id = H5Screate_simple(2, dimsf, NULL);\n\n    hid_t dataset_id;\n#if H5Dcreate_vers == 2\n    dataset_id = H5Dcreate2(file_id, name.c_str(), get_hdf5_type<T>(), space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);\n#else\n    dataset_id = H5Dcreate(file_id, name.c_str(), get_hdf5_type<T>(), space_id, H5P_DEFAULT);\n#endif\n\n    if (dataset_id<0) {\n#if H5Dopen_vers == 2\n        dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n        dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    }\n    CHECK_ERROR(dataset_id,\"Error creating or opening dataset in file.\");\n\n    status = H5Dwrite(dataset_id, get_hdf5_type<T>(), memspace_id, space_id, H5P_DEFAULT, dataset.data );\n    CHECK_ERROR(status, \"Error writing to dataset\");\n\n    H5Sclose(memspace_id);\n    H5Sclose(space_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n\n}\n\n\ntemplate<typename T>\nvoid load_from_file(cvflann::Matrix<T>& dataset, const std::string& filename, const std::string& name)\n{\n    herr_t status;\n    hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);\n    CHECK_ERROR(file_id,\"Error opening hdf5 file.\");\n\n    hid_t dataset_id;\n#if H5Dopen_vers == 2\n    dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n    dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    CHECK_ERROR(dataset_id,\"Error opening dataset in file.\");\n\n    hid_t space_id = H5Dget_space(dataset_id);\n\n    hsize_t dims_out[2];\n    H5Sget_simple_extent_dims(space_id, dims_out, NULL);\n\n    dataset = cvflann::Matrix<T>(new T[dims_out[0]*dims_out[1]], dims_out[0], dims_out[1]);\n\n    status = H5Dread(dataset_id, get_hdf5_type<T>(), H5S_ALL, H5S_ALL, H5P_DEFAULT, dataset[0]);\n    CHECK_ERROR(status, \"Error reading dataset\");\n\n    H5Sclose(space_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n}\n\n\n#ifdef HAVE_MPI\n\nnamespace mpi\n{\n/**\n * Loads a the hyperslice corresponding to this processor from a hdf5 file.\n * @param flann_dataset Dataset where the data is loaded\n * @param filename HDF5 file name\n * @param name Name of dataset inside file\n */\ntemplate<typename T>\nvoid load_from_file(cvflann::Matrix<T>& dataset, const std::string& filename, const std::string& name)\n{\n    MPI_Comm comm  = MPI_COMM_WORLD;\n    MPI_Info info  = MPI_INFO_NULL;\n\n    int mpi_size, mpi_rank;\n    MPI_Comm_size(comm, &mpi_size);\n    MPI_Comm_rank(comm, &mpi_rank);\n\n    herr_t status;\n\n    hid_t plist_id = H5Pcreate(H5P_FILE_ACCESS);\n    H5Pset_fapl_mpio(plist_id, comm, info);\n    hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, plist_id);\n    CHECK_ERROR(file_id,\"Error opening hdf5 file.\");\n    H5Pclose(plist_id);\n    hid_t dataset_id;\n#if H5Dopen_vers == 2\n    dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n    dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    CHECK_ERROR(dataset_id,\"Error opening dataset in file.\");\n\n    hid_t space_id = H5Dget_space(dataset_id);\n    hsize_t dims[2];\n    H5Sget_simple_extent_dims(space_id, dims, NULL);\n\n    hsize_t count[2];\n    hsize_t offset[2];\n\n    hsize_t item_cnt = dims[0]/mpi_size+(dims[0]%mpi_size==0 ? 0 : 1);\n    hsize_t cnt = (mpi_rank<mpi_size-1 ? item_cnt : dims[0]-item_cnt*(mpi_size-1));\n\n    count[0] = cnt;\n    count[1] = dims[1];\n    offset[0] = mpi_rank*item_cnt;\n    offset[1] = 0;\n\n    hid_t memspace_id = H5Screate_simple(2,count,NULL);\n\n    H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, NULL, count, NULL);\n\n    dataset.rows = count[0];\n    dataset.cols = count[1];\n    dataset.data = new T[dataset.rows*dataset.cols];\n\n    plist_id = H5Pcreate(H5P_DATASET_XFER);\n    H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE);\n    status = H5Dread(dataset_id, get_hdf5_type<T>(), memspace_id, space_id, plist_id, dataset.data);\n    CHECK_ERROR(status, \"Error reading dataset\");\n\n    H5Pclose(plist_id);\n    H5Sclose(space_id);\n    H5Sclose(memspace_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n}\n}\n#endif // HAVE_MPI\n} // namespace cvflann::mpi\n\n#endif /* OPENCV_FLANN_HDF5_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/heap.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_HEAP_H_\n#define OPENCV_FLANN_HEAP_H_\n\n#include <algorithm>\n#include <vector>\n\nnamespace cvflann\n{\n\n/**\n * Priority Queue Implementation\n *\n * The priority queue is implemented with a heap.  A heap is a complete\n * (full) binary tree in which each parent is less than both of its\n * children, but the order of the children is unspecified.\n */\ntemplate <typename T>\nclass Heap\n{\n\n    /**\n     * Storage array for the heap.\n     * Type T must be comparable.\n     */\n    std::vector<T> heap;\n    int length;\n\n    /**\n     * Number of element in the heap\n     */\n    int count;\n\n\n\npublic:\n    /**\n     * Constructor.\n     *\n     * Params:\n     *     sz = heap size\n     */\n\n    Heap(int sz)\n    {\n        length = sz;\n        heap.reserve(length);\n        count = 0;\n    }\n\n    /**\n     *\n     * Returns: heap size\n     */\n    int size()\n    {\n        return count;\n    }\n\n    /**\n     * Tests if the heap is empty\n     *\n     * Returns: true is heap empty, false otherwise\n     */\n    bool empty()\n    {\n        return size()==0;\n    }\n\n    /**\n     * Clears the heap.\n     */\n    void clear()\n    {\n        heap.clear();\n        count = 0;\n    }\n\n    struct CompareT\n    {\n        bool operator()(const T& t_1, const T& t_2) const\n        {\n            return t_2 < t_1;\n        }\n    };\n\n    /**\n     * Insert a new element in the heap.\n     *\n     * We select the next empty leaf node, and then keep moving any larger\n     * parents down until the right location is found to store this element.\n     *\n     * Params:\n     *     value = the new element to be inserted in the heap\n     */\n    void insert(T value)\n    {\n        /* If heap is full, then return without adding this element. */\n        if (count == length) {\n            return;\n        }\n\n        heap.push_back(value);\n        static CompareT compareT;\n        std::push_heap(heap.begin(), heap.end(), compareT);\n        ++count;\n    }\n\n\n\n    /**\n     * Returns the node of minimum value from the heap (top of the heap).\n     *\n     * Params:\n     *     value = out parameter used to return the min element\n     * Returns: false if heap empty\n     */\n    bool popMin(T& value)\n    {\n        if (count == 0) {\n            return false;\n        }\n\n        value = heap[0];\n        static CompareT compareT;\n        std::pop_heap(heap.begin(), heap.end(), compareT);\n        heap.pop_back();\n        --count;\n\n        return true;  /* Return old last node. */\n    }\n};\n\n}\n\n#endif //OPENCV_FLANN_HEAP_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/hierarchical_clustering_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_\n#define OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_\n\n#include <algorithm>\n#include <string>\n#include <map>\n#include <cassert>\n#include <limits>\n#include <cmath>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dist.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\n\nnamespace cvflann\n{\n\nstruct HierarchicalClusteringIndexParams : public IndexParams\n{\n    HierarchicalClusteringIndexParams(int branching = 32,\n                                      flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM,\n                                      int trees = 4, int leaf_size = 100)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_HIERARCHICAL;\n        // The branching factor used in the hierarchical clustering\n        (*this)[\"branching\"] = branching;\n        // Algorithm used for picking the initial cluster centers\n        (*this)[\"centers_init\"] = centers_init;\n        // number of parallel trees to build\n        (*this)[\"trees\"] = trees;\n        // maximum leaf size\n        (*this)[\"leaf_size\"] = leaf_size;\n    }\n};\n\n\n/**\n * Hierarchical index\n *\n * Contains a tree constructed through a hierarchical clustering\n * and other information for indexing a set of points for nearest-neighbour matching.\n */\ntemplate <typename Distance>\nclass HierarchicalClusteringIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\nprivate:\n\n\n    typedef void (HierarchicalClusteringIndex::* centersAlgFunction)(int, int*, int, int*, int&);\n\n    /**\n     * The function used for choosing the cluster centers.\n     */\n    centersAlgFunction chooseCenters;\n\n\n\n    /**\n     * Chooses the initial centers in the k-means clustering in a random manner.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     *     indices_length = length of indices vector\n     *\n     */\n    void chooseCentersRandom(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        UniqueRandom r(indices_length);\n\n        int index;\n        for (index=0; index<k; ++index) {\n            bool duplicate = true;\n            int rnd;\n            while (duplicate) {\n                duplicate = false;\n                rnd = r.next();\n                if (rnd<0) {\n                    centers_length = index;\n                    return;\n                }\n\n                centers[index] = dsindices[rnd];\n\n                for (int j=0; j<index; ++j) {\n                    DistanceType sq = distance(dataset[centers[index]], dataset[centers[j]], dataset.cols);\n                    if (sq<1e-16) {\n                        duplicate = true;\n                    }\n                }\n            }\n        }\n\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using Gonzales' algorithm\n     * so that the centers are spaced apart from each other.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersGonzales(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        int rnd = rand_int(n);\n        assert(rnd >=0 && rnd < n);\n\n        centers[0] = dsindices[rnd];\n\n        int index;\n        for (index=1; index<k; ++index) {\n\n            int best_index = -1;\n            DistanceType best_val = 0;\n            for (int j=0; j<n; ++j) {\n                DistanceType dist = distance(dataset[centers[0]],dataset[dsindices[j]],dataset.cols);\n                for (int i=1; i<index; ++i) {\n                    DistanceType tmp_dist = distance(dataset[centers[i]],dataset[dsindices[j]],dataset.cols);\n                    if (tmp_dist<dist) {\n                        dist = tmp_dist;\n                    }\n                }\n                if (dist>best_val) {\n                    best_val = dist;\n                    best_index = j;\n                }\n            }\n            if (best_index!=-1) {\n                centers[index] = dsindices[best_index];\n            }\n            else {\n                break;\n            }\n        }\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using the algorithm\n     * proposed in the KMeans++ paper:\n     * Arthur, David; Vassilvitskii, Sergei - k-means++: The Advantages of Careful Seeding\n     *\n     * Implementation of this function was converted from the one provided in Arthur's code.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersKMeanspp(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        double currentPot = 0;\n        DistanceType* closestDistSq = new DistanceType[n];\n\n        // Choose one random center and set the closestDistSq values\n        int index = rand_int(n);\n        assert(index >=0 && index < n);\n        centers[0] = dsindices[index];\n\n        for (int i = 0; i < n; i++) {\n            closestDistSq[i] = distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols);\n            currentPot += closestDistSq[i];\n        }\n\n\n        const int numLocalTries = 1;\n\n        // Choose each center\n        int centerCount;\n        for (centerCount = 1; centerCount < k; centerCount++) {\n\n            // Repeat several trials\n            double bestNewPot = -1;\n            int bestNewIndex = 0;\n            for (int localTrial = 0; localTrial < numLocalTries; localTrial++) {\n\n                // Choose our center - have to be slightly careful to return a valid answer even accounting\n                // for possible rounding errors\n                double randVal = rand_double(currentPot);\n                for (index = 0; index < n-1; index++) {\n                    if (randVal <= closestDistSq[index]) break;\n                    else randVal -= closestDistSq[index];\n                }\n\n                // Compute the new potential\n                double newPot = 0;\n                for (int i = 0; i < n; i++) newPot += std::min( distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols), closestDistSq[i] );\n\n                // Store the best result\n                if ((bestNewPot < 0)||(newPot < bestNewPot)) {\n                    bestNewPot = newPot;\n                    bestNewIndex = index;\n                }\n            }\n\n            // Add the appropriate center\n            centers[centerCount] = dsindices[bestNewIndex];\n            currentPot = bestNewPot;\n            for (int i = 0; i < n; i++) closestDistSq[i] = std::min( distance(dataset[dsindices[i]], dataset[dsindices[bestNewIndex]], dataset.cols), closestDistSq[i] );\n        }\n\n        centers_length = centerCount;\n\n        delete[] closestDistSq;\n    }\n\n\npublic:\n\n\n    /**\n     * Index constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the hierarchical k-means algorithm\n     */\n    HierarchicalClusteringIndex(const Matrix<ElementType>& inputData, const IndexParams& index_params = HierarchicalClusteringIndexParams(),\n                                Distance d = Distance())\n        : dataset(inputData), params(index_params), root(NULL), indices(NULL), distance(d)\n    {\n        memoryCounter = 0;\n\n        size_ = dataset.rows;\n        veclen_ = dataset.cols;\n\n        branching_ = get_param(params,\"branching\",32);\n        centers_init_ = get_param(params,\"centers_init\", FLANN_CENTERS_RANDOM);\n        trees_ = get_param(params,\"trees\",4);\n        leaf_size_ = get_param(params,\"leaf_size\",100);\n\n        if (centers_init_==FLANN_CENTERS_RANDOM) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersRandom;\n        }\n        else if (centers_init_==FLANN_CENTERS_GONZALES) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersGonzales;\n        }\n        else if (centers_init_==FLANN_CENTERS_KMEANSPP) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersKMeanspp;\n        }\n        else {\n            throw FLANNException(\"Unknown algorithm for choosing initial centers.\");\n        }\n\n        trees_ = get_param(params,\"trees\",4);\n        root = new NodePtr[trees_];\n        indices = new int*[trees_];\n\n        for (int i=0; i<trees_; ++i) {\n            root[i] = NULL;\n            indices[i] = NULL;\n        }\n    }\n\n    HierarchicalClusteringIndex(const HierarchicalClusteringIndex&);\n    HierarchicalClusteringIndex& operator=(const HierarchicalClusteringIndex&);\n\n    /**\n     * Index destructor.\n     *\n     * Release the memory used by the index.\n     */\n    virtual ~HierarchicalClusteringIndex()\n    {\n        free_elements();\n\n        if (root!=NULL) {\n            delete[] root;\n        }\n\n        if (indices!=NULL) {\n            delete[] indices;\n        }\n    }\n\n\n    /**\n     * Release the inner elements of indices[]\n     */\n    void free_elements()\n    {\n        if (indices!=NULL) {\n            for(int i=0; i<trees_; ++i) {\n                if (indices[i]!=NULL) {\n                    delete[] indices[i];\n                    indices[i] = NULL;\n                }\n            }\n        }\n    }\n\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return pool.usedMemory+pool.wastedMemory+memoryCounter;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        if (branching_<2) {\n            throw FLANNException(\"Branching factor must be at least 2\");\n        }\n\n        free_elements();\n\n        for (int i=0; i<trees_; ++i) {\n            indices[i] = new int[size_];\n            for (size_t j=0; j<size_; ++j) {\n                indices[i][j] = (int)j;\n            }\n            root[i] = pool.allocate<Node>();\n            computeClustering(root[i], indices[i], (int)size_, branching_,0);\n        }\n    }\n\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_HIERARCHICAL;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, branching_);\n        save_value(stream, trees_);\n        save_value(stream, centers_init_);\n        save_value(stream, leaf_size_);\n        save_value(stream, memoryCounter);\n        for (int i=0; i<trees_; ++i) {\n            save_value(stream, *indices[i], size_);\n            save_tree(stream, root[i], i);\n        }\n\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        free_elements();\n\n        if (root!=NULL) {\n            delete[] root;\n        }\n\n        if (indices!=NULL) {\n            delete[] indices;\n        }\n\n        load_value(stream, branching_);\n        load_value(stream, trees_);\n        load_value(stream, centers_init_);\n        load_value(stream, leaf_size_);\n        load_value(stream, memoryCounter);\n\n        indices = new int*[trees_];\n        root = new NodePtr[trees_];\n        for (int i=0; i<trees_; ++i) {\n            indices[i] = new int[size_];\n            load_value(stream, *indices[i], size_);\n            load_tree(stream, root[i], i);\n        }\n\n        params[\"algorithm\"] = getType();\n        params[\"branching\"] = branching_;\n        params[\"trees\"] = trees_;\n        params[\"centers_init\"] = centers_init_;\n        params[\"leaf_size\"] = leaf_size_;\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     searchParams = parameters that influence the search algorithm (checks)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n\n        int maxChecks = get_param(searchParams,\"checks\",32);\n\n        // Priority queue storing intermediate branches in the best-bin-first search\n        Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n\n        std::vector<bool> checked(size_,false);\n        int checks = 0;\n        for (int i=0; i<trees_; ++i) {\n            findNN(root[i], result, vec, checks, maxChecks, heap, checked);\n        }\n\n        BranchSt branch;\n        while (heap->popMin(branch) && (checks<maxChecks || !result.full())) {\n            NodePtr node = branch.node;\n            findNN(node, result, vec, checks, maxChecks, heap, checked);\n        }\n        assert(result.full());\n\n        delete heap;\n\n    }\n\n    IndexParams getParameters() const\n    {\n        return params;\n    }\n\n\nprivate:\n\n    /**\n     * Struture representing a node in the hierarchical k-means tree.\n     */\n    struct Node\n    {\n        /**\n         * The cluster center index\n         */\n        int pivot;\n        /**\n         * The cluster size (number of points in the cluster)\n         */\n        int size;\n        /**\n         * Child nodes (only for non-terminal nodes)\n         */\n        Node** childs;\n        /**\n         * Node points (only for terminal nodes)\n         */\n        int* indices;\n        /**\n         * Level\n         */\n        int level;\n    };\n    typedef Node* NodePtr;\n\n\n\n    /**\n     * Alias definition for a nicer syntax.\n     */\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n\n\n\n    void save_tree(FILE* stream, NodePtr node, int num)\n    {\n        save_value(stream, *node);\n        if (node->childs==NULL) {\n            int indices_offset = (int)(node->indices - indices[num]);\n            save_value(stream, indices_offset);\n        }\n        else {\n            for(int i=0; i<branching_; ++i) {\n                save_tree(stream, node->childs[i], num);\n            }\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& node, int num)\n    {\n        node = pool.allocate<Node>();\n        load_value(stream, *node);\n        if (node->childs==NULL) {\n            int indices_offset;\n            load_value(stream, indices_offset);\n            node->indices = indices[num] + indices_offset;\n        }\n        else {\n            node->childs = pool.allocate<NodePtr>(branching_);\n            for(int i=0; i<branching_; ++i) {\n                load_tree(stream, node->childs[i], num);\n            }\n        }\n    }\n\n\n\n\n    void computeLabels(int* dsindices, int indices_length,  int* centers, int centers_length, int* labels, DistanceType& cost)\n    {\n        cost = 0;\n        for (int i=0; i<indices_length; ++i) {\n            ElementType* point = dataset[dsindices[i]];\n            DistanceType dist = distance(point, dataset[centers[0]], veclen_);\n            labels[i] = 0;\n            for (int j=1; j<centers_length; ++j) {\n                DistanceType new_dist = distance(point, dataset[centers[j]], veclen_);\n                if (dist>new_dist) {\n                    labels[i] = j;\n                    dist = new_dist;\n                }\n            }\n            cost += dist;\n        }\n    }\n\n    /**\n     * The method responsible with actually doing the recursive hierarchical\n     * clustering\n     *\n     * Params:\n     *     node = the node to cluster\n     *     indices = indices of the points belonging to the current node\n     *     branching = the branching factor to use in the clustering\n     *\n     * TODO: for 1-sized clusters don't store a cluster center (it's the same as the single cluster point)\n     */\n    void computeClustering(NodePtr node, int* dsindices, int indices_length, int branching, int level)\n    {\n        node->size = indices_length;\n        node->level = level;\n\n        if (indices_length < leaf_size_) { // leaf node\n            node->indices = dsindices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n        std::vector<int> centers(branching);\n        std::vector<int> labels(indices_length);\n\n        int centers_length;\n        (this->*chooseCenters)(branching, dsindices, indices_length, &centers[0], centers_length);\n\n        if (centers_length<branching) {\n            node->indices = dsindices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n\n        //\tassign points to clusters\n        DistanceType cost;\n        computeLabels(dsindices, indices_length, &centers[0], centers_length, &labels[0], cost);\n\n        node->childs = pool.allocate<NodePtr>(branching);\n        int start = 0;\n        int end = start;\n        for (int i=0; i<branching; ++i) {\n            for (int j=0; j<indices_length; ++j) {\n                if (labels[j]==i) {\n                    std::swap(dsindices[j],dsindices[end]);\n                    std::swap(labels[j],labels[end]);\n                    end++;\n                }\n            }\n\n            node->childs[i] = pool.allocate<Node>();\n            node->childs[i]->pivot = centers[i];\n            node->childs[i]->indices = NULL;\n            computeClustering(node->childs[i],dsindices+start, end-start, branching, level+1);\n            start=end;\n        }\n    }\n\n\n\n    /**\n     * Performs one descent in the hierarchical k-means tree. The branches not\n     * visited are stored in a priority queue.\n     *\n     * Params:\n     *      node = node to explore\n     *      result = container for the k-nearest neighbors found\n     *      vec = query points\n     *      checks = how many points in the dataset have been checked so far\n     *      maxChecks = maximum dataset points to checks\n     */\n\n\n    void findNN(NodePtr node, ResultSet<DistanceType>& result, const ElementType* vec, int& checks, int maxChecks,\n                Heap<BranchSt>* heap, std::vector<bool>& checked)\n    {\n        if (node->childs==NULL) {\n            if (checks>=maxChecks) {\n                if (result.full()) return;\n            }\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                if (!checked[index]) {\n                    DistanceType dist = distance(dataset[index], vec, veclen_);\n                    result.addPoint(dist, index);\n                    checked[index] = true;\n                    ++checks;\n                }\n            }\n        }\n        else {\n            DistanceType* domain_distances = new DistanceType[branching_];\n            int best_index = 0;\n            domain_distances[best_index] = distance(vec, dataset[node->childs[best_index]->pivot], veclen_);\n            for (int i=1; i<branching_; ++i) {\n                domain_distances[i] = distance(vec, dataset[node->childs[i]->pivot], veclen_);\n                if (domain_distances[i]<domain_distances[best_index]) {\n                    best_index = i;\n                }\n            }\n            for (int i=0; i<branching_; ++i) {\n                if (i!=best_index) {\n                    heap->insert(BranchSt(node->childs[i],domain_distances[i]));\n                }\n            }\n            delete[] domain_distances;\n            findNN(node->childs[best_index],result,vec, checks, maxChecks, heap, checked);\n        }\n    }\n\nprivate:\n\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset;\n\n    /**\n     * Parameters used by this index\n     */\n    IndexParams params;\n\n\n    /**\n     * Number of features in the dataset.\n     */\n    size_t size_;\n\n    /**\n     * Length of each feature.\n     */\n    size_t veclen_;\n\n    /**\n     * The root node in the tree.\n     */\n    NodePtr* root;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    int** indices;\n\n\n    /**\n     * The distance\n     */\n    Distance distance;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool;\n\n    /**\n     * Memory occupied by the index.\n     */\n    int memoryCounter;\n\n    /** index parameters */\n    int branching_;\n    int trees_;\n    flann_centers_init_t centers_init_;\n    int leaf_size_;\n\n\n};\n\n}\n\n#endif /* OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/index_testing.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_INDEX_TESTING_H_\n#define OPENCV_FLANN_INDEX_TESTING_H_\n\n#include <cstring>\n#include <cassert>\n#include <cmath>\n\n#include \"matrix.h\"\n#include \"nn_index.h\"\n#include \"result_set.h\"\n#include \"logger.h\"\n#include \"timer.h\"\n\n\nnamespace cvflann\n{\n\ninline int countCorrectMatches(int* neighbors, int* groundTruth, int n)\n{\n    int count = 0;\n    for (int i=0; i<n; ++i) {\n        for (int k=0; k<n; ++k) {\n            if (neighbors[i]==groundTruth[k]) {\n                count++;\n                break;\n            }\n        }\n    }\n    return count;\n}\n\n\ntemplate <typename Distance>\ntypename Distance::ResultType computeDistanceRaport(const Matrix<typename Distance::ElementType>& inputData, typename Distance::ElementType* target,\n                                                    int* neighbors, int* groundTruth, int veclen, int n, const Distance& distance)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    DistanceType ret = 0;\n    for (int i=0; i<n; ++i) {\n        DistanceType den = distance(inputData[groundTruth[i]], target, veclen);\n        DistanceType num = distance(inputData[neighbors[i]], target, veclen);\n\n        if ((den==0)&&(num==0)) {\n            ret += 1;\n        }\n        else {\n            ret += num/den;\n        }\n    }\n\n    return ret;\n}\n\ntemplate <typename Distance>\nfloat search_with_ground_truth(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                               const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches, int nn, int checks,\n                               float& time, typename Distance::ResultType& dist, const Distance& distance, int skipMatches)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    if (matches.cols<size_t(nn)) {\n        Logger::info(\"matches.cols=%d, nn=%d\\n\",matches.cols,nn);\n\n        throw FLANNException(\"Ground truth is not computed for as many neighbors as requested\");\n    }\n\n    KNNResultSet<DistanceType> resultSet(nn+skipMatches);\n    SearchParams searchParams(checks);\n\n    std::vector<int> indices(nn+skipMatches);\n    std::vector<DistanceType> dists(nn+skipMatches);\n    int* neighbors = &indices[skipMatches];\n\n    int correct = 0;\n    DistanceType distR = 0;\n    StartStopTimer t;\n    int repeats = 0;\n    while (t.value<0.2) {\n        repeats++;\n        t.start();\n        correct = 0;\n        distR = 0;\n        for (size_t i = 0; i < testData.rows; i++) {\n            resultSet.init(&indices[0], &dists[0]);\n            index.findNeighbors(resultSet, testData[i], searchParams);\n\n            correct += countCorrectMatches(neighbors,matches[i], nn);\n            distR += computeDistanceRaport<Distance>(inputData, testData[i], neighbors, matches[i], (int)testData.cols, nn, distance);\n        }\n        t.stop();\n    }\n    time = float(t.value/repeats);\n\n    float precicion = (float)correct/(nn*testData.rows);\n\n    dist = distR/(testData.rows*nn);\n\n    Logger::info(\"%8d %10.4g %10.5g %10.5g %10.5g\\n\",\n                 checks, precicion, time, 1000.0 * time / testData.rows, dist);\n\n    return precicion;\n}\n\n\ntemplate <typename Distance>\nfloat test_index_checks(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                        const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                        int checks, float& precision, const Distance& distance, int nn = 1, int skipMatches = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    float time = 0;\n    DistanceType dist = 0;\n    precision = search_with_ground_truth(index, inputData, testData, matches, nn, checks, time, dist, distance, skipMatches);\n\n    return time;\n}\n\ntemplate <typename Distance>\nfloat test_index_precision(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                           const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                           float precision, int& checks, const Distance& distance, int nn = 1, int skipMatches = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n    const float SEARCH_EPS = 0.001f;\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    int c2 = 1;\n    float p2;\n    int c1 = 1;\n    //float p1;\n    float time;\n    DistanceType dist;\n\n    p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n\n    if (p2>precision) {\n        Logger::info(\"Got as close as I can\\n\");\n        checks = c2;\n        return time;\n    }\n\n    while (p2<precision) {\n        c1 = c2;\n        //p1 = p2;\n        c2 *=2;\n        p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n    }\n\n    int cx;\n    float realPrecision;\n    if (fabs(p2-precision)>SEARCH_EPS) {\n        Logger::info(\"Start linear estimation\\n\");\n        // after we got to values in the vecinity of the desired precision\n        // use linear approximation get a better estimation\n\n        cx = (c1+c2)/2;\n        realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n        while (fabs(realPrecision-precision)>SEARCH_EPS) {\n\n            if (realPrecision<precision) {\n                c1 = cx;\n            }\n            else {\n                c2 = cx;\n            }\n            cx = (c1+c2)/2;\n            if (cx==c1) {\n                Logger::info(\"Got as close as I can\\n\");\n                break;\n            }\n            realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n        }\n\n        c2 = cx;\n        p2 = realPrecision;\n\n    }\n    else {\n        Logger::info(\"No need for linear estimation\\n\");\n        cx = c2;\n        realPrecision = p2;\n    }\n\n    checks = cx;\n    return time;\n}\n\n\ntemplate <typename Distance>\nvoid test_index_precisions(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                           const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                           float* precisions, int precisions_length, const Distance& distance, int nn = 1, int skipMatches = 0, float maxTime = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    const float SEARCH_EPS = 0.001;\n\n    // make sure precisions array is sorted\n    std::sort(precisions, precisions+precisions_length);\n\n    int pindex = 0;\n    float precision = precisions[pindex];\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    int c2 = 1;\n    float p2;\n\n    int c1 = 1;\n    float p1;\n\n    float time;\n    DistanceType dist;\n\n    p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n\n    // if precision for 1 run down the tree is already\n    // better then some of the requested precisions, then\n    // skip those\n    while (precisions[pindex]<p2 && pindex<precisions_length) {\n        pindex++;\n    }\n\n    if (pindex==precisions_length) {\n        Logger::info(\"Got as close as I can\\n\");\n        return;\n    }\n\n    for (int i=pindex; i<precisions_length; ++i) {\n\n        precision = precisions[i];\n        while (p2<precision) {\n            c1 = c2;\n            p1 = p2;\n            c2 *=2;\n            p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n            if ((maxTime> 0)&&(time > maxTime)&&(p2<precision)) return;\n        }\n\n        int cx;\n        float realPrecision;\n        if (fabs(p2-precision)>SEARCH_EPS) {\n            Logger::info(\"Start linear estimation\\n\");\n            // after we got to values in the vecinity of the desired precision\n            // use linear approximation get a better estimation\n\n            cx = (c1+c2)/2;\n            realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n            while (fabs(realPrecision-precision)>SEARCH_EPS) {\n\n                if (realPrecision<precision) {\n                    c1 = cx;\n                }\n                else {\n                    c2 = cx;\n                }\n                cx = (c1+c2)/2;\n                if (cx==c1) {\n                    Logger::info(\"Got as close as I can\\n\");\n                    break;\n                }\n                realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n            }\n\n            c2 = cx;\n            p2 = realPrecision;\n\n        }\n        else {\n            Logger::info(\"No need for linear estimation\\n\");\n            cx = c2;\n            realPrecision = p2;\n        }\n\n    }\n}\n\n}\n\n#endif //OPENCV_FLANN_INDEX_TESTING_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/kdtree_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KDTREE_INDEX_H_\n#define OPENCV_FLANN_KDTREE_INDEX_H_\n\n#include <algorithm>\n#include <map>\n#include <cassert>\n#include <cstring>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dynamic_bitset.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\n\nnamespace cvflann\n{\n\nstruct KDTreeIndexParams : public IndexParams\n{\n    KDTreeIndexParams(int trees = 4)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KDTREE;\n        (*this)[\"trees\"] = trees;\n    }\n};\n\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate <typename Distance>\nclass KDTreeIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    /**\n     * KDTree constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the kdtree algorithm\n     */\n    KDTreeIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KDTreeIndexParams(),\n                Distance d = Distance() ) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n        size_ = dataset_.rows;\n        veclen_ = dataset_.cols;\n\n        trees_ = get_param(index_params_,\"trees\",4);\n        tree_roots_ = new NodePtr[trees_];\n\n        // Create a permutable array of indices to the input vectors.\n        vind_.resize(size_);\n        for (size_t i = 0; i < size_; ++i) {\n            vind_[i] = int(i);\n        }\n\n        mean_ = new DistanceType[veclen_];\n        var_ = new DistanceType[veclen_];\n    }\n\n\n    KDTreeIndex(const KDTreeIndex&);\n    KDTreeIndex& operator=(const KDTreeIndex&);\n\n    /**\n     * Standard destructor\n     */\n    ~KDTreeIndex()\n    {\n        if (tree_roots_!=NULL) {\n            delete[] tree_roots_;\n        }\n        delete[] mean_;\n        delete[] var_;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        /* Construct the randomized trees. */\n        for (int i = 0; i < trees_; i++) {\n            /* Randomize the order of vectors to allow for unbiased sampling. */\n            std::random_shuffle(vind_.begin(), vind_.end());\n            tree_roots_[i] = divideTree(&vind_[0], int(size_) );\n        }\n    }\n\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KDTREE;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, trees_);\n        for (int i=0; i<trees_; ++i) {\n            save_tree(stream, tree_roots_[i]);\n        }\n    }\n\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, trees_);\n        if (tree_roots_!=NULL) {\n            delete[] tree_roots_;\n        }\n        tree_roots_ = new NodePtr[trees_];\n        for (int i=0; i<trees_; ++i) {\n            load_tree(stream,tree_roots_[i]);\n        }\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"trees\"] = tree_roots_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return int(pool_.usedMemory+pool_.wastedMemory+dataset_.rows*sizeof(int));  // pool memory and vind array memory\n    }\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        int maxChecks = get_param(searchParams,\"checks\", 32);\n        float epsError = 1+get_param(searchParams,\"eps\",0.0f);\n\n        if (maxChecks==FLANN_CHECKS_UNLIMITED) {\n            getExactNeighbors(result, vec, epsError);\n        }\n        else {\n            getNeighbors(result, vec, maxChecks, epsError);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\nprivate:\n\n\n    /*--------------------- Internal Data Structures --------------------------*/\n    struct Node\n    {\n        /**\n         * Dimension used for subdivision.\n         */\n        int divfeat;\n        /**\n         * The values used for subdivision.\n         */\n        DistanceType divval;\n        /**\n         * The child nodes.\n         */\n        Node* child1, * child2;\n    };\n    typedef Node* NodePtr;\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n    typedef BranchSt* Branch;\n\n\n\n    void save_tree(FILE* stream, NodePtr tree)\n    {\n        save_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            save_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            save_tree(stream, tree->child2);\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& tree)\n    {\n        tree = pool_.allocate<Node>();\n        load_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            load_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            load_tree(stream, tree->child2);\n        }\n    }\n\n\n    /**\n     * Create a tree node that subdivides the list of vecs from vind[first]\n     * to vind[last].  The routine is called recursively on each sublist.\n     * Place a pointer to this new tree node in the location pTree.\n     *\n     * Params: pTree = the new node to create\n     *                  first = index of the first vector\n     *                  last = index of the last vector\n     */\n    NodePtr divideTree(int* ind, int count)\n    {\n        NodePtr node = pool_.allocate<Node>(); // allocate memory\n\n        /* If too few exemplars remain, then make this a leaf node. */\n        if ( count == 1) {\n            node->child1 = node->child2 = NULL;    /* Mark as leaf node. */\n            node->divfeat = *ind;    /* Store index of this vec. */\n        }\n        else {\n            int idx;\n            int cutfeat;\n            DistanceType cutval;\n            meanSplit(ind, count, idx, cutfeat, cutval);\n\n            node->divfeat = cutfeat;\n            node->divval = cutval;\n            node->child1 = divideTree(ind, idx);\n            node->child2 = divideTree(ind+idx, count-idx);\n        }\n\n        return node;\n    }\n\n\n    /**\n     * Choose which feature to use in order to subdivide this set of vectors.\n     * Make a random choice among those with the highest variance, and use\n     * its variance as the threshold value.\n     */\n    void meanSplit(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval)\n    {\n        memset(mean_,0,veclen_*sizeof(DistanceType));\n        memset(var_,0,veclen_*sizeof(DistanceType));\n\n        /* Compute mean values.  Only the first SAMPLE_MEAN values need to be\n            sampled to get a good estimate.\n         */\n        int cnt = std::min((int)SAMPLE_MEAN+1, count);\n        for (int j = 0; j < cnt; ++j) {\n            ElementType* v = dataset_[ind[j]];\n            for (size_t k=0; k<veclen_; ++k) {\n                mean_[k] += v[k];\n            }\n        }\n        for (size_t k=0; k<veclen_; ++k) {\n            mean_[k] /= cnt;\n        }\n\n        /* Compute variances (no need to divide by count). */\n        for (int j = 0; j < cnt; ++j) {\n            ElementType* v = dataset_[ind[j]];\n            for (size_t k=0; k<veclen_; ++k) {\n                DistanceType dist = v[k] - mean_[k];\n                var_[k] += dist * dist;\n            }\n        }\n        /* Select one of the highest variance indices at random. */\n        cutfeat = selectDivision(var_);\n        cutval = mean_[cutfeat];\n\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n\n        /* If either list is empty, it means that all remaining features\n         * are identical. Split in the middle to maintain a balanced tree.\n         */\n        if ((lim1==count)||(lim2==0)) index = count/2;\n    }\n\n\n    /**\n     * Select the top RAND_DIM largest values from v and return the index of\n     * one of these selected at random.\n     */\n    int selectDivision(DistanceType* v)\n    {\n        int num = 0;\n        size_t topind[RAND_DIM];\n\n        /* Create a list of the indices of the top RAND_DIM values. */\n        for (size_t i = 0; i < veclen_; ++i) {\n            if ((num < RAND_DIM)||(v[i] > v[topind[num-1]])) {\n                /* Put this element at end of topind. */\n                if (num < RAND_DIM) {\n                    topind[num++] = i;            /* Add to list. */\n                }\n                else {\n                    topind[num-1] = i;         /* Replace last element. */\n                }\n                /* Bubble end value down to right location by repeated swapping. */\n                int j = num - 1;\n                while (j > 0  &&  v[topind[j]] > v[topind[j-1]]) {\n                    std::swap(topind[j], topind[j-1]);\n                    --j;\n                }\n            }\n        }\n        /* Select a random integer in range [0,num-1], and return that index. */\n        int rnd = rand_int(num);\n        return (int)topind[rnd];\n    }\n\n\n    /**\n     *  Subdivide the list of points by a plane perpendicular on axe corresponding\n     *  to the 'cutfeat' dimension at 'cutval' position.\n     *\n     *  On return:\n     *  dataset[ind[0..lim1-1]][cutfeat]<cutval\n     *  dataset[ind[lim1..lim2-1]][cutfeat]==cutval\n     *  dataset[ind[lim2..count]][cutfeat]>cutval\n     */\n    void planeSplit(int* ind, int count, int cutfeat, DistanceType cutval, int& lim1, int& lim2)\n    {\n        /* Move vector indices for left subtree to front of list. */\n        int left = 0;\n        int right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>=cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim1 = left;\n        right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<=cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim2 = left;\n    }\n\n    /**\n     * Performs an exact nearest neighbor search. The exact search performs a full\n     * traversal of the tree.\n     */\n    void getExactNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, float epsError)\n    {\n        //\t\tcheckID -= 1;  /* Set a different unique ID for each search. */\n\n        if (trees_ > 1) {\n            fprintf(stderr,\"It doesn't make any sense to use more than one tree for exact search\");\n        }\n        if (trees_>0) {\n            searchLevelExact(result, vec, tree_roots_[0], 0.0, epsError);\n        }\n        assert(result.full());\n    }\n\n    /**\n     * Performs the approximate nearest-neighbor search. The search is approximate\n     * because the tree traversal is abandoned after a given number of descends in\n     * the tree.\n     */\n    void getNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, int maxCheck, float epsError)\n    {\n        int i;\n        BranchSt branch;\n\n        int checkCount = 0;\n        Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n        DynamicBitset checked(size_);\n\n        /* Search once through each tree down to root. */\n        for (i = 0; i < trees_; ++i) {\n            searchLevel(result, vec, tree_roots_[i], 0, checkCount, maxCheck, epsError, heap, checked);\n        }\n\n        /* Keep searching other branches from heap until finished. */\n        while ( heap->popMin(branch) && (checkCount < maxCheck || !result.full() )) {\n            searchLevel(result, vec, branch.node, branch.mindist, checkCount, maxCheck, epsError, heap, checked);\n        }\n\n        delete heap;\n\n        assert(result.full());\n    }\n\n\n    /**\n     *  Search starting from a given node of the tree.  Based on any mismatches at\n     *  higher levels, all exemplars below this level must have a distance of\n     *  at least \"mindistsq\".\n     */\n    void searchLevel(ResultSet<DistanceType>& result_set, const ElementType* vec, NodePtr node, DistanceType mindist, int& checkCount, int maxCheck,\n                     float epsError, Heap<BranchSt>* heap, DynamicBitset& checked)\n    {\n        if (result_set.worstDist()<mindist) {\n            //\t\t\tprintf(\"Ignoring branch, too far\\n\");\n            return;\n        }\n\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            /*  Do not check same node more than once when searching multiple trees.\n                Once a vector is checked, we set its location in vind to the\n                current checkID.\n             */\n            int index = node->divfeat;\n            if ( checked.test(index) || ((checkCount>=maxCheck)&& result_set.full()) ) return;\n            checked.set(index);\n            checkCount++;\n\n            DistanceType dist = distance_(dataset_[index], vec, veclen_);\n            result_set.addPoint(dist,index);\n\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        ElementType val = vec[node->divfeat];\n        DistanceType diff = val - node->divval;\n        NodePtr bestChild = (diff < 0) ? node->child1 : node->child2;\n        NodePtr otherChild = (diff < 0) ? node->child2 : node->child1;\n\n        /* Create a branch record for the branch not taken.  Add distance\n            of this feature boundary (we don't attempt to correct for any\n            use of this feature in a parent node, which is unlikely to\n            happen and would have only a small effect).  Don't bother\n            adding more branches to heap after halfway point, as cost of\n            adding exceeds their value.\n         */\n\n        DistanceType new_distsq = mindist + distance_.accum_dist(val, node->divval, node->divfeat);\n        //\t\tif (2 * checkCount < maxCheck  ||  !result.full()) {\n        if ((new_distsq*epsError < result_set.worstDist())||  !result_set.full()) {\n            heap->insert( BranchSt(otherChild, new_distsq) );\n        }\n\n        /* Call recursively to search next level down. */\n        searchLevel(result_set, vec, bestChild, mindist, checkCount, maxCheck, epsError, heap, checked);\n    }\n\n    /**\n     * Performs an exact search in the tree starting from a node.\n     */\n    void searchLevelExact(ResultSet<DistanceType>& result_set, const ElementType* vec, const NodePtr node, DistanceType mindist, const float epsError)\n    {\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            int index = node->divfeat;\n            DistanceType dist = distance_(dataset_[index], vec, veclen_);\n            result_set.addPoint(dist,index);\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        ElementType val = vec[node->divfeat];\n        DistanceType diff = val - node->divval;\n        NodePtr bestChild = (diff < 0) ? node->child1 : node->child2;\n        NodePtr otherChild = (diff < 0) ? node->child2 : node->child1;\n\n        /* Create a branch record for the branch not taken.  Add distance\n            of this feature boundary (we don't attempt to correct for any\n            use of this feature in a parent node, which is unlikely to\n            happen and would have only a small effect).  Don't bother\n            adding more branches to heap after halfway point, as cost of\n            adding exceeds their value.\n         */\n\n        DistanceType new_distsq = mindist + distance_.accum_dist(val, node->divval, node->divfeat);\n\n        /* Call recursively to search next level down. */\n        searchLevelExact(result_set, vec, bestChild, mindist, epsError);\n\n        if (new_distsq*epsError<=result_set.worstDist()) {\n            searchLevelExact(result_set, vec, otherChild, new_distsq, epsError);\n        }\n    }\n\n\nprivate:\n\n    enum\n    {\n        /**\n         * To improve efficiency, only SAMPLE_MEAN random values are used to\n         * compute the mean and variance at each level when building a tree.\n         * A value of 100 seems to perform as well as using all values.\n         */\n        SAMPLE_MEAN = 100,\n        /**\n         * Top random dimensions to consider\n         *\n         * When creating random trees, the dimension on which to subdivide is\n         * selected at random from among the top RAND_DIM dimensions with the\n         * highest variance.  A value of 5 works well.\n         */\n        RAND_DIM=5\n    };\n\n\n    /**\n     * Number of randomized trees that are used\n     */\n    int trees_;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    std::vector<int> vind_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    IndexParams index_params_;\n\n    size_t size_;\n    size_t veclen_;\n\n\n    DistanceType* mean_;\n    DistanceType* var_;\n\n\n    /**\n     * Array of k-d trees used to find neighbours.\n     */\n    NodePtr* tree_roots_;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool_;\n\n    Distance distance_;\n\n\n};   // class KDTreeForest\n\n}\n\n#endif //OPENCV_FLANN_KDTREE_INDEX_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/kdtree_single_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n#define OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n\n#include <algorithm>\n#include <map>\n#include <cassert>\n#include <cstring>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\nnamespace cvflann\n{\n\nstruct KDTreeSingleIndexParams : public IndexParams\n{\n    KDTreeSingleIndexParams(int leaf_max_size = 10, bool reorder = true, int dim = -1)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KDTREE_SINGLE;\n        (*this)[\"leaf_max_size\"] = leaf_max_size;\n        (*this)[\"reorder\"] = reorder;\n        (*this)[\"dim\"] = dim;\n    }\n};\n\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate <typename Distance>\nclass KDTreeSingleIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    /**\n     * KDTree constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the kdtree algorithm\n     */\n    KDTreeSingleIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KDTreeSingleIndexParams(),\n                      Distance d = Distance() ) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n        size_ = dataset_.rows;\n        dim_ = dataset_.cols;\n        int dim_param = get_param(params,\"dim\",-1);\n        if (dim_param>0) dim_ = dim_param;\n        leaf_max_size_ = get_param(params,\"leaf_max_size\",10);\n        reorder_ = get_param(params,\"reorder\",true);\n\n        // Create a permutable array of indices to the input vectors.\n        vind_.resize(size_);\n        for (size_t i = 0; i < size_; i++) {\n            vind_[i] = (int)i;\n        }\n    }\n\n    KDTreeSingleIndex(const KDTreeSingleIndex&);\n    KDTreeSingleIndex& operator=(const KDTreeSingleIndex&);\n\n    /**\n     * Standard destructor\n     */\n    ~KDTreeSingleIndex()\n    {\n        if (reorder_) delete[] data_.data;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        computeBoundingBox(root_bbox_);\n        root_node_ = divideTree(0, (int)size_, root_bbox_ );   // construct the tree\n\n        if (reorder_) {\n            delete[] data_.data;\n            data_ = cvflann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);\n            for (size_t i=0; i<size_; ++i) {\n                for (size_t j=0; j<dim_; ++j) {\n                    data_[i][j] = dataset_[vind_[i]][j];\n                }\n            }\n        }\n        else {\n            data_ = dataset_;\n        }\n    }\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KDTREE_SINGLE;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, size_);\n        save_value(stream, dim_);\n        save_value(stream, root_bbox_);\n        save_value(stream, reorder_);\n        save_value(stream, leaf_max_size_);\n        save_value(stream, vind_);\n        if (reorder_) {\n            save_value(stream, data_);\n        }\n        save_tree(stream, root_node_);\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, size_);\n        load_value(stream, dim_);\n        load_value(stream, root_bbox_);\n        load_value(stream, reorder_);\n        load_value(stream, leaf_max_size_);\n        load_value(stream, vind_);\n        if (reorder_) {\n            load_value(stream, data_);\n        }\n        else {\n            data_ = dataset_;\n        }\n        load_tree(stream, root_node_);\n\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"leaf_max_size\"] = leaf_max_size_;\n        index_params_[\"reorder\"] = reorder_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return dim_;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return (int)(pool_.usedMemory+pool_.wastedMemory+dataset_.rows*sizeof(int));  // pool memory and vind array memory\n    }\n\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n        KNNSimpleResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.init(indices[i], dists[i]);\n            findNeighbors(resultSet, queries[i], params);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        float epsError = 1+get_param(searchParams,\"eps\",0.0f);\n\n        std::vector<DistanceType> dists(dim_,0);\n        DistanceType distsq = computeInitialDistances(vec, dists);\n        searchLevel(result, vec, root_node_, distsq, dists, epsError);\n    }\n\nprivate:\n\n\n    /*--------------------- Internal Data Structures --------------------------*/\n    struct Node\n    {\n        /**\n         * Indices of points in leaf node\n         */\n        int left, right;\n        /**\n         * Dimension used for subdivision.\n         */\n        int divfeat;\n        /**\n         * The values used for subdivision.\n         */\n        DistanceType divlow, divhigh;\n        /**\n         * The child nodes.\n         */\n        Node* child1, * child2;\n    };\n    typedef Node* NodePtr;\n\n\n    struct Interval\n    {\n        DistanceType low, high;\n    };\n\n    typedef std::vector<Interval> BoundingBox;\n\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n    typedef BranchSt* Branch;\n\n\n\n\n    void save_tree(FILE* stream, NodePtr tree)\n    {\n        save_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            save_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            save_tree(stream, tree->child2);\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& tree)\n    {\n        tree = pool_.allocate<Node>();\n        load_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            load_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            load_tree(stream, tree->child2);\n        }\n    }\n\n\n    void computeBoundingBox(BoundingBox& bbox)\n    {\n        bbox.resize(dim_);\n        for (size_t i=0; i<dim_; ++i) {\n            bbox[i].low = (DistanceType)dataset_[0][i];\n            bbox[i].high = (DistanceType)dataset_[0][i];\n        }\n        for (size_t k=1; k<dataset_.rows; ++k) {\n            for (size_t i=0; i<dim_; ++i) {\n                if (dataset_[k][i]<bbox[i].low) bbox[i].low = (DistanceType)dataset_[k][i];\n                if (dataset_[k][i]>bbox[i].high) bbox[i].high = (DistanceType)dataset_[k][i];\n            }\n        }\n    }\n\n\n    /**\n     * Create a tree node that subdivides the list of vecs from vind[first]\n     * to vind[last].  The routine is called recursively on each sublist.\n     * Place a pointer to this new tree node in the location pTree.\n     *\n     * Params: pTree = the new node to create\n     *                  first = index of the first vector\n     *                  last = index of the last vector\n     */\n    NodePtr divideTree(int left, int right, BoundingBox& bbox)\n    {\n        NodePtr node = pool_.allocate<Node>(); // allocate memory\n\n        /* If too few exemplars remain, then make this a leaf node. */\n        if ( (right-left) <= leaf_max_size_) {\n            node->child1 = node->child2 = NULL;    /* Mark as leaf node. */\n            node->left = left;\n            node->right = right;\n\n            // compute bounding-box of leaf points\n            for (size_t i=0; i<dim_; ++i) {\n                bbox[i].low = (DistanceType)dataset_[vind_[left]][i];\n                bbox[i].high = (DistanceType)dataset_[vind_[left]][i];\n            }\n            for (int k=left+1; k<right; ++k) {\n                for (size_t i=0; i<dim_; ++i) {\n                    if (bbox[i].low>dataset_[vind_[k]][i]) bbox[i].low=(DistanceType)dataset_[vind_[k]][i];\n                    if (bbox[i].high<dataset_[vind_[k]][i]) bbox[i].high=(DistanceType)dataset_[vind_[k]][i];\n                }\n            }\n        }\n        else {\n            int idx;\n            int cutfeat;\n            DistanceType cutval;\n            middleSplit_(&vind_[0]+left, right-left, idx, cutfeat, cutval, bbox);\n\n            node->divfeat = cutfeat;\n\n            BoundingBox left_bbox(bbox);\n            left_bbox[cutfeat].high = cutval;\n            node->child1 = divideTree(left, left+idx, left_bbox);\n\n            BoundingBox right_bbox(bbox);\n            right_bbox[cutfeat].low = cutval;\n            node->child2 = divideTree(left+idx, right, right_bbox);\n\n            node->divlow = left_bbox[cutfeat].high;\n            node->divhigh = right_bbox[cutfeat].low;\n\n            for (size_t i=0; i<dim_; ++i) {\n                bbox[i].low = std::min(left_bbox[i].low, right_bbox[i].low);\n                bbox[i].high = std::max(left_bbox[i].high, right_bbox[i].high);\n            }\n        }\n\n        return node;\n    }\n\n    void computeMinMax(int* ind, int count, int dim, ElementType& min_elem, ElementType& max_elem)\n    {\n        min_elem = dataset_[ind[0]][dim];\n        max_elem = dataset_[ind[0]][dim];\n        for (int i=1; i<count; ++i) {\n            ElementType val = dataset_[ind[i]][dim];\n            if (val<min_elem) min_elem = val;\n            if (val>max_elem) max_elem = val;\n        }\n    }\n\n    void middleSplit(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval, const BoundingBox& bbox)\n    {\n        // find the largest span from the approximate bounding box\n        ElementType max_span = bbox[0].high-bbox[0].low;\n        cutfeat = 0;\n        cutval = (bbox[0].high+bbox[0].low)/2;\n        for (size_t i=1; i<dim_; ++i) {\n            ElementType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                max_span = span;\n                cutfeat = i;\n                cutval = (bbox[i].high+bbox[i].low)/2;\n            }\n        }\n\n        // compute exact span on the found dimension\n        ElementType min_elem, max_elem;\n        computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n        cutval = (min_elem+max_elem)/2;\n        max_span = max_elem - min_elem;\n\n        // check if a dimension of a largest span exists\n        size_t k = cutfeat;\n        for (size_t i=0; i<dim_; ++i) {\n            if (i==k) continue;\n            ElementType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                computeMinMax(ind, count, i, min_elem, max_elem);\n                span = max_elem - min_elem;\n                if (span>max_span) {\n                    max_span = span;\n                    cutfeat = i;\n                    cutval = (min_elem+max_elem)/2;\n                }\n            }\n        }\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n    }\n\n\n    void middleSplit_(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval, const BoundingBox& bbox)\n    {\n        const float EPS=0.00001f;\n        DistanceType max_span = bbox[0].high-bbox[0].low;\n        for (size_t i=1; i<dim_; ++i) {\n            DistanceType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                max_span = span;\n            }\n        }\n        DistanceType max_spread = -1;\n        cutfeat = 0;\n        for (size_t i=0; i<dim_; ++i) {\n            DistanceType span = bbox[i].high-bbox[i].low;\n            if (span>(DistanceType)((1-EPS)*max_span)) {\n                ElementType min_elem, max_elem;\n                computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n                DistanceType spread = (DistanceType)(max_elem-min_elem);\n                if (spread>max_spread) {\n                    cutfeat = (int)i;\n                    max_spread = spread;\n                }\n            }\n        }\n        // split in the middle\n        DistanceType split_val = (bbox[cutfeat].low+bbox[cutfeat].high)/2;\n        ElementType min_elem, max_elem;\n        computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n\n        if (split_val<min_elem) cutval = (DistanceType)min_elem;\n        else if (split_val>max_elem) cutval = (DistanceType)max_elem;\n        else cutval = split_val;\n\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n    }\n\n\n    /**\n     *  Subdivide the list of points by a plane perpendicular on axe corresponding\n     *  to the 'cutfeat' dimension at 'cutval' position.\n     *\n     *  On return:\n     *  dataset[ind[0..lim1-1]][cutfeat]<cutval\n     *  dataset[ind[lim1..lim2-1]][cutfeat]==cutval\n     *  dataset[ind[lim2..count]][cutfeat]>cutval\n     */\n    void planeSplit(int* ind, int count, int cutfeat, DistanceType cutval, int& lim1, int& lim2)\n    {\n        /* Move vector indices for left subtree to front of list. */\n        int left = 0;\n        int right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>=cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        /* If either list is empty, it means that all remaining features\n         * are identical. Split in the middle to maintain a balanced tree.\n         */\n        lim1 = left;\n        right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<=cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim2 = left;\n    }\n\n    DistanceType computeInitialDistances(const ElementType* vec, std::vector<DistanceType>& dists)\n    {\n        DistanceType distsq = 0.0;\n\n        for (size_t i = 0; i < dim_; ++i) {\n            if (vec[i] < root_bbox_[i].low) {\n                dists[i] = distance_.accum_dist(vec[i], root_bbox_[i].low, (int)i);\n                distsq += dists[i];\n            }\n            if (vec[i] > root_bbox_[i].high) {\n                dists[i] = distance_.accum_dist(vec[i], root_bbox_[i].high, (int)i);\n                distsq += dists[i];\n            }\n        }\n\n        return distsq;\n    }\n\n    /**\n     * Performs an exact search in the tree starting from a node.\n     */\n    void searchLevel(ResultSet<DistanceType>& result_set, const ElementType* vec, const NodePtr node, DistanceType mindistsq,\n                     std::vector<DistanceType>& dists, const float epsError)\n    {\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            DistanceType worst_dist = result_set.worstDist();\n            for (int i=node->left; i<node->right; ++i) {\n                int index = reorder_ ? i : vind_[i];\n                DistanceType dist = distance_(vec, data_[index], dim_, worst_dist);\n                if (dist<worst_dist) {\n                    result_set.addPoint(dist,vind_[i]);\n                }\n            }\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        int idx = node->divfeat;\n        ElementType val = vec[idx];\n        DistanceType diff1 = val - node->divlow;\n        DistanceType diff2 = val - node->divhigh;\n\n        NodePtr bestChild;\n        NodePtr otherChild;\n        DistanceType cut_dist;\n        if ((diff1+diff2)<0) {\n            bestChild = node->child1;\n            otherChild = node->child2;\n            cut_dist = distance_.accum_dist(val, node->divhigh, idx);\n        }\n        else {\n            bestChild = node->child2;\n            otherChild = node->child1;\n            cut_dist = distance_.accum_dist( val, node->divlow, idx);\n        }\n\n        /* Call recursively to search next level down. */\n        searchLevel(result_set, vec, bestChild, mindistsq, dists, epsError);\n\n        DistanceType dst = dists[idx];\n        mindistsq = mindistsq + cut_dist - dst;\n        dists[idx] = cut_dist;\n        if (mindistsq*epsError<=result_set.worstDist()) {\n            searchLevel(result_set, vec, otherChild, mindistsq, dists, epsError);\n        }\n        dists[idx] = dst;\n    }\n\nprivate:\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    IndexParams index_params_;\n\n    int leaf_max_size_;\n    bool reorder_;\n\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    std::vector<int> vind_;\n\n    Matrix<ElementType> data_;\n\n    size_t size_;\n    size_t dim_;\n\n    /**\n     * Array of k-d trees used to find neighbours.\n     */\n    NodePtr root_node_;\n\n    BoundingBox root_bbox_;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool_;\n\n    Distance distance_;\n};   // class KDTree\n\n}\n\n#endif //OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/kmeans_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KMEANS_INDEX_H_\n#define OPENCV_FLANN_KMEANS_INDEX_H_\n\n#include <algorithm>\n#include <string>\n#include <map>\n#include <cassert>\n#include <limits>\n#include <cmath>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dist.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n#include \"logger.h\"\n\n\nnamespace cvflann\n{\n\nstruct KMeansIndexParams : public IndexParams\n{\n    KMeansIndexParams(int branching = 32, int iterations = 11,\n                      flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, float cb_index = 0.2 )\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KMEANS;\n        // branching factor\n        (*this)[\"branching\"] = branching;\n        // max iterations to perform in one kmeans clustering (kmeans tree)\n        (*this)[\"iterations\"] = iterations;\n        // algorithm used for picking the initial cluster centers for kmeans tree\n        (*this)[\"centers_init\"] = centers_init;\n        // cluster boundary index. Used when searching the kmeans tree\n        (*this)[\"cb_index\"] = cb_index;\n    }\n};\n\n\n/**\n * Hierarchical kmeans index\n *\n * Contains a tree constructed through a hierarchical kmeans clustering\n * and other information for indexing a set of points for nearest-neighbour matching.\n */\ntemplate <typename Distance>\nclass KMeansIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n\n    typedef void (KMeansIndex::* centersAlgFunction)(int, int*, int, int*, int&);\n\n    /**\n     * The function used for choosing the cluster centers.\n     */\n    centersAlgFunction chooseCenters;\n\n\n\n    /**\n     * Chooses the initial centers in the k-means clustering in a random manner.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     *     indices_length = length of indices vector\n     *\n     */\n    void chooseCentersRandom(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        UniqueRandom r(indices_length);\n\n        int index;\n        for (index=0; index<k; ++index) {\n            bool duplicate = true;\n            int rnd;\n            while (duplicate) {\n                duplicate = false;\n                rnd = r.next();\n                if (rnd<0) {\n                    centers_length = index;\n                    return;\n                }\n\n                centers[index] = indices[rnd];\n\n                for (int j=0; j<index; ++j) {\n                    DistanceType sq = distance_(dataset_[centers[index]], dataset_[centers[j]], dataset_.cols);\n                    if (sq<1e-16) {\n                        duplicate = true;\n                    }\n                }\n            }\n        }\n\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using Gonzales' algorithm\n     * so that the centers are spaced apart from each other.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersGonzales(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        int rnd = rand_int(n);\n        assert(rnd >=0 && rnd < n);\n\n        centers[0] = indices[rnd];\n\n        int index;\n        for (index=1; index<k; ++index) {\n\n            int best_index = -1;\n            DistanceType best_val = 0;\n            for (int j=0; j<n; ++j) {\n                DistanceType dist = distance_(dataset_[centers[0]],dataset_[indices[j]],dataset_.cols);\n                for (int i=1; i<index; ++i) {\n                    DistanceType tmp_dist = distance_(dataset_[centers[i]],dataset_[indices[j]],dataset_.cols);\n                    if (tmp_dist<dist) {\n                        dist = tmp_dist;\n                    }\n                }\n                if (dist>best_val) {\n                    best_val = dist;\n                    best_index = j;\n                }\n            }\n            if (best_index!=-1) {\n                centers[index] = indices[best_index];\n            }\n            else {\n                break;\n            }\n        }\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using the algorithm\n     * proposed in the KMeans++ paper:\n     * Arthur, David; Vassilvitskii, Sergei - k-means++: The Advantages of Careful Seeding\n     *\n     * Implementation of this function was converted from the one provided in Arthur's code.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersKMeanspp(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        double currentPot = 0;\n        DistanceType* closestDistSq = new DistanceType[n];\n\n        // Choose one random center and set the closestDistSq values\n        int index = rand_int(n);\n        assert(index >=0 && index < n);\n        centers[0] = indices[index];\n\n        for (int i = 0; i < n; i++) {\n            closestDistSq[i] = distance_(dataset_[indices[i]], dataset_[indices[index]], dataset_.cols);\n            currentPot += closestDistSq[i];\n        }\n\n\n        const int numLocalTries = 1;\n\n        // Choose each center\n        int centerCount;\n        for (centerCount = 1; centerCount < k; centerCount++) {\n\n            // Repeat several trials\n            double bestNewPot = -1;\n            int bestNewIndex = -1;\n            for (int localTrial = 0; localTrial < numLocalTries; localTrial++) {\n\n                // Choose our center - have to be slightly careful to return a valid answer even accounting\n                // for possible rounding errors\n                double randVal = rand_double(currentPot);\n                for (index = 0; index < n-1; index++) {\n                    if (randVal <= closestDistSq[index]) break;\n                    else randVal -= closestDistSq[index];\n                }\n\n                // Compute the new potential\n                double newPot = 0;\n                for (int i = 0; i < n; i++) newPot += std::min( distance_(dataset_[indices[i]], dataset_[indices[index]], dataset_.cols), closestDistSq[i] );\n\n                // Store the best result\n                if ((bestNewPot < 0)||(newPot < bestNewPot)) {\n                    bestNewPot = newPot;\n                    bestNewIndex = index;\n                }\n            }\n\n            // Add the appropriate center\n            centers[centerCount] = indices[bestNewIndex];\n            currentPot = bestNewPot;\n            for (int i = 0; i < n; i++) closestDistSq[i] = std::min( distance_(dataset_[indices[i]], dataset_[indices[bestNewIndex]], dataset_.cols), closestDistSq[i] );\n        }\n\n        centers_length = centerCount;\n\n        delete[] closestDistSq;\n    }\n\n\n\npublic:\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KMEANS;\n    }\n\n    /**\n     * Index constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the hierarchical k-means algorithm\n     */\n    KMeansIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KMeansIndexParams(),\n                Distance d = Distance())\n        : dataset_(inputData), index_params_(params), root_(NULL), indices_(NULL), distance_(d)\n    {\n        memoryCounter_ = 0;\n\n        size_ = dataset_.rows;\n        veclen_ = dataset_.cols;\n\n        branching_ = get_param(params,\"branching\",32);\n        iterations_ = get_param(params,\"iterations\",11);\n        if (iterations_<0) {\n            iterations_ = (std::numeric_limits<int>::max)();\n        }\n        centers_init_  = get_param(params,\"centers_init\",FLANN_CENTERS_RANDOM);\n\n        if (centers_init_==FLANN_CENTERS_RANDOM) {\n            chooseCenters = &KMeansIndex::chooseCentersRandom;\n        }\n        else if (centers_init_==FLANN_CENTERS_GONZALES) {\n            chooseCenters = &KMeansIndex::chooseCentersGonzales;\n        }\n        else if (centers_init_==FLANN_CENTERS_KMEANSPP) {\n            chooseCenters = &KMeansIndex::chooseCentersKMeanspp;\n        }\n        else {\n            throw FLANNException(\"Unknown algorithm for choosing initial centers.\");\n        }\n        cb_index_ = 0.4f;\n\n    }\n\n\n    KMeansIndex(const KMeansIndex&);\n    KMeansIndex& operator=(const KMeansIndex&);\n\n\n    /**\n     * Index destructor.\n     *\n     * Release the memory used by the index.\n     */\n    virtual ~KMeansIndex()\n    {\n        if (root_ != NULL) {\n            free_centers(root_);\n        }\n        if (indices_!=NULL) {\n            delete[] indices_;\n        }\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n\n    void set_cb_index( float index)\n    {\n        cb_index_ = index;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return pool_.usedMemory+pool_.wastedMemory+memoryCounter_;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        if (branching_<2) {\n            throw FLANNException(\"Branching factor must be at least 2\");\n        }\n\n        indices_ = new int[size_];\n        for (size_t i=0; i<size_; ++i) {\n            indices_[i] = int(i);\n        }\n\n        root_ = pool_.allocate<KMeansNode>();\n        computeNodeStatistics(root_, indices_, (int)size_);\n        computeClustering(root_, indices_, (int)size_, branching_,0);\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, branching_);\n        save_value(stream, iterations_);\n        save_value(stream, memoryCounter_);\n        save_value(stream, cb_index_);\n        save_value(stream, *indices_, (int)size_);\n\n        save_tree(stream, root_);\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, branching_);\n        load_value(stream, iterations_);\n        load_value(stream, memoryCounter_);\n        load_value(stream, cb_index_);\n        if (indices_!=NULL) {\n            delete[] indices_;\n        }\n        indices_ = new int[size_];\n        load_value(stream, *indices_, size_);\n\n        if (root_!=NULL) {\n            free_centers(root_);\n        }\n        load_tree(stream, root_);\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"branching\"] = branching_;\n        index_params_[\"iterations\"] = iterations_;\n        index_params_[\"centers_init\"] = centers_init_;\n        index_params_[\"cb_index\"] = cb_index_;\n\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     searchParams = parameters that influence the search algorithm (checks, cb_index)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n\n        int maxChecks = get_param(searchParams,\"checks\",32);\n\n        if (maxChecks==FLANN_CHECKS_UNLIMITED) {\n            findExactNN(root_, result, vec);\n        }\n        else {\n            // Priority queue storing intermediate branches in the best-bin-first search\n            Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n\n            int checks = 0;\n            findNN(root_, result, vec, checks, maxChecks, heap);\n\n            BranchSt branch;\n            while (heap->popMin(branch) && (checks<maxChecks || !result.full())) {\n                KMeansNodePtr node = branch.node;\n                findNN(node, result, vec, checks, maxChecks, heap);\n            }\n            assert(result.full());\n\n            delete heap;\n        }\n\n    }\n\n    /**\n     * Clustering function that takes a cut in the hierarchical k-means\n     * tree and return the clusters centers of that clustering.\n     * Params:\n     *     numClusters = number of clusters to have in the clustering computed\n     * Returns: number of cluster centers\n     */\n    int getClusterCenters(Matrix<DistanceType>& centers)\n    {\n        int numClusters = centers.rows;\n        if (numClusters<1) {\n            throw FLANNException(\"Number of clusters must be at least 1\");\n        }\n\n        DistanceType variance;\n        KMeansNodePtr* clusters = new KMeansNodePtr[numClusters];\n\n        int clusterCount = getMinVarianceClusters(root_, clusters, numClusters, variance);\n\n        Logger::info(\"Clusters requested: %d, returning %d\\n\",numClusters, clusterCount);\n\n        for (int i=0; i<clusterCount; ++i) {\n            DistanceType* center = clusters[i]->pivot;\n            for (size_t j=0; j<veclen_; ++j) {\n                centers[i][j] = center[j];\n            }\n        }\n        delete[] clusters;\n\n        return clusterCount;\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n\nprivate:\n    /**\n     * Struture representing a node in the hierarchical k-means tree.\n     */\n    struct KMeansNode\n    {\n        /**\n         * The cluster center.\n         */\n        DistanceType* pivot;\n        /**\n         * The cluster radius.\n         */\n        DistanceType radius;\n        /**\n         * The cluster mean radius.\n         */\n        DistanceType mean_radius;\n        /**\n         * The cluster variance.\n         */\n        DistanceType variance;\n        /**\n         * The cluster size (number of points in the cluster)\n         */\n        int size;\n        /**\n         * Child nodes (only for non-terminal nodes)\n         */\n        KMeansNode** childs;\n        /**\n         * Node points (only for terminal nodes)\n         */\n        int* indices;\n        /**\n         * Level\n         */\n        int level;\n    };\n    typedef KMeansNode* KMeansNodePtr;\n\n    /**\n     * Alias definition for a nicer syntax.\n     */\n    typedef BranchStruct<KMeansNodePtr, DistanceType> BranchSt;\n\n\n\n\n    void save_tree(FILE* stream, KMeansNodePtr node)\n    {\n        save_value(stream, *node);\n        save_value(stream, *(node->pivot), (int)veclen_);\n        if (node->childs==NULL) {\n            int indices_offset = (int)(node->indices - indices_);\n            save_value(stream, indices_offset);\n        }\n        else {\n            for(int i=0; i<branching_; ++i) {\n                save_tree(stream, node->childs[i]);\n            }\n        }\n    }\n\n\n    void load_tree(FILE* stream, KMeansNodePtr& node)\n    {\n        node = pool_.allocate<KMeansNode>();\n        load_value(stream, *node);\n        node->pivot = new DistanceType[veclen_];\n        load_value(stream, *(node->pivot), (int)veclen_);\n        if (node->childs==NULL) {\n            int indices_offset;\n            load_value(stream, indices_offset);\n            node->indices = indices_ + indices_offset;\n        }\n        else {\n            node->childs = pool_.allocate<KMeansNodePtr>(branching_);\n            for(int i=0; i<branching_; ++i) {\n                load_tree(stream, node->childs[i]);\n            }\n        }\n    }\n\n\n    /**\n     * Helper function\n     */\n    void free_centers(KMeansNodePtr node)\n    {\n        delete[] node->pivot;\n        if (node->childs!=NULL) {\n            for (int k=0; k<branching_; ++k) {\n                free_centers(node->childs[k]);\n            }\n        }\n    }\n\n    /**\n     * Computes the statistics of a node (mean, radius, variance).\n     *\n     * Params:\n     *     node = the node to use\n     *     indices = the indices of the points belonging to the node\n     */\n    void computeNodeStatistics(KMeansNodePtr node, int* indices, int indices_length)\n    {\n\n        DistanceType radius = 0;\n        DistanceType variance = 0;\n        DistanceType* mean = new DistanceType[veclen_];\n        memoryCounter_ += int(veclen_*sizeof(DistanceType));\n\n        memset(mean,0,veclen_*sizeof(DistanceType));\n\n        for (size_t i=0; i<size_; ++i) {\n            ElementType* vec = dataset_[indices[i]];\n            for (size_t j=0; j<veclen_; ++j) {\n                mean[j] += vec[j];\n            }\n            variance += distance_(vec, ZeroIterator<ElementType>(), veclen_);\n        }\n        for (size_t j=0; j<veclen_; ++j) {\n            mean[j] /= size_;\n        }\n        variance /= size_;\n        variance -= distance_(mean, ZeroIterator<ElementType>(), veclen_);\n\n        DistanceType tmp = 0;\n        for (int i=0; i<indices_length; ++i) {\n            tmp = distance_(mean, dataset_[indices[i]], veclen_);\n            if (tmp>radius) {\n                radius = tmp;\n            }\n        }\n\n        node->variance = variance;\n        node->radius = radius;\n        node->pivot = mean;\n    }\n\n\n    /**\n     * The method responsible with actually doing the recursive hierarchical\n     * clustering\n     *\n     * Params:\n     *     node = the node to cluster\n     *     indices = indices of the points belonging to the current node\n     *     branching = the branching factor to use in the clustering\n     *\n     * TODO: for 1-sized clusters don't store a cluster center (it's the same as the single cluster point)\n     */\n    void computeClustering(KMeansNodePtr node, int* indices, int indices_length, int branching, int level)\n    {\n        node->size = indices_length;\n        node->level = level;\n\n        if (indices_length < branching) {\n            node->indices = indices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n        int* centers_idx = new int[branching];\n        int centers_length;\n        (this->*chooseCenters)(branching, indices, indices_length, centers_idx, centers_length);\n\n        if (centers_length<branching) {\n            node->indices = indices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            delete [] centers_idx;\n            return;\n        }\n\n\n        Matrix<double> dcenters(new double[branching*veclen_],branching,veclen_);\n        for (int i=0; i<centers_length; ++i) {\n            ElementType* vec = dataset_[centers_idx[i]];\n            for (size_t k=0; k<veclen_; ++k) {\n                dcenters[i][k] = double(vec[k]);\n            }\n        }\n        delete[] centers_idx;\n\n        std::vector<DistanceType> radiuses(branching);\n        int* count = new int[branching];\n        for (int i=0; i<branching; ++i) {\n            radiuses[i] = 0;\n            count[i] = 0;\n        }\n\n        //\tassign points to clusters\n        int* belongs_to = new int[indices_length];\n        for (int i=0; i<indices_length; ++i) {\n\n            DistanceType sq_dist = distance_(dataset_[indices[i]], dcenters[0], veclen_);\n            belongs_to[i] = 0;\n            for (int j=1; j<branching; ++j) {\n                DistanceType new_sq_dist = distance_(dataset_[indices[i]], dcenters[j], veclen_);\n                if (sq_dist>new_sq_dist) {\n                    belongs_to[i] = j;\n                    sq_dist = new_sq_dist;\n                }\n            }\n            if (sq_dist>radiuses[belongs_to[i]]) {\n                radiuses[belongs_to[i]] = sq_dist;\n            }\n            count[belongs_to[i]]++;\n        }\n\n        bool converged = false;\n        int iteration = 0;\n        while (!converged && iteration<iterations_) {\n            converged = true;\n            iteration++;\n\n            // compute the new cluster centers\n            for (int i=0; i<branching; ++i) {\n                memset(dcenters[i],0,sizeof(double)*veclen_);\n                radiuses[i] = 0;\n            }\n            for (int i=0; i<indices_length; ++i) {\n                ElementType* vec = dataset_[indices[i]];\n                double* center = dcenters[belongs_to[i]];\n                for (size_t k=0; k<veclen_; ++k) {\n                    center[k] += vec[k];\n                }\n            }\n            for (int i=0; i<branching; ++i) {\n                int cnt = count[i];\n                for (size_t k=0; k<veclen_; ++k) {\n                    dcenters[i][k] /= cnt;\n                }\n            }\n\n            // reassign points to clusters\n            for (int i=0; i<indices_length; ++i) {\n                DistanceType sq_dist = distance_(dataset_[indices[i]], dcenters[0], veclen_);\n                int new_centroid = 0;\n                for (int j=1; j<branching; ++j) {\n                    DistanceType new_sq_dist = distance_(dataset_[indices[i]], dcenters[j], veclen_);\n                    if (sq_dist>new_sq_dist) {\n                        new_centroid = j;\n                        sq_dist = new_sq_dist;\n                    }\n                }\n                if (sq_dist>radiuses[new_centroid]) {\n                    radiuses[new_centroid] = sq_dist;\n                }\n                if (new_centroid != belongs_to[i]) {\n                    count[belongs_to[i]]--;\n                    count[new_centroid]++;\n                    belongs_to[i] = new_centroid;\n\n                    converged = false;\n                }\n            }\n\n            for (int i=0; i<branching; ++i) {\n                // if one cluster converges to an empty cluster,\n                // move an element into that cluster\n                if (count[i]==0) {\n                    int j = (i+1)%branching;\n                    while (count[j]<=1) {\n                        j = (j+1)%branching;\n                    }\n\n                    for (int k=0; k<indices_length; ++k) {\n                        if (belongs_to[k]==j) {\n                            // for cluster j, we move the furthest element from the center to the empty cluster i\n                            if ( distance_(dataset_[indices[k]], dcenters[j], veclen_) == radiuses[j] ) {\n                                belongs_to[k] = i;\n                                count[j]--;\n                                count[i]++;\n                                break;\n                            }\n                        }\n                    }\n                    converged = false;\n                }\n            }\n\n        }\n\n        DistanceType** centers = new DistanceType*[branching];\n\n        for (int i=0; i<branching; ++i) {\n            centers[i] = new DistanceType[veclen_];\n            memoryCounter_ += (int)(veclen_*sizeof(DistanceType));\n            for (size_t k=0; k<veclen_; ++k) {\n                centers[i][k] = (DistanceType)dcenters[i][k];\n            }\n        }\n\n\n        // compute kmeans clustering for each of the resulting clusters\n        node->childs = pool_.allocate<KMeansNodePtr>(branching);\n        int start = 0;\n        int end = start;\n        for (int c=0; c<branching; ++c) {\n            int s = count[c];\n\n            DistanceType variance = 0;\n            DistanceType mean_radius =0;\n            for (int i=0; i<indices_length; ++i) {\n                if (belongs_to[i]==c) {\n                    DistanceType d = distance_(dataset_[indices[i]], ZeroIterator<ElementType>(), veclen_);\n                    variance += d;\n                    mean_radius += sqrt(d);\n                    std::swap(indices[i],indices[end]);\n                    std::swap(belongs_to[i],belongs_to[end]);\n                    end++;\n                }\n            }\n            variance /= s;\n            mean_radius /= s;\n            variance -= distance_(centers[c], ZeroIterator<ElementType>(), veclen_);\n\n            node->childs[c] = pool_.allocate<KMeansNode>();\n            node->childs[c]->radius = radiuses[c];\n            node->childs[c]->pivot = centers[c];\n            node->childs[c]->variance = variance;\n            node->childs[c]->mean_radius = mean_radius;\n            node->childs[c]->indices = NULL;\n            computeClustering(node->childs[c],indices+start, end-start, branching, level+1);\n            start=end;\n        }\n\n        delete[] dcenters.data;\n        delete[] centers;\n        delete[] count;\n        delete[] belongs_to;\n    }\n\n\n\n    /**\n     * Performs one descent in the hierarchical k-means tree. The branches not\n     * visited are stored in a priority queue.\n     *\n     * Params:\n     *      node = node to explore\n     *      result = container for the k-nearest neighbors found\n     *      vec = query points\n     *      checks = how many points in the dataset have been checked so far\n     *      maxChecks = maximum dataset points to checks\n     */\n\n\n    void findNN(KMeansNodePtr node, ResultSet<DistanceType>& result, const ElementType* vec, int& checks, int maxChecks,\n                Heap<BranchSt>* heap)\n    {\n        // Ignore those clusters that are too far away\n        {\n            DistanceType bsq = distance_(vec, node->pivot, veclen_);\n            DistanceType rsq = node->radius;\n            DistanceType wsq = result.worstDist();\n\n            DistanceType val = bsq-rsq-wsq;\n            DistanceType val2 = val*val-4*rsq*wsq;\n\n            //if (val>0) {\n            if ((val>0)&&(val2>0)) {\n                return;\n            }\n        }\n\n        if (node->childs==NULL) {\n            if (checks>=maxChecks) {\n                if (result.full()) return;\n            }\n            checks += node->size;\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                DistanceType dist = distance_(dataset_[index], vec, veclen_);\n                result.addPoint(dist, index);\n            }\n        }\n        else {\n            DistanceType* domain_distances = new DistanceType[branching_];\n            int closest_center = exploreNodeBranches(node, vec, domain_distances, heap);\n            delete[] domain_distances;\n            findNN(node->childs[closest_center],result,vec, checks, maxChecks, heap);\n        }\n    }\n\n    /**\n     * Helper function that computes the nearest childs of a node to a given query point.\n     * Params:\n     *     node = the node\n     *     q = the query point\n     *     distances = array with the distances to each child node.\n     * Returns:\n     */\n    int exploreNodeBranches(KMeansNodePtr node, const ElementType* q, DistanceType* domain_distances, Heap<BranchSt>* heap)\n    {\n\n        int best_index = 0;\n        domain_distances[best_index] = distance_(q, node->childs[best_index]->pivot, veclen_);\n        for (int i=1; i<branching_; ++i) {\n            domain_distances[i] = distance_(q, node->childs[i]->pivot, veclen_);\n            if (domain_distances[i]<domain_distances[best_index]) {\n                best_index = i;\n            }\n        }\n\n        //\t\tfloat* best_center = node->childs[best_index]->pivot;\n        for (int i=0; i<branching_; ++i) {\n            if (i != best_index) {\n                domain_distances[i] -= cb_index_*node->childs[i]->variance;\n\n                //\t\t\t\tfloat dist_to_border = getDistanceToBorder(node.childs[i].pivot,best_center,q);\n                //\t\t\t\tif (domain_distances[i]<dist_to_border) {\n                //\t\t\t\t\tdomain_distances[i] = dist_to_border;\n                //\t\t\t\t}\n                heap->insert(BranchSt(node->childs[i],domain_distances[i]));\n            }\n        }\n\n        return best_index;\n    }\n\n\n    /**\n     * Function the performs exact nearest neighbor search by traversing the entire tree.\n     */\n    void findExactNN(KMeansNodePtr node, ResultSet<DistanceType>& result, const ElementType* vec)\n    {\n        // Ignore those clusters that are too far away\n        {\n            DistanceType bsq = distance_(vec, node->pivot, veclen_);\n            DistanceType rsq = node->radius;\n            DistanceType wsq = result.worstDist();\n\n            DistanceType val = bsq-rsq-wsq;\n            DistanceType val2 = val*val-4*rsq*wsq;\n\n            //                  if (val>0) {\n            if ((val>0)&&(val2>0)) {\n                return;\n            }\n        }\n\n\n        if (node->childs==NULL) {\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                DistanceType dist = distance_(dataset_[index], vec, veclen_);\n                result.addPoint(dist, index);\n            }\n        }\n        else {\n            int* sort_indices = new int[branching_];\n\n            getCenterOrdering(node, vec, sort_indices);\n\n            for (int i=0; i<branching_; ++i) {\n                findExactNN(node->childs[sort_indices[i]],result,vec);\n            }\n\n            delete[] sort_indices;\n        }\n    }\n\n\n    /**\n     * Helper function.\n     *\n     * I computes the order in which to traverse the child nodes of a particular node.\n     */\n    void getCenterOrdering(KMeansNodePtr node, const ElementType* q, int* sort_indices)\n    {\n        DistanceType* domain_distances = new DistanceType[branching_];\n        for (int i=0; i<branching_; ++i) {\n            DistanceType dist = distance_(q, node->childs[i]->pivot, veclen_);\n\n            int j=0;\n            while (domain_distances[j]<dist && j<i) j++;\n            for (int k=i; k>j; --k) {\n                domain_distances[k] = domain_distances[k-1];\n                sort_indices[k] = sort_indices[k-1];\n            }\n            domain_distances[j] = dist;\n            sort_indices[j] = i;\n        }\n        delete[] domain_distances;\n    }\n\n    /**\n     * Method that computes the squared distance from the query point q\n     * from inside region with center c to the border between this\n     * region and the region with center p\n     */\n    DistanceType getDistanceToBorder(DistanceType* p, DistanceType* c, DistanceType* q)\n    {\n        DistanceType sum = 0;\n        DistanceType sum2 = 0;\n\n        for (int i=0; i<veclen_; ++i) {\n            DistanceType t = c[i]-p[i];\n            sum += t*(q[i]-(c[i]+p[i])/2);\n            sum2 += t*t;\n        }\n\n        return sum*sum/sum2;\n    }\n\n\n    /**\n     * Helper function the descends in the hierarchical k-means tree by spliting those clusters that minimize\n     * the overall variance of the clustering.\n     * Params:\n     *     root = root node\n     *     clusters = array with clusters centers (return value)\n     *     varianceValue = variance of the clustering (return value)\n     * Returns:\n     */\n    int getMinVarianceClusters(KMeansNodePtr root, KMeansNodePtr* clusters, int clusters_length, DistanceType& varianceValue)\n    {\n        int clusterCount = 1;\n        clusters[0] = root;\n\n        DistanceType meanVariance = root->variance*root->size;\n\n        while (clusterCount<clusters_length) {\n            DistanceType minVariance = (std::numeric_limits<DistanceType>::max)();\n            int splitIndex = -1;\n\n            for (int i=0; i<clusterCount; ++i) {\n                if (clusters[i]->childs != NULL) {\n\n                    DistanceType variance = meanVariance - clusters[i]->variance*clusters[i]->size;\n\n                    for (int j=0; j<branching_; ++j) {\n                        variance += clusters[i]->childs[j]->variance*clusters[i]->childs[j]->size;\n                    }\n                    if (variance<minVariance) {\n                        minVariance = variance;\n                        splitIndex = i;\n                    }\n                }\n            }\n\n            if (splitIndex==-1) break;\n            if ( (branching_+clusterCount-1) > clusters_length) break;\n\n            meanVariance = minVariance;\n\n            // split node\n            KMeansNodePtr toSplit = clusters[splitIndex];\n            clusters[splitIndex] = toSplit->childs[0];\n            for (int i=1; i<branching_; ++i) {\n                clusters[clusterCount++] = toSplit->childs[i];\n            }\n        }\n\n        varianceValue = meanVariance/root->size;\n        return clusterCount;\n    }\n\nprivate:\n    /** The branching factor used in the hierarchical k-means clustering */\n    int branching_;\n\n    /** Maximum number of iterations to use when performing k-means clustering */\n    int iterations_;\n\n    /** Algorithm for choosing the cluster centers */\n    flann_centers_init_t centers_init_;\n\n    /**\n     * Cluster border index. This is used in the tree search phase when determining\n     * the closest cluster to explore next. A zero value takes into account only\n     * the cluster centres, a value greater then zero also take into account the size\n     * of the cluster.\n     */\n    float cb_index_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    /** Index parameters */\n    IndexParams index_params_;\n\n    /**\n     * Number of features in the dataset.\n     */\n    size_t size_;\n\n    /**\n     * Length of each feature.\n     */\n    size_t veclen_;\n\n    /**\n     * The root node in the tree.\n     */\n    KMeansNodePtr root_;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    int* indices_;\n\n    /**\n     * The distance\n     */\n    Distance distance_;\n\n    /**\n     * Pooled memory allocator.\n     */\n    PooledAllocator pool_;\n\n    /**\n     * Memory occupied by the index.\n     */\n    int memoryCounter_;\n};\n\n}\n\n#endif //OPENCV_FLANN_KMEANS_INDEX_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/linear_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LINEAR_INDEX_H_\n#define OPENCV_FLANN_LINEAR_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n\nnamespace cvflann\n{\n\nstruct LinearIndexParams : public IndexParams\n{\n    LinearIndexParams()\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_LINEAR;\n    }\n};\n\ntemplate <typename Distance>\nclass LinearIndex : public NNIndex<Distance>\n{\npublic:\n\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    LinearIndex(const Matrix<ElementType>& inputData, const IndexParams& params = LinearIndexParams(),\n                Distance d = Distance()) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n    }\n\n    LinearIndex(const LinearIndex&);\n    LinearIndex& operator=(const LinearIndex&);\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_LINEAR;\n    }\n\n\n    size_t size() const\n    {\n        return dataset_.rows;\n    }\n\n    size_t veclen() const\n    {\n        return dataset_.cols;\n    }\n\n\n    int usedMemory() const\n    {\n        return 0;\n    }\n\n    void buildIndex()\n    {\n        /* nothing to do here for linear search */\n    }\n\n    void saveIndex(FILE*)\n    {\n        /* nothing to do here for linear search */\n    }\n\n\n    void loadIndex(FILE*)\n    {\n        /* nothing to do here for linear search */\n\n        index_params_[\"algorithm\"] = getType();\n    }\n\n    void findNeighbors(ResultSet<DistanceType>& resultSet, const ElementType* vec, const SearchParams& /*searchParams*/)\n    {\n        ElementType* data = dataset_.data;\n        for (size_t i = 0; i < dataset_.rows; ++i, data += dataset_.cols) {\n            DistanceType dist = distance_(data, vec, dataset_.cols);\n            resultSet.addPoint(dist, (int)i);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\nprivate:\n    /** The dataset */\n    const Matrix<ElementType> dataset_;\n    /** Index parameters */\n    IndexParams index_params_;\n    /** Index distance */\n    Distance distance_;\n\n};\n\n}\n\n#endif // OPENCV_FLANN_LINEAR_INDEX_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/logger.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LOGGER_H\n#define OPENCV_FLANN_LOGGER_H\n\n#include <stdio.h>\n#include <stdarg.h>\n\n#include \"defines.h\"\n\n\nnamespace cvflann\n{\n\nclass Logger\n{\n    Logger() : stream(stdout), logLevel(FLANN_LOG_WARN) {}\n\n    ~Logger()\n    {\n        if ((stream!=NULL)&&(stream!=stdout)) {\n            fclose(stream);\n        }\n    }\n\n    static Logger& instance()\n    {\n        static Logger logger;\n        return logger;\n    }\n\n    void _setDestination(const char* name)\n    {\n        if (name==NULL) {\n            stream = stdout;\n        }\n        else {\n            stream = fopen(name,\"w\");\n            if (stream == NULL) {\n                stream = stdout;\n            }\n        }\n    }\n\n    int _log(int level, const char* fmt, va_list arglist)\n    {\n        if (level > logLevel ) return -1;\n        int ret = vfprintf(stream, fmt, arglist);\n        return ret;\n    }\n\npublic:\n    /**\n     * Sets the logging level. All messages with lower priority will be ignored.\n     * @param level Logging level\n     */\n    static void setLevel(int level) { instance().logLevel = level; }\n\n    /**\n     * Sets the logging destination\n     * @param name Filename or NULL for console\n     */\n    static void setDestination(const char* name) { instance()._setDestination(name); }\n\n    /**\n     * Print log message\n     * @param level Log level\n     * @param fmt Message format\n     * @return\n     */\n    static int log(int level, const char* fmt, ...)\n    {\n        va_list arglist;\n        va_start(arglist, fmt);\n        int ret = instance()._log(level,fmt,arglist);\n        va_end(arglist);\n        return ret;\n    }\n\n#define LOG_METHOD(NAME,LEVEL) \\\n    static int NAME(const char* fmt, ...) \\\n    { \\\n        va_list ap; \\\n        va_start(ap, fmt); \\\n        int ret = instance()._log(LEVEL, fmt, ap); \\\n        va_end(ap); \\\n        return ret; \\\n    }\n\n    LOG_METHOD(fatal, FLANN_LOG_FATAL)\n    LOG_METHOD(error, FLANN_LOG_ERROR)\n    LOG_METHOD(warn, FLANN_LOG_WARN)\n    LOG_METHOD(info, FLANN_LOG_INFO)\n\nprivate:\n    FILE* stream;\n    int logLevel;\n};\n\n}\n\n#endif //OPENCV_FLANN_LOGGER_H\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/lsh_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LSH_INDEX_H_\n#define OPENCV_FLANN_LSH_INDEX_H_\n\n#include <algorithm>\n#include <cassert>\n#include <cstring>\n#include <map>\n#include <vector>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"lsh_table.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\nnamespace cvflann\n{\n\nstruct LshIndexParams : public IndexParams\n{\n    LshIndexParams(unsigned int table_number = 12, unsigned int key_size = 20, unsigned int multi_probe_level = 2)\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_LSH;\n        // The number of hash tables to use\n        (*this)[\"table_number\"] = table_number;\n        // The length of the key in the hash tables\n        (*this)[\"key_size\"] = key_size;\n        // Number of levels to use in multi-probe (0 for standard LSH)\n        (*this)[\"multi_probe_level\"] = multi_probe_level;\n    }\n};\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate<typename Distance>\nclass LshIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    /** Constructor\n     * @param input_data dataset with the input features\n     * @param params parameters passed to the LSH algorithm\n     * @param d the distance used\n     */\n    LshIndex(const Matrix<ElementType>& input_data, const IndexParams& params = LshIndexParams(),\n             Distance d = Distance()) :\n        dataset_(input_data), index_params_(params), distance_(d)\n    {\n        // cv::flann::IndexParams sets integer params as 'int', so it is used with get_param\n        // in place of 'unsigned int'\n        table_number_ = (unsigned int)get_param<int>(index_params_,\"table_number\",12);\n        key_size_ = (unsigned int)get_param<int>(index_params_,\"key_size\",20);\n        multi_probe_level_ = (unsigned int)get_param<int>(index_params_,\"multi_probe_level\",2);\n\n        feature_size_ = (unsigned)dataset_.cols;\n        fill_xor_mask(0, key_size_, multi_probe_level_, xor_masks_);\n    }\n\n\n    LshIndex(const LshIndex&);\n    LshIndex& operator=(const LshIndex&);\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        tables_.resize(table_number_);\n        for (unsigned int i = 0; i < table_number_; ++i) {\n            lsh::LshTable<ElementType>& table = tables_[i];\n            table = lsh::LshTable<ElementType>(feature_size_, key_size_);\n\n            // Add the features to the table\n            table.add(dataset_);\n        }\n    }\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_LSH;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream,table_number_);\n        save_value(stream,key_size_);\n        save_value(stream,multi_probe_level_);\n        save_value(stream, dataset_);\n    }\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, table_number_);\n        load_value(stream, key_size_);\n        load_value(stream, multi_probe_level_);\n        load_value(stream, dataset_);\n        // Building the index is so fast we can afford not storing it\n        buildIndex();\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"table_number\"] = table_number_;\n        index_params_[\"key_size\"] = key_size_;\n        index_params_[\"multi_probe_level\"] = multi_probe_level_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return dataset_.rows;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return feature_size_;\n    }\n\n    /**\n     * Computes the index memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return (int)(dataset_.rows * sizeof(int));\n    }\n\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n\n        KNNUniqueResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.clear();\n            std::fill_n(indices[i], knn, -1);\n            std::fill_n(dists[i], knn, std::numeric_limits<DistanceType>::max());\n            findNeighbors(resultSet, queries[i], params);\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices[i], dists[i], knn);\n            else resultSet.copy(indices[i], dists[i], knn);\n        }\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& /*searchParams*/)\n    {\n        getNeighbors(vec, result);\n    }\n\nprivate:\n    /** Defines the comparator on score and index\n     */\n    typedef std::pair<float, unsigned int> ScoreIndexPair;\n    struct SortScoreIndexPairOnSecond\n    {\n        bool operator()(const ScoreIndexPair& left, const ScoreIndexPair& right) const\n        {\n            return left.second < right.second;\n        }\n    };\n\n    /** Fills the different xor masks to use when getting the neighbors in multi-probe LSH\n     * @param key the key we build neighbors from\n     * @param lowest_index the lowest index of the bit set\n     * @param level the multi-probe level we are at\n     * @param xor_masks all the xor mask\n     */\n    void fill_xor_mask(lsh::BucketKey key, int lowest_index, unsigned int level,\n                       std::vector<lsh::BucketKey>& xor_masks)\n    {\n        xor_masks.push_back(key);\n        if (level == 0) return;\n        for (int index = lowest_index - 1; index >= 0; --index) {\n            // Create a new key\n            lsh::BucketKey new_key = key | (1 << index);\n            fill_xor_mask(new_key, index, level - 1, xor_masks);\n        }\n    }\n\n    /** Performs the approximate nearest-neighbor search.\n     * @param vec the feature to analyze\n     * @param do_radius flag indicating if we check the radius too\n     * @param radius the radius if it is a radius search\n     * @param do_k flag indicating if we limit the number of nn\n     * @param k_nn the number of nearest neighbors\n     * @param checked_average used for debugging\n     */\n    void getNeighbors(const ElementType* vec, bool /*do_radius*/, float radius, bool do_k, unsigned int k_nn,\n                      float& /*checked_average*/)\n    {\n        static std::vector<ScoreIndexPair> score_index_heap;\n\n        if (do_k) {\n            unsigned int worst_score = std::numeric_limits<unsigned int>::max();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n            for (; table != table_end; ++table) {\n                size_t key = table->getKey(vec);\n                std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n                std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n                for (; xor_mask != xor_mask_end; ++xor_mask) {\n                    size_t sub_key = key ^ (*xor_mask);\n                    const lsh::Bucket* bucket = table->getBucketFromKey(sub_key);\n                    if (bucket == 0) continue;\n\n                    // Go over each descriptor index\n                    std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                    std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                    DistanceType hamming_distance;\n\n                    // Process the rest of the candidates\n                    for (; training_index < last_training_index; ++training_index) {\n                        hamming_distance = distance_(vec, dataset_[*training_index], dataset_.cols);\n\n                        if (hamming_distance < worst_score) {\n                            // Insert the new element\n                            score_index_heap.push_back(ScoreIndexPair(hamming_distance, training_index));\n                            std::push_heap(score_index_heap.begin(), score_index_heap.end());\n\n                            if (score_index_heap.size() > (unsigned int)k_nn) {\n                                // Remove the highest distance value as we have too many elements\n                                std::pop_heap(score_index_heap.begin(), score_index_heap.end());\n                                score_index_heap.pop_back();\n                                // Keep track of the worst score\n                                worst_score = score_index_heap.front().first;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        else {\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n            for (; table != table_end; ++table) {\n                size_t key = table->getKey(vec);\n                std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n                std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n                for (; xor_mask != xor_mask_end; ++xor_mask) {\n                    size_t sub_key = key ^ (*xor_mask);\n                    const lsh::Bucket* bucket = table->getBucketFromKey(sub_key);\n                    if (bucket == 0) continue;\n\n                    // Go over each descriptor index\n                    std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                    std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                    DistanceType hamming_distance;\n\n                    // Process the rest of the candidates\n                    for (; training_index < last_training_index; ++training_index) {\n                        // Compute the Hamming distance\n                        hamming_distance = distance_(vec, dataset_[*training_index], dataset_.cols);\n                        if (hamming_distance < radius) score_index_heap.push_back(ScoreIndexPair(hamming_distance, training_index));\n                    }\n                }\n            }\n        }\n    }\n\n    /** Performs the approximate nearest-neighbor search.\n     * This is a slower version than the above as it uses the ResultSet\n     * @param vec the feature to analyze\n     */\n    void getNeighbors(const ElementType* vec, ResultSet<DistanceType>& result)\n    {\n        typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n        typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n        for (; table != table_end; ++table) {\n            size_t key = table->getKey(vec);\n            std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n            std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n            for (; xor_mask != xor_mask_end; ++xor_mask) {\n                size_t sub_key = key ^ (*xor_mask);\n                const lsh::Bucket* bucket = table->getBucketFromKey((lsh::BucketKey)sub_key);\n                if (bucket == 0) continue;\n\n                // Go over each descriptor index\n                std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                DistanceType hamming_distance;\n\n                // Process the rest of the candidates\n                for (; training_index < last_training_index; ++training_index) {\n                    // Compute the Hamming distance\n                    hamming_distance = distance_(vec, dataset_[*training_index], (int)dataset_.cols);\n                    result.addPoint(hamming_distance, *training_index);\n                }\n            }\n        }\n    }\n\n    /** The different hash tables */\n    std::vector<lsh::LshTable<ElementType> > tables_;\n\n    /** The data the LSH tables where built from */\n    Matrix<ElementType> dataset_;\n\n    /** The size of the features (as ElementType[]) */\n    unsigned int feature_size_;\n\n    IndexParams index_params_;\n\n    /** table number */\n    unsigned int table_number_;\n    /** key size */\n    unsigned int key_size_;\n    /** How far should we look for neighbors in multi-probe LSH */\n    unsigned int multi_probe_level_;\n\n    /** The XOR masks to apply to a key to get the neighboring buckets */\n    std::vector<lsh::BucketKey> xor_masks_;\n\n    Distance distance_;\n};\n}\n\n#endif //OPENCV_FLANN_LSH_INDEX_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/lsh_table.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LSH_TABLE_H_\n#define OPENCV_FLANN_LSH_TABLE_H_\n\n#include <algorithm>\n#include <iostream>\n#include <iomanip>\n#include <limits.h>\n// TODO as soon as we use C++0x, use the code in USE_UNORDERED_MAP\n#ifdef __GXX_EXPERIMENTAL_CXX0X__\n#  define USE_UNORDERED_MAP 1\n#else\n#  define USE_UNORDERED_MAP 0\n#endif\n#if USE_UNORDERED_MAP\n#include <unordered_map>\n#else\n#include <map>\n#endif\n#include <math.h>\n#include <stddef.h>\n\n#include \"dynamic_bitset.h\"\n#include \"matrix.h\"\n\nnamespace cvflann\n{\n\nnamespace lsh\n{\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** What is stored in an LSH bucket\n */\ntypedef uint32_t FeatureIndex;\n/** The id from which we can get a bucket back in an LSH table\n */\ntypedef unsigned int BucketKey;\n\n/** A bucket in an LSH table\n */\ntypedef std::vector<FeatureIndex> Bucket;\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** POD for stats about an LSH table\n */\nstruct LshStats\n{\n    std::vector<unsigned int> bucket_sizes_;\n    size_t n_buckets_;\n    size_t bucket_size_mean_;\n    size_t bucket_size_median_;\n    size_t bucket_size_min_;\n    size_t bucket_size_max_;\n    size_t bucket_size_std_dev;\n    /** Each contained vector contains three value: beginning/end for interval, number of elements in the bin\n     */\n    std::vector<std::vector<unsigned int> > size_histogram_;\n};\n\n/** Overload the << operator for LshStats\n * @param out the streams\n * @param stats the stats to display\n * @return the streams\n */\ninline std::ostream& operator <<(std::ostream& out, const LshStats& stats)\n{\n    int w = 20;\n    out << \"Lsh Table Stats:\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"N buckets : \"\n    << stats.n_buckets_ << \"\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"mean size : \"\n    << std::setiosflags(std::ios::left) << stats.bucket_size_mean_ << \"\\n\" << std::setw(w)\n    << std::setiosflags(std::ios::right) << \"median size : \" << stats.bucket_size_median_ << \"\\n\" << std::setw(w)\n    << std::setiosflags(std::ios::right) << \"min size : \" << std::setiosflags(std::ios::left)\n    << stats.bucket_size_min_ << \"\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"max size : \"\n    << std::setiosflags(std::ios::left) << stats.bucket_size_max_;\n\n    // Display the histogram\n    out << std::endl << std::setw(w) << std::setiosflags(std::ios::right) << \"histogram : \"\n    << std::setiosflags(std::ios::left);\n    for (std::vector<std::vector<unsigned int> >::const_iterator iterator = stats.size_histogram_.begin(), end =\n             stats.size_histogram_.end(); iterator != end; ++iterator) out << (*iterator)[0] << \"-\" << (*iterator)[1] << \": \" << (*iterator)[2] << \",  \";\n\n    return out;\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Lsh hash table. As its key is a sub-feature, and as usually\n * the size of it is pretty small, we keep it as a continuous memory array.\n * The value is an index in the corpus of features (we keep it as an unsigned\n * int for pure memory reasons, it could be a size_t)\n */\ntemplate<typename ElementType>\nclass LshTable\n{\npublic:\n    /** A container of all the feature indices. Optimized for space\n     */\n#if USE_UNORDERED_MAP\n    typedef std::unordered_map<BucketKey, Bucket> BucketsSpace;\n#else\n    typedef std::map<BucketKey, Bucket> BucketsSpace;\n#endif\n\n    /** A container of all the feature indices. Optimized for speed\n     */\n    typedef std::vector<Bucket> BucketsSpeed;\n\n    /** Default constructor\n     */\n    LshTable()\n    {\n    }\n\n    /** Default constructor\n     * Create the mask and allocate the memory\n     * @param feature_size is the size of the feature (considered as a ElementType[])\n     * @param key_size is the number of bits that are turned on in the feature\n     */\n    LshTable(unsigned int /*feature_size*/, unsigned int /*key_size*/)\n    {\n        std::cerr << \"LSH is not implemented for that type\" << std::endl;\n        assert(0);\n    }\n\n    /** Add a feature to the table\n     * @param value the value to store for that feature\n     * @param feature the feature itself\n     */\n    void add(unsigned int value, const ElementType* feature)\n    {\n        // Add the value to the corresponding bucket\n        BucketKey key = (lsh::BucketKey)getKey(feature);\n\n        switch (speed_level_) {\n        case kArray:\n            // That means we get the buckets from an array\n            buckets_speed_[key].push_back(value);\n            break;\n        case kBitsetHash:\n            // That means we can check the bitset for the presence of a key\n            key_bitset_.set(key);\n            buckets_space_[key].push_back(value);\n            break;\n        case kHash:\n        {\n            // That means we have to check for the hash table for the presence of a key\n            buckets_space_[key].push_back(value);\n            break;\n        }\n        }\n    }\n\n    /** Add a set of features to the table\n     * @param dataset the values to store\n     */\n    void add(Matrix<ElementType> dataset)\n    {\n#if USE_UNORDERED_MAP\n        buckets_space_.rehash((buckets_space_.size() + dataset.rows) * 1.2);\n#endif\n        // Add the features to the table\n        for (unsigned int i = 0; i < dataset.rows; ++i) add(i, dataset[i]);\n        // Now that the table is full, optimize it for speed/space\n        optimize();\n    }\n\n    /** Get a bucket given the key\n     * @param key\n     * @return\n     */\n    inline const Bucket* getBucketFromKey(BucketKey key) const\n    {\n        // Generate other buckets\n        switch (speed_level_) {\n        case kArray:\n            // That means we get the buckets from an array\n            return &buckets_speed_[key];\n            break;\n        case kBitsetHash:\n            // That means we can check the bitset for the presence of a key\n            if (key_bitset_.test(key)) return &buckets_space_.find(key)->second;\n            else return 0;\n            break;\n        case kHash:\n        {\n            // That means we have to check for the hash table for the presence of a key\n            BucketsSpace::const_iterator bucket_it, bucket_end = buckets_space_.end();\n            bucket_it = buckets_space_.find(key);\n            // Stop here if that bucket does not exist\n            if (bucket_it == bucket_end) return 0;\n            else return &bucket_it->second;\n            break;\n        }\n        }\n        return 0;\n    }\n\n    /** Compute the sub-signature of a feature\n     */\n    size_t getKey(const ElementType* /*feature*/) const\n    {\n        std::cerr << \"LSH is not implemented for that type\" << std::endl;\n        assert(0);\n        return 1;\n    }\n\n    /** Get statistics about the table\n     * @return\n     */\n    LshStats getStats() const;\n\nprivate:\n    /** defines the speed fo the implementation\n     * kArray uses a vector for storing data\n     * kBitsetHash uses a hash map but checks for the validity of a key with a bitset\n     * kHash uses a hash map only\n     */\n    enum SpeedLevel\n    {\n        kArray, kBitsetHash, kHash\n    };\n\n    /** Initialize some variables\n     */\n    void initialize(size_t key_size)\n    {\n        const size_t key_size_lower_bound = 1;\n        //a value (size_t(1) << key_size) must fit the size_t type so key_size has to be strictly less than size of size_t\n        const size_t key_size_upper_bound = std::min(sizeof(BucketKey) * CHAR_BIT + 1, sizeof(size_t) * CHAR_BIT);\n        if (key_size < key_size_lower_bound || key_size >= key_size_upper_bound)\n        {\n            std::stringstream errorMessage;\n            errorMessage << \"Invalid key_size (=\" << key_size << \"). Valid values for your system are \" << key_size_lower_bound << \" <= key_size < \" << key_size_upper_bound << \".\";\n            CV_Error(CV_StsBadArg, errorMessage.str());\n        }\n\n        speed_level_ = kHash;\n        key_size_ = (unsigned)key_size;\n    }\n\n    /** Optimize the table for speed/space\n     */\n    void optimize()\n    {\n        // If we are already using the fast storage, no need to do anything\n        if (speed_level_ == kArray) return;\n\n        // Use an array if it will be more than half full\n        if (buckets_space_.size() > ((size_t(1) << key_size_) / 2)) {\n            speed_level_ = kArray;\n            // Fill the array version of it\n            buckets_speed_.resize(size_t(1) << key_size_);\n            for (BucketsSpace::const_iterator key_bucket = buckets_space_.begin(); key_bucket != buckets_space_.end(); ++key_bucket) buckets_speed_[key_bucket->first] = key_bucket->second;\n\n            // Empty the hash table\n            buckets_space_.clear();\n            return;\n        }\n\n        // If the bitset is going to use less than 10% of the RAM of the hash map (at least 1 size_t for the key and two\n        // for the vector) or less than 512MB (key_size_ <= 30)\n        if (((std::max(buckets_space_.size(), buckets_speed_.size()) * CHAR_BIT * 3 * sizeof(BucketKey)) / 10\n             >= (size_t(1) << key_size_)) || (key_size_ <= 32)) {\n            speed_level_ = kBitsetHash;\n            key_bitset_.resize(size_t(1) << key_size_);\n            key_bitset_.reset();\n            // Try with the BucketsSpace\n            for (BucketsSpace::const_iterator key_bucket = buckets_space_.begin(); key_bucket != buckets_space_.end(); ++key_bucket) key_bitset_.set(key_bucket->first);\n        }\n        else {\n            speed_level_ = kHash;\n            key_bitset_.clear();\n        }\n    }\n\n    /** The vector of all the buckets if they are held for speed\n     */\n    BucketsSpeed buckets_speed_;\n\n    /** The hash table of all the buckets in case we cannot use the speed version\n     */\n    BucketsSpace buckets_space_;\n\n    /** What is used to store the data */\n    SpeedLevel speed_level_;\n\n    /** If the subkey is small enough, it will keep track of which subkeys are set through that bitset\n     * That is just a speedup so that we don't look in the hash table (which can be mush slower that checking a bitset)\n     */\n    DynamicBitset key_bitset_;\n\n    /** The size of the sub-signature in bits\n     */\n    unsigned int key_size_;\n\n    // Members only used for the unsigned char specialization\n    /** The mask to apply to a feature to get the hash key\n     * Only used in the unsigned char case\n     */\n    std::vector<size_t> mask_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Specialization for unsigned char\n\ntemplate<>\ninline LshTable<unsigned char>::LshTable(unsigned int feature_size, unsigned int subsignature_size)\n{\n    initialize(subsignature_size);\n    // Allocate the mask\n    mask_ = std::vector<size_t>((size_t)ceil((float)(feature_size * sizeof(char)) / (float)sizeof(size_t)), 0);\n\n    // A bit brutal but fast to code\n    std::vector<size_t> indices(feature_size * CHAR_BIT);\n    for (size_t i = 0; i < feature_size * CHAR_BIT; ++i) indices[i] = i;\n    std::random_shuffle(indices.begin(), indices.end());\n\n    // Generate a random set of order of subsignature_size_ bits\n    for (unsigned int i = 0; i < key_size_; ++i) {\n        size_t index = indices[i];\n\n        // Set that bit in the mask\n        size_t divisor = CHAR_BIT * sizeof(size_t);\n        size_t idx = index / divisor; //pick the right size_t index\n        mask_[idx] |= size_t(1) << (index % divisor); //use modulo to find the bit offset\n    }\n\n    // Set to 1 if you want to display the mask for debug\n#if 0\n    {\n        size_t bcount = 0;\n        BOOST_FOREACH(size_t mask_block, mask_){\n            out << std::setw(sizeof(size_t) * CHAR_BIT / 4) << std::setfill('0') << std::hex << mask_block\n                << std::endl;\n            bcount += __builtin_popcountll(mask_block);\n        }\n        out << \"bit count : \" << std::dec << bcount << std::endl;\n        out << \"mask size : \" << mask_.size() << std::endl;\n        return out;\n    }\n#endif\n}\n\n/** Return the Subsignature of a feature\n * @param feature the feature to analyze\n */\ntemplate<>\ninline size_t LshTable<unsigned char>::getKey(const unsigned char* feature) const\n{\n    // no need to check if T is dividable by sizeof(size_t) like in the Hamming\n    // distance computation as we have a mask\n    const size_t* feature_block_ptr = reinterpret_cast<const size_t*> ((const void*)feature);\n\n    // Figure out the subsignature of the feature\n    // Given the feature ABCDEF, and the mask 001011, the output will be\n    // 000CEF\n    size_t subsignature = 0;\n    size_t bit_index = 1;\n\n    for (std::vector<size_t>::const_iterator pmask_block = mask_.begin(); pmask_block != mask_.end(); ++pmask_block) {\n        // get the mask and signature blocks\n        size_t feature_block = *feature_block_ptr;\n        size_t mask_block = *pmask_block;\n        while (mask_block) {\n            // Get the lowest set bit in the mask block\n            size_t lowest_bit = mask_block & (-(ptrdiff_t)mask_block);\n            // Add it to the current subsignature if necessary\n            subsignature += (feature_block & lowest_bit) ? bit_index : 0;\n            // Reset the bit in the mask block\n            mask_block ^= lowest_bit;\n            // increment the bit index for the subsignature\n            bit_index <<= 1;\n        }\n        // Check the next feature block\n        ++feature_block_ptr;\n    }\n    return subsignature;\n}\n\ntemplate<>\ninline LshStats LshTable<unsigned char>::getStats() const\n{\n    LshStats stats;\n    stats.bucket_size_mean_ = 0;\n    if ((buckets_speed_.empty()) && (buckets_space_.empty())) {\n        stats.n_buckets_ = 0;\n        stats.bucket_size_median_ = 0;\n        stats.bucket_size_min_ = 0;\n        stats.bucket_size_max_ = 0;\n        return stats;\n    }\n\n    if (!buckets_speed_.empty()) {\n        for (BucketsSpeed::const_iterator pbucket = buckets_speed_.begin(); pbucket != buckets_speed_.end(); ++pbucket) {\n            stats.bucket_sizes_.push_back((lsh::FeatureIndex)pbucket->size());\n            stats.bucket_size_mean_ += pbucket->size();\n        }\n        stats.bucket_size_mean_ /= buckets_speed_.size();\n        stats.n_buckets_ = buckets_speed_.size();\n    }\n    else {\n        for (BucketsSpace::const_iterator x = buckets_space_.begin(); x != buckets_space_.end(); ++x) {\n            stats.bucket_sizes_.push_back((lsh::FeatureIndex)x->second.size());\n            stats.bucket_size_mean_ += x->second.size();\n        }\n        stats.bucket_size_mean_ /= buckets_space_.size();\n        stats.n_buckets_ = buckets_space_.size();\n    }\n\n    std::sort(stats.bucket_sizes_.begin(), stats.bucket_sizes_.end());\n\n    //  BOOST_FOREACH(int size, stats.bucket_sizes_)\n    //          std::cout << size << \" \";\n    //  std::cout << std::endl;\n    stats.bucket_size_median_ = stats.bucket_sizes_[stats.bucket_sizes_.size() / 2];\n    stats.bucket_size_min_ = stats.bucket_sizes_.front();\n    stats.bucket_size_max_ = stats.bucket_sizes_.back();\n\n    // TODO compute mean and std\n    /*float mean, stddev;\n       stats.bucket_size_mean_ = mean;\n       stats.bucket_size_std_dev = stddev;*/\n\n    // Include a histogram of the buckets\n    unsigned int bin_start = 0;\n    unsigned int bin_end = 20;\n    bool is_new_bin = true;\n    for (std::vector<unsigned int>::iterator iterator = stats.bucket_sizes_.begin(), end = stats.bucket_sizes_.end(); iterator\n         != end; )\n        if (*iterator < bin_end) {\n            if (is_new_bin) {\n                stats.size_histogram_.push_back(std::vector<unsigned int>(3, 0));\n                stats.size_histogram_.back()[0] = bin_start;\n                stats.size_histogram_.back()[1] = bin_end - 1;\n                is_new_bin = false;\n            }\n            ++stats.size_histogram_.back()[2];\n            ++iterator;\n        }\n        else {\n            bin_start += 20;\n            bin_end += 20;\n            is_new_bin = true;\n        }\n\n    return stats;\n}\n\n// End the two namespaces\n}\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n#endif /* OPENCV_FLANN_LSH_TABLE_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/matrix.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DATASET_H_\n#define OPENCV_FLANN_DATASET_H_\n\n#include <stdio.h>\n\n#include \"general.h\"\n\nnamespace cvflann\n{\n\n/**\n * Class that implements a simple rectangular matrix stored in a memory buffer and\n * provides convenient matrix-like access using the [] operators.\n */\ntemplate <typename T>\nclass Matrix\n{\npublic:\n    typedef T type;\n\n    size_t rows;\n    size_t cols;\n    size_t stride;\n    T* data;\n\n    Matrix() : rows(0), cols(0), stride(0), data(NULL)\n    {\n    }\n\n    Matrix(T* data_, size_t rows_, size_t cols_, size_t stride_ = 0) :\n        rows(rows_), cols(cols_),  stride(stride_), data(data_)\n    {\n        if (stride==0) stride = cols;\n    }\n\n    /**\n     * Convenience function for deallocating the storage data.\n     */\n    FLANN_DEPRECATED void free()\n    {\n        fprintf(stderr, \"The cvflann::Matrix<T>::free() method is deprecated \"\n                \"and it does not do any memory deallocation any more.  You are\"\n                \"responsible for deallocating the matrix memory (by doing\"\n                \"'delete[] matrix.data' for example)\");\n    }\n\n    /**\n     * Operator that return a (pointer to a) row of the data.\n     */\n    T* operator[](size_t index) const\n    {\n        return data+index*stride;\n    }\n};\n\n\nclass UntypedMatrix\n{\npublic:\n    size_t rows;\n    size_t cols;\n    void* data;\n    flann_datatype_t type;\n\n    UntypedMatrix(void* data_, long rows_, long cols_) :\n        rows(rows_), cols(cols_), data(data_)\n    {\n    }\n\n    ~UntypedMatrix()\n    {\n    }\n\n\n    template<typename T>\n    Matrix<T> as()\n    {\n        return Matrix<T>((T*)data, rows, cols);\n    }\n};\n\n\n\n}\n\n#endif //OPENCV_FLANN_DATASET_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/miniflann.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef _OPENCV_MINIFLANN_HPP_\n#define _OPENCV_MINIFLANN_HPP_\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/flann/defines.h\"\n\nnamespace cv\n{\n\nnamespace flann\n{\n\nstruct CV_EXPORTS IndexParams\n{\n    IndexParams();\n    ~IndexParams();\n\n    std::string getString(const std::string& key, const std::string& defaultVal=std::string()) const;\n    int getInt(const std::string& key, int defaultVal=-1) const;\n    double getDouble(const std::string& key, double defaultVal=-1) const;\n\n    void setString(const std::string& key, const std::string& value);\n    void setInt(const std::string& key, int value);\n    void setDouble(const std::string& key, double value);\n    void setFloat(const std::string& key, float value);\n    void setBool(const std::string& key, bool value);\n    void setAlgorithm(int value);\n\n    void getAll(std::vector<std::string>& names,\n                std::vector<int>& types,\n                std::vector<std::string>& strValues,\n                std::vector<double>& numValues) const;\n\n    void* params;\n};\n\nstruct CV_EXPORTS KDTreeIndexParams : public IndexParams\n{\n    KDTreeIndexParams(int trees=4);\n};\n\nstruct CV_EXPORTS LinearIndexParams : public IndexParams\n{\n    LinearIndexParams();\n};\n\nstruct CV_EXPORTS CompositeIndexParams : public IndexParams\n{\n    CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11,\n                         cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2 );\n};\n\nstruct CV_EXPORTS AutotunedIndexParams : public IndexParams\n{\n    AutotunedIndexParams(float target_precision = 0.8, float build_weight = 0.01,\n                         float memory_weight = 0, float sample_fraction = 0.1);\n};\n\nstruct CV_EXPORTS HierarchicalClusteringIndexParams : public IndexParams\n{\n    HierarchicalClusteringIndexParams(int branching = 32,\n                      cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, int trees = 4, int leaf_size = 100 );\n};\n\nstruct CV_EXPORTS KMeansIndexParams : public IndexParams\n{\n    KMeansIndexParams(int branching = 32, int iterations = 11,\n                      cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2 );\n};\n\nstruct CV_EXPORTS LshIndexParams : public IndexParams\n{\n    LshIndexParams(int table_number, int key_size, int multi_probe_level);\n};\n\nstruct CV_EXPORTS SavedIndexParams : public IndexParams\n{\n    SavedIndexParams(const std::string& filename);\n};\n\nstruct CV_EXPORTS SearchParams : public IndexParams\n{\n    SearchParams( int checks = 32, float eps = 0, bool sorted = true );\n};\n\nclass CV_EXPORTS_W Index\n{\npublic:\n    CV_WRAP Index();\n    CV_WRAP Index(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2);\n    virtual ~Index();\n\n    CV_WRAP virtual void build(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2);\n    CV_WRAP virtual void knnSearch(InputArray query, OutputArray indices,\n                   OutputArray dists, int knn, const SearchParams& params=SearchParams());\n\n    CV_WRAP virtual int radiusSearch(InputArray query, OutputArray indices,\n                             OutputArray dists, double radius, int maxResults,\n                             const SearchParams& params=SearchParams());\n\n    CV_WRAP virtual void save(const std::string& filename) const;\n    CV_WRAP virtual bool load(InputArray features, const std::string& filename);\n    CV_WRAP virtual void release();\n    CV_WRAP cvflann::flann_distance_t getDistance() const;\n    CV_WRAP cvflann::flann_algorithm_t getAlgorithm() const;\n\nprotected:\n    cvflann::flann_distance_t distType;\n    cvflann::flann_algorithm_t algo;\n    int featureType;\n    void* index;\n};\n\n} } // namespace cv::flann\n\n#endif // __cplusplus\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/nn_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_NNINDEX_H\n#define OPENCV_FLANN_NNINDEX_H\n\n#include <string>\n\n#include \"general.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"params.h\"\n\nnamespace cvflann\n{\n\n/**\n * Nearest-neighbour index base class\n */\ntemplate <typename Distance>\nclass NNIndex\n{\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\npublic:\n\n    virtual ~NNIndex() {}\n\n    /**\n     * \\brief Builds the index\n     */\n    virtual void buildIndex() = 0;\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n#if 0\n        KNNResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.init(indices[i], dists[i]);\n            findNeighbors(resultSet, queries[i], params);\n        }\n#else\n        KNNUniqueResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.clear();\n            findNeighbors(resultSet, queries[i], params);\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices[i], dists[i], knn);\n            else resultSet.copy(indices[i], dists[i], knn);\n        }\n#endif\n    }\n\n    /**\n     * \\brief Perform radius search\n     * \\param[in] query The query point\n     * \\param[out] indices The indinces of the neighbors found within the given radius\n     * \\param[out] dists The distances to the nearest neighbors found\n     * \\param[in] radius The radius used for search\n     * \\param[in] params Search parameters\n     * \\returns Number of neighbors found\n     */\n    virtual int radiusSearch(const Matrix<ElementType>& query, Matrix<int>& indices, Matrix<DistanceType>& dists, float radius, const SearchParams& params)\n    {\n        if (query.rows != 1) {\n            fprintf(stderr, \"I can only search one feature at a time for range search\\n\");\n            return -1;\n        }\n        assert(query.cols == veclen());\n        assert(indices.cols == dists.cols);\n\n        int n = 0;\n        int* indices_ptr = NULL;\n        DistanceType* dists_ptr = NULL;\n        if (indices.cols > 0) {\n            n = (int)indices.cols;\n            indices_ptr = indices[0];\n            dists_ptr = dists[0];\n        }\n\n        RadiusUniqueResultSet<DistanceType> resultSet((DistanceType)radius);\n        resultSet.clear();\n        findNeighbors(resultSet, query[0], params);\n        if (n>0) {\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices_ptr, dists_ptr, n);\n            else resultSet.copy(indices_ptr, dists_ptr, n);\n        }\n\n        return (int)resultSet.size();\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    virtual void saveIndex(FILE* stream) = 0;\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    virtual void loadIndex(FILE* stream) = 0;\n\n    /**\n     * \\returns number of features in this index.\n     */\n    virtual size_t size() const = 0;\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    virtual size_t veclen() const = 0;\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    virtual int usedMemory() const = 0;\n\n    /**\n     * \\returns The index type (kdtree, kmeans,...)\n     */\n    virtual flann_algorithm_t getType() const = 0;\n\n    /**\n     * \\returns The index parameters\n     */\n    virtual IndexParams getParameters() const = 0;\n\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    virtual void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams) = 0;\n};\n\n}\n\n#endif //OPENCV_FLANN_NNINDEX_H\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/object_factory.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_OBJECT_FACTORY_H_\n#define OPENCV_FLANN_OBJECT_FACTORY_H_\n\n#include <map>\n\nnamespace cvflann\n{\n\nclass CreatorNotFound\n{\n};\n\ntemplate<typename BaseClass,\n         typename UniqueIdType,\n         typename ObjectCreator = BaseClass* (*)()>\nclass ObjectFactory\n{\n    typedef ObjectFactory<BaseClass,UniqueIdType,ObjectCreator> ThisClass;\n    typedef std::map<UniqueIdType, ObjectCreator> ObjectRegistry;\n\n    // singleton class, private constructor\n    ObjectFactory() {}\n\npublic:\n\n    bool subscribe(UniqueIdType id, ObjectCreator creator)\n    {\n        if (object_registry.find(id) != object_registry.end()) return false;\n\n        object_registry[id] = creator;\n        return true;\n    }\n\n    bool unregister(UniqueIdType id)\n    {\n        return object_registry.erase(id) == 1;\n    }\n\n    ObjectCreator create(UniqueIdType id)\n    {\n        typename ObjectRegistry::const_iterator iter = object_registry.find(id);\n\n        if (iter == object_registry.end()) {\n            throw CreatorNotFound();\n        }\n\n        return iter->second;\n    }\n\n    static ThisClass& instance()\n    {\n        static ThisClass the_factory;\n        return the_factory;\n    }\nprivate:\n    ObjectRegistry object_registry;\n};\n\n}\n\n#endif /* OPENCV_FLANN_OBJECT_FACTORY_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/params.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_PARAMS_H_\n#define OPENCV_FLANN_PARAMS_H_\n\n#include \"any.h\"\n#include \"general.h\"\n#include <iostream>\n#include <map>\n\n\nnamespace cvflann\n{\n\ntypedef std::map<std::string, any> IndexParams;\n\nstruct SearchParams : public IndexParams\n{\n    SearchParams(int checks = 32, float eps = 0, bool sorted = true )\n    {\n        // how many leafs to visit when searching for neighbours (-1 for unlimited)\n        (*this)[\"checks\"] = checks;\n        // search for eps-approximate neighbours (default: 0)\n        (*this)[\"eps\"] = eps;\n        // only for radius search, require neighbours sorted by distance (default: true)\n        (*this)[\"sorted\"] = sorted;\n    }\n};\n\n\ntemplate<typename T>\nT get_param(const IndexParams& params, std::string name, const T& default_value)\n{\n    IndexParams::const_iterator it = params.find(name);\n    if (it != params.end()) {\n        return it->second.cast<T>();\n    }\n    else {\n        return default_value;\n    }\n}\n\ntemplate<typename T>\nT get_param(const IndexParams& params, std::string name)\n{\n    IndexParams::const_iterator it = params.find(name);\n    if (it != params.end()) {\n        return it->second.cast<T>();\n    }\n    else {\n        throw FLANNException(std::string(\"Missing parameter '\")+name+std::string(\"' in the parameters given\"));\n    }\n}\n\ninline void print_params(const IndexParams& params)\n{\n    IndexParams::const_iterator it;\n\n    for(it=params.begin(); it!=params.end(); ++it) {\n        std::cout << it->first << \" : \" << it->second << std::endl;\n    }\n}\n\n\n\n}\n\n\n#endif /* OPENCV_FLANN_PARAMS_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/random.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_RANDOM_H\n#define OPENCV_FLANN_RANDOM_H\n\n#include <algorithm>\n#include <cstdlib>\n#include <vector>\n\n#include \"general.h\"\n\nnamespace cvflann\n{\n\n/**\n * Seeds the random number generator\n *  @param seed Random seed\n */\ninline void seed_random(unsigned int seed)\n{\n    srand(seed);\n}\n\n/*\n * Generates a random double value.\n */\n/**\n * Generates a random double value.\n * @param high Upper limit\n * @param low Lower limit\n * @return Random double value\n */\ninline double rand_double(double high = 1.0, double low = 0)\n{\n    return low + ((high-low) * (std::rand() / (RAND_MAX + 1.0)));\n}\n\n/**\n * Generates a random integer value.\n * @param high Upper limit\n * @param low Lower limit\n * @return Random integer value\n */\ninline int rand_int(int high = RAND_MAX, int low = 0)\n{\n    return low + (int) ( double(high-low) * (std::rand() / (RAND_MAX + 1.0)));\n}\n\n/**\n * Random number generator that returns a distinct number from\n * the [0,n) interval each time.\n */\nclass UniqueRandom\n{\n    std::vector<int> vals_;\n    int size_;\n    int counter_;\n\npublic:\n    /**\n     * Constructor.\n     * @param n Size of the interval from which to generate\n     * @return\n     */\n    UniqueRandom(int n)\n    {\n        init(n);\n    }\n\n    /**\n     * Initializes the number generator.\n     * @param n the size of the interval from which to generate random numbers.\n     */\n    void init(int n)\n    {\n        // create and initialize an array of size n\n        vals_.resize(n);\n        size_ = n;\n        for (int i = 0; i < size_; ++i) vals_[i] = i;\n\n        // shuffle the elements in the array\n        std::random_shuffle(vals_.begin(), vals_.end());\n\n        counter_ = 0;\n    }\n\n    /**\n     * Return a distinct random integer in greater or equal to 0 and less\n     * than 'n' on each call. It should be called maximum 'n' times.\n     * Returns: a random integer\n     */\n    int next()\n    {\n        if (counter_ == size_) {\n            return -1;\n        }\n        else {\n            return vals_[counter_++];\n        }\n    }\n};\n\n}\n\n#endif //OPENCV_FLANN_RANDOM_H\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/result_set.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_RESULTSET_H\n#define OPENCV_FLANN_RESULTSET_H\n\n#include <algorithm>\n#include <cstring>\n#include <iostream>\n#include <limits>\n#include <set>\n#include <vector>\n\nnamespace cvflann\n{\n\n/* This record represents a branch point when finding neighbors in\n    the tree.  It contains a record of the minimum distance to the query\n    point, as well as the node at which the search resumes.\n */\n\ntemplate <typename T, typename DistanceType>\nstruct BranchStruct\n{\n    T node;           /* Tree node at which search resumes */\n    DistanceType mindist;     /* Minimum distance to query for all nodes below. */\n\n    BranchStruct() {}\n    BranchStruct(const T& aNode, DistanceType dist) : node(aNode), mindist(dist) {}\n\n    bool operator<(const BranchStruct<T, DistanceType>& rhs) const\n    {\n        return mindist<rhs.mindist;\n    }\n};\n\n\ntemplate <typename DistanceType>\nclass ResultSet\n{\npublic:\n    virtual ~ResultSet() {}\n\n    virtual bool full() const = 0;\n\n    virtual void addPoint(DistanceType dist, int index) = 0;\n\n    virtual DistanceType worstDist() const = 0;\n\n};\n\n/**\n * KNNSimpleResultSet does not ensure that the element it holds are unique.\n * Is used in those cases where the nearest neighbour algorithm used does not\n * attempt to insert the same element multiple times.\n */\ntemplate <typename DistanceType>\nclass KNNSimpleResultSet : public ResultSet<DistanceType>\n{\n    int* indices;\n    DistanceType* dists;\n    int capacity;\n    int count;\n    DistanceType worst_distance_;\n\npublic:\n    KNNSimpleResultSet(int capacity_) : capacity(capacity_), count(0)\n    {\n    }\n\n    void init(int* indices_, DistanceType* dists_)\n    {\n        indices = indices_;\n        dists = dists_;\n        count = 0;\n        worst_distance_ = (std::numeric_limits<DistanceType>::max)();\n        dists[capacity-1] = worst_distance_;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return count == capacity;\n    }\n\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist >= worst_distance_) return;\n        int i;\n        for (i=count; i>0; --i) {\n#ifdef FLANN_FIRST_MATCH\n            if ( (dists[i-1]>dist) || ((dist==dists[i-1])&&(indices[i-1]>index)) )\n#else\n            if (dists[i-1]>dist)\n#endif\n            {\n                if (i<capacity) {\n                    dists[i] = dists[i-1];\n                    indices[i] = indices[i-1];\n                }\n            }\n            else break;\n        }\n        if (count < capacity) ++count;\n        dists[i] = dist;\n        indices[i] = index;\n        worst_distance_ = dists[capacity-1];\n    }\n\n    DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\n};\n\n/**\n * K-Nearest neighbour result set. Ensures that the elements inserted are unique\n */\ntemplate <typename DistanceType>\nclass KNNResultSet : public ResultSet<DistanceType>\n{\n    int* indices;\n    DistanceType* dists;\n    int capacity;\n    int count;\n    DistanceType worst_distance_;\n\npublic:\n    KNNResultSet(int capacity_) : capacity(capacity_), count(0)\n    {\n    }\n\n    void init(int* indices_, DistanceType* dists_)\n    {\n        indices = indices_;\n        dists = dists_;\n        count = 0;\n        worst_distance_ = (std::numeric_limits<DistanceType>::max)();\n        dists[capacity-1] = worst_distance_;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return count == capacity;\n    }\n\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist >= worst_distance_) return;\n        int i;\n        for (i = count; i > 0; --i) {\n#ifdef FLANN_FIRST_MATCH\n            if ( (dists[i-1]<=dist) && ((dist!=dists[i-1])||(indices[i-1]<=index)) )\n#else\n            if (dists[i-1]<=dist)\n#endif\n            {\n                // Check for duplicate indices\n                int j = i - 1;\n                while ((j >= 0) && (dists[j] == dist)) {\n                    if (indices[j] == index) {\n                        return;\n                    }\n                    --j;\n                }\n                break;\n            }\n        }\n\n        if (count < capacity) ++count;\n        for (int j = count-1; j > i; --j) {\n            dists[j] = dists[j-1];\n            indices[j] = indices[j-1];\n        }\n        dists[i] = dist;\n        indices[i] = index;\n        worst_distance_ = dists[capacity-1];\n    }\n\n    DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\n};\n\n\n/**\n * A result-set class used when performing a radius based search.\n */\ntemplate <typename DistanceType>\nclass RadiusResultSet : public ResultSet<DistanceType>\n{\n    DistanceType radius;\n    int* indices;\n    DistanceType* dists;\n    size_t capacity;\n    size_t count;\n\npublic:\n    RadiusResultSet(DistanceType radius_, int* indices_, DistanceType* dists_, int capacity_) :\n        radius(radius_), indices(indices_), dists(dists_), capacity(capacity_)\n    {\n        init();\n    }\n\n    ~RadiusResultSet()\n    {\n    }\n\n    void init()\n    {\n        count = 0;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return true;\n    }\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist<radius) {\n            if ((capacity>0)&&(count < capacity)) {\n                dists[count] = dist;\n                indices[count] = index;\n            }\n            count++;\n        }\n    }\n\n    DistanceType worstDist() const\n    {\n        return radius;\n    }\n\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors\n * Faster than KNNResultSet as it uses a binary heap and does not maintain two arrays\n */\ntemplate<typename DistanceType>\nclass UniqueResultSet : public ResultSet<DistanceType>\n{\npublic:\n    struct DistIndex\n    {\n        DistIndex(DistanceType dist, unsigned int index) :\n            dist_(dist), index_(index)\n        {\n        }\n        bool operator<(const DistIndex dist_index) const\n        {\n            return (dist_ < dist_index.dist_) || ((dist_ == dist_index.dist_) && index_ < dist_index.index_);\n        }\n        DistanceType dist_;\n        unsigned int index_;\n    };\n\n    /** Default cosntructor */\n    UniqueResultSet() :\n        worst_distance_(std::numeric_limits<DistanceType>::max())\n    {\n    }\n\n    /** Check the status of the set\n     * @return true if we have k NN\n     */\n    inline bool full() const\n    {\n        return is_full_;\n    }\n\n    /** Remove all elements in the set\n     */\n    virtual void clear() = 0;\n\n    /** Copy the set to two C arrays\n     * @param indices pointer to a C array of indices\n     * @param dist pointer to a C array of distances\n     * @param n_neighbors the number of neighbors to copy\n     */\n    virtual void copy(int* indices, DistanceType* dist, int n_neighbors = -1) const\n    {\n        if (n_neighbors < 0) {\n            for (typename std::set<DistIndex>::const_iterator dist_index = dist_indices_.begin(), dist_index_end =\n                     dist_indices_.end(); dist_index != dist_index_end; ++dist_index, ++indices, ++dist) {\n                *indices = dist_index->index_;\n                *dist = dist_index->dist_;\n            }\n        }\n        else {\n            int i = 0;\n            for (typename std::set<DistIndex>::const_iterator dist_index = dist_indices_.begin(), dist_index_end =\n                     dist_indices_.end(); (dist_index != dist_index_end) && (i < n_neighbors); ++dist_index, ++indices, ++dist, ++i) {\n                *indices = dist_index->index_;\n                *dist = dist_index->dist_;\n            }\n        }\n    }\n\n    /** Copy the set to two C arrays but sort it according to the distance first\n     * @param indices pointer to a C array of indices\n     * @param dist pointer to a C array of distances\n     * @param n_neighbors the number of neighbors to copy\n     */\n    virtual void sortAndCopy(int* indices, DistanceType* dist, int n_neighbors = -1) const\n    {\n        copy(indices, dist, n_neighbors);\n    }\n\n    /** The number of neighbors in the set\n     * @return\n     */\n    size_t size() const\n    {\n        return dist_indices_.size();\n    }\n\n    /** The distance of the furthest neighbor\n     * If we don't have enough neighbors, it returns the max possible value\n     * @return\n     */\n    inline DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\nprotected:\n    /** Flag to say if the set is full */\n    bool is_full_;\n\n    /** The worst distance found so far */\n    DistanceType worst_distance_;\n\n    /** The best candidates so far */\n    std::set<DistIndex> dist_indices_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors\n * Faster than KNNResultSet as it uses a binary heap and does not maintain two arrays\n */\ntemplate<typename DistanceType>\nclass KNNUniqueResultSet : public UniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param capacity the number of neighbors to store at max\n     */\n    KNNUniqueResultSet(unsigned int capacity) : capacity_(capacity)\n    {\n        this->is_full_ = false;\n        this->clear();\n    }\n\n    /** Add a possible candidate to the best neighbors\n     * @param dist distance for that neighbor\n     * @param index index of that neighbor\n     */\n    inline void addPoint(DistanceType dist, int index)\n    {\n        // Don't do anything if we are worse than the worst\n        if (dist >= worst_distance_) return;\n        dist_indices_.insert(DistIndex(dist, index));\n\n        if (is_full_) {\n            if (dist_indices_.size() > capacity_) {\n                dist_indices_.erase(*dist_indices_.rbegin());\n                worst_distance_ = dist_indices_.rbegin()->dist_;\n            }\n        }\n        else if (dist_indices_.size() == capacity_) {\n            is_full_ = true;\n            worst_distance_ = dist_indices_.rbegin()->dist_;\n        }\n    }\n\n    /** Remove all elements in the set\n     */\n    void clear()\n    {\n        dist_indices_.clear();\n        worst_distance_ = std::numeric_limits<DistanceType>::max();\n        is_full_ = false;\n    }\n\nprotected:\n    typedef typename UniqueResultSet<DistanceType>::DistIndex DistIndex;\n    using UniqueResultSet<DistanceType>::is_full_;\n    using UniqueResultSet<DistanceType>::worst_distance_;\n    using UniqueResultSet<DistanceType>::dist_indices_;\n\n    /** The number of neighbors to keep */\n    unsigned int capacity_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the radius nearest neighbors\n * It is more accurate than RadiusResult as it is not limited in the number of neighbors\n */\ntemplate<typename DistanceType>\nclass RadiusUniqueResultSet : public UniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param capacity the number of neighbors to store at max\n     */\n    RadiusUniqueResultSet(DistanceType radius) :\n        radius_(radius)\n    {\n        is_full_ = true;\n    }\n\n    /** Add a possible candidate to the best neighbors\n     * @param dist distance for that neighbor\n     * @param index index of that neighbor\n     */\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist <= radius_) dist_indices_.insert(DistIndex(dist, index));\n    }\n\n    /** Remove all elements in the set\n     */\n    inline void clear()\n    {\n        dist_indices_.clear();\n    }\n\n\n    /** Check the status of the set\n     * @return alwys false\n     */\n    inline bool full() const\n    {\n        return true;\n    }\n\n    /** The distance of the furthest neighbor\n     * If we don't have enough neighbors, it returns the max possible value\n     * @return\n     */\n    inline DistanceType worstDist() const\n    {\n        return radius_;\n    }\nprivate:\n    typedef typename UniqueResultSet<DistanceType>::DistIndex DistIndex;\n    using UniqueResultSet<DistanceType>::dist_indices_;\n    using UniqueResultSet<DistanceType>::is_full_;\n\n    /** The furthest distance a neighbor can be */\n    DistanceType radius_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors within a radius distance\n */\ntemplate<typename DistanceType>\nclass KNNRadiusUniqueResultSet : public KNNUniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param capacity the number of neighbors to store at max\n     */\n    KNNRadiusUniqueResultSet(unsigned int capacity, DistanceType radius)\n    {\n        this->capacity_ = capacity;\n        this->radius_ = radius;\n        this->dist_indices_.reserve(capacity_);\n        this->clear();\n    }\n\n    /** Remove all elements in the set\n     */\n    void clear()\n    {\n        dist_indices_.clear();\n        worst_distance_ = radius_;\n        is_full_ = false;\n    }\nprivate:\n    using KNNUniqueResultSet<DistanceType>::dist_indices_;\n    using KNNUniqueResultSet<DistanceType>::is_full_;\n    using KNNUniqueResultSet<DistanceType>::worst_distance_;\n\n    /** The maximum number of neighbors to consider */\n    unsigned int capacity_;\n\n    /** The maximum distance of a neighbor */\n    DistanceType radius_;\n};\n}\n\n#endif //OPENCV_FLANN_RESULTSET_H\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/sampling.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_SAMPLING_H_\n#define OPENCV_FLANN_SAMPLING_H_\n\n#include \"matrix.h\"\n#include \"random.h\"\n\nnamespace cvflann\n{\n\ntemplate<typename T>\nMatrix<T> random_sample(Matrix<T>& srcMatrix, long size, bool remove = false)\n{\n    Matrix<T> newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols);\n\n    T* src,* dest;\n    for (long i=0; i<size; ++i) {\n        long r = rand_int((int)(srcMatrix.rows-i));\n        dest = newSet[i];\n        src = srcMatrix[r];\n        std::copy(src, src+srcMatrix.cols, dest);\n        if (remove) {\n            src = srcMatrix[srcMatrix.rows-i-1];\n            dest = srcMatrix[r];\n            std::copy(src, src+srcMatrix.cols, dest);\n        }\n    }\n    if (remove) {\n        srcMatrix.rows -= size;\n    }\n    return newSet;\n}\n\ntemplate<typename T>\nMatrix<T> random_sample(const Matrix<T>& srcMatrix, size_t size)\n{\n    UniqueRandom rand((int)srcMatrix.rows);\n    Matrix<T> newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols);\n\n    T* src,* dest;\n    for (size_t i=0; i<size; ++i) {\n        long r = rand.next();\n        dest = newSet[i];\n        src = srcMatrix[r];\n        std::copy(src, src+srcMatrix.cols, dest);\n    }\n    return newSet;\n}\n\n} // namespace\n\n\n#endif /* OPENCV_FLANN_SAMPLING_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/saving.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE NNIndexGOODS 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#ifndef OPENCV_FLANN_SAVING_H_\n#define OPENCV_FLANN_SAVING_H_\n\n#include <cstring>\n#include <vector>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n\n#ifdef FLANN_SIGNATURE_\n#undef FLANN_SIGNATURE_\n#endif\n#define FLANN_SIGNATURE_ \"FLANN_INDEX\"\n\nnamespace cvflann\n{\n\ntemplate <typename T>\nstruct Datatype {};\ntemplate<>\nstruct Datatype<char> { static flann_datatype_t type() { return FLANN_INT8; } };\ntemplate<>\nstruct Datatype<short> { static flann_datatype_t type() { return FLANN_INT16; } };\ntemplate<>\nstruct Datatype<int> { static flann_datatype_t type() { return FLANN_INT32; } };\ntemplate<>\nstruct Datatype<unsigned char> { static flann_datatype_t type() { return FLANN_UINT8; } };\ntemplate<>\nstruct Datatype<unsigned short> { static flann_datatype_t type() { return FLANN_UINT16; } };\ntemplate<>\nstruct Datatype<unsigned int> { static flann_datatype_t type() { return FLANN_UINT32; } };\ntemplate<>\nstruct Datatype<float> { static flann_datatype_t type() { return FLANN_FLOAT32; } };\ntemplate<>\nstruct Datatype<double> { static flann_datatype_t type() { return FLANN_FLOAT64; } };\n\n\n/**\n * Structure representing the index header.\n */\nstruct IndexHeader\n{\n    char signature[16];\n    char version[16];\n    flann_datatype_t data_type;\n    flann_algorithm_t index_type;\n    size_t rows;\n    size_t cols;\n};\n\n/**\n * Saves index header to stream\n *\n * @param stream - Stream to save to\n * @param index - The index to save\n */\ntemplate<typename Distance>\nvoid save_header(FILE* stream, const NNIndex<Distance>& index)\n{\n    IndexHeader header;\n    memset(header.signature, 0, sizeof(header.signature));\n    strcpy(header.signature, FLANN_SIGNATURE_);\n    memset(header.version, 0, sizeof(header.version));\n    strcpy(header.version, FLANN_VERSION_);\n    header.data_type = Datatype<typename Distance::ElementType>::type();\n    header.index_type = index.getType();\n    header.rows = index.size();\n    header.cols = index.veclen();\n\n    std::fwrite(&header, sizeof(header),1,stream);\n}\n\n\n/**\n *\n * @param stream - Stream to load from\n * @return Index header\n */\ninline IndexHeader load_header(FILE* stream)\n{\n    IndexHeader header;\n    size_t read_size = fread(&header,sizeof(header),1,stream);\n\n    if (read_size!=(size_t)1) {\n        throw FLANNException(\"Invalid index file, cannot read\");\n    }\n\n    if (strcmp(header.signature,FLANN_SIGNATURE_)!=0) {\n        throw FLANNException(\"Invalid index file, wrong signature\");\n    }\n\n    return header;\n\n}\n\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const T& value, size_t count = 1)\n{\n    fwrite(&value, sizeof(value),count, stream);\n}\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const cvflann::Matrix<T>& value)\n{\n    fwrite(&value, sizeof(value),1, stream);\n    fwrite(value.data, sizeof(T),value.rows*value.cols, stream);\n}\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const std::vector<T>& value)\n{\n    size_t size = value.size();\n    fwrite(&size, sizeof(size_t), 1, stream);\n    fwrite(&value[0], sizeof(T), size, stream);\n}\n\ntemplate<typename T>\nvoid load_value(FILE* stream, T& value, size_t count = 1)\n{\n    size_t read_cnt = fread(&value, sizeof(value), count, stream);\n    if (read_cnt != count) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\ntemplate<typename T>\nvoid load_value(FILE* stream, cvflann::Matrix<T>& value)\n{\n    size_t read_cnt = fread(&value, sizeof(value), 1, stream);\n    if (read_cnt != 1) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n    value.data = new T[value.rows*value.cols];\n    read_cnt = fread(value.data, sizeof(T), value.rows*value.cols, stream);\n    if (read_cnt != (size_t)(value.rows*value.cols)) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\n\ntemplate<typename T>\nvoid load_value(FILE* stream, std::vector<T>& value)\n{\n    size_t size;\n    size_t read_cnt = fread(&size, sizeof(size_t), 1, stream);\n    if (read_cnt!=1) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n    value.resize(size);\n    read_cnt = fread(&value[0], sizeof(T), size, stream);\n    if (read_cnt != size) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\n}\n\n#endif /* OPENCV_FLANN_SAVING_H_ */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/simplex_downhill.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n#define OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n\nnamespace cvflann\n{\n\n/**\n    Adds val to array vals (and point to array points) and keeping the arrays sorted by vals.\n */\ntemplate <typename T>\nvoid addValue(int pos, float val, float* vals, T* point, T* points, int n)\n{\n    vals[pos] = val;\n    for (int i=0; i<n; ++i) {\n        points[pos*n+i] = point[i];\n    }\n\n    // bubble down\n    int j=pos;\n    while (j>0 && vals[j]<vals[j-1]) {\n        swap(vals[j],vals[j-1]);\n        for (int i=0; i<n; ++i) {\n            swap(points[j*n+i],points[(j-1)*n+i]);\n        }\n        --j;\n    }\n}\n\n\n/**\n    Simplex downhill optimization function.\n    Preconditions: points is a 2D mattrix of size (n+1) x n\n                    func is the cost function taking n an array of n params and returning float\n                    vals is the cost function in the n+1 simplex points, if NULL it will be computed\n\n    Postcondition: returns optimum value and points[0..n] are the optimum parameters\n */\ntemplate <typename T, typename F>\nfloat optimizeSimplexDownhill(T* points, int n, F func, float* vals = NULL )\n{\n    const int MAX_ITERATIONS = 10;\n\n    assert(n>0);\n\n    T* p_o = new T[n];\n    T* p_r = new T[n];\n    T* p_e = new T[n];\n\n    int alpha = 1;\n\n    int iterations = 0;\n\n    bool ownVals = false;\n    if (vals == NULL) {\n        ownVals = true;\n        vals = new float[n+1];\n        for (int i=0; i<n+1; ++i) {\n            float val = func(points+i*n);\n            addValue(i, val, vals, points+i*n, points, n);\n        }\n    }\n    int nn = n*n;\n\n    while (true) {\n\n        if (iterations++ > MAX_ITERATIONS) break;\n\n        // compute average of simplex points (except the highest point)\n        for (int j=0; j<n; ++j) {\n            p_o[j] = 0;\n            for (int i=0; i<n; ++i) {\n                p_o[i] += points[j*n+i];\n            }\n        }\n        for (int i=0; i<n; ++i) {\n            p_o[i] /= n;\n        }\n\n        bool converged = true;\n        for (int i=0; i<n; ++i) {\n            if (p_o[i] != points[nn+i]) {\n                converged = false;\n            }\n        }\n        if (converged) break;\n\n        // trying a reflection\n        for (int i=0; i<n; ++i) {\n            p_r[i] = p_o[i] + alpha*(p_o[i]-points[nn+i]);\n        }\n        float val_r = func(p_r);\n\n        if ((val_r>=vals[0])&&(val_r<vals[n])) {\n            // reflection between second highest and lowest\n            // add it to the simplex\n            Logger::info(\"Choosing reflection\\n\");\n            addValue(n, val_r,vals, p_r, points, n);\n            continue;\n        }\n\n        if (val_r<vals[0]) {\n            // value is smaller than smalest in simplex\n\n            // expand some more to see if it drops further\n            for (int i=0; i<n; ++i) {\n                p_e[i] = 2*p_r[i]-p_o[i];\n            }\n            float val_e = func(p_e);\n\n            if (val_e<val_r) {\n                Logger::info(\"Choosing reflection and expansion\\n\");\n                addValue(n, val_e,vals,p_e,points,n);\n            }\n            else {\n                Logger::info(\"Choosing reflection\\n\");\n                addValue(n, val_r,vals,p_r,points,n);\n            }\n            continue;\n        }\n        if (val_r>=vals[n]) {\n            for (int i=0; i<n; ++i) {\n                p_e[i] = (p_o[i]+points[nn+i])/2;\n            }\n            float val_e = func(p_e);\n\n            if (val_e<vals[n]) {\n                Logger::info(\"Choosing contraction\\n\");\n                addValue(n,val_e,vals,p_e,points,n);\n                continue;\n            }\n        }\n        {\n            Logger::info(\"Full contraction\\n\");\n            for (int j=1; j<=n; ++j) {\n                for (int i=0; i<n; ++i) {\n                    points[j*n+i] = (points[j*n+i]+points[i])/2;\n                }\n                float val = func(points+j*n);\n                addValue(j,val,vals,points+j*n,points,n);\n            }\n        }\n    }\n\n    float bestVal = vals[0];\n\n    delete[] p_r;\n    delete[] p_o;\n    delete[] p_e;\n    if (ownVals) delete[] vals;\n\n    return bestVal;\n}\n\n}\n\n#endif //OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/flann/timer.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_TIMER_H\n#define OPENCV_FLANN_TIMER_H\n\n#include <time.h>\n\n\nnamespace cvflann\n{\n\n/**\n * A start-stop timer class.\n *\n * Can be used to time portions of code.\n */\nclass StartStopTimer\n{\n    clock_t startTime;\n\npublic:\n    /**\n     * Value of the timer.\n     */\n    double value;\n\n\n    /**\n     * Constructor.\n     */\n    StartStopTimer()\n    {\n        reset();\n    }\n\n    /**\n     * Starts the timer.\n     */\n    void start()\n    {\n        startTime = clock();\n    }\n\n    /**\n     * Stops the timer and updates timer value.\n     */\n    void stop()\n    {\n        clock_t stopTime = clock();\n        value += ( (double)stopTime - startTime) / CLOCKS_PER_SEC;\n    }\n\n    /**\n     * Resets the timer value to 0.\n     */\n    void reset()\n    {\n        value = 0;\n    }\n\n};\n\n}\n\n#endif // FLANN_TIMER_H\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/highgui/cap_ios.h",
    "content": "/*  For iOS video I/O\n *  by Eduard Feicho on 29/07/12\n *  Copyright 2012. All 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 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\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n */\n\n#import <UIKit/UIKit.h>\n#import <Accelerate/Accelerate.h>\n#import <AVFoundation/AVFoundation.h>\n#import <ImageIO/ImageIO.h>\n#include \"opencv2/core/core.hpp\"\n\n/////////////////////////////////////// CvAbstractCamera /////////////////////////////////////\n\n@class CvAbstractCamera;\n\n@interface CvAbstractCamera : NSObject\n{\n    AVCaptureSession* captureSession;\n    AVCaptureConnection* videoCaptureConnection;\n    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;\n\n    UIDeviceOrientation currentDeviceOrientation;\n\n    BOOL cameraAvailable;\n    BOOL captureSessionLoaded;\n    BOOL running;\n    BOOL useAVCaptureVideoPreviewLayer;\n\n    AVCaptureDevicePosition defaultAVCaptureDevicePosition;\n    AVCaptureVideoOrientation defaultAVCaptureVideoOrientation;\n    NSString *const defaultAVCaptureSessionPreset;\n\n    int defaultFPS;\n\n    UIView* parentView;\n\n    int imageWidth;\n    int imageHeight;\n}\n\n@property (nonatomic, retain) AVCaptureSession* captureSession;\n@property (nonatomic, retain) AVCaptureConnection* videoCaptureConnection;\n\n@property (nonatomic, readonly) BOOL running;\n@property (nonatomic, readonly) BOOL captureSessionLoaded;\n\n@property (nonatomic, assign) int defaultFPS;\n@property (nonatomic, assign) AVCaptureDevicePosition defaultAVCaptureDevicePosition;\n@property (nonatomic, assign) AVCaptureVideoOrientation defaultAVCaptureVideoOrientation;\n@property (nonatomic, assign) BOOL useAVCaptureVideoPreviewLayer;\n@property (nonatomic, strong) NSString *const defaultAVCaptureSessionPreset;\n\n@property (nonatomic, assign) int imageWidth;\n@property (nonatomic, assign) int imageHeight;\n\n@property (nonatomic, retain) UIView* parentView;\n\n- (void)start;\n- (void)stop;\n- (void)switchCameras;\n\n- (id)initWithParentView:(UIView*)parent;\n\n- (void)createCaptureOutput;\n- (void)createVideoPreviewLayer;\n- (void)updateOrientation;\n\n- (void)lockFocus;\n- (void)unlockFocus;\n- (void)lockExposure;\n- (void)unlockExposure;\n- (void)lockBalance;\n- (void)unlockBalance;\n\n@end\n\n///////////////////////////////// CvVideoCamera ///////////////////////////////////////////\n\n@class CvVideoCamera;\n\n@protocol CvVideoCameraDelegate <NSObject>\n\n#ifdef __cplusplus\n// delegate method for processing image frames\n- (void)processImage:(cv::Mat&)image;\n#endif\n\n@end\n\n@interface CvVideoCamera : CvAbstractCamera<AVCaptureVideoDataOutputSampleBufferDelegate>\n{\n    AVCaptureVideoDataOutput *videoDataOutput;\n\n    dispatch_queue_t videoDataOutputQueue;\n    CALayer *customPreviewLayer;\n\n    BOOL grayscaleMode;\n\n    BOOL recordVideo;\n    BOOL rotateVideo;\n    AVAssetWriterInput* recordAssetWriterInput;\n    AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor;\n    AVAssetWriter* recordAssetWriter;\n\n    CMTime lastSampleTime;\n\n}\n\n@property (nonatomic, assign) id<CvVideoCameraDelegate> delegate;\n@property (nonatomic, assign) BOOL grayscaleMode;\n\n@property (nonatomic, assign) BOOL recordVideo;\n@property (nonatomic, assign) BOOL rotateVideo;\n@property (nonatomic, retain) AVAssetWriterInput* recordAssetWriterInput;\n@property (nonatomic, retain) AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor;\n@property (nonatomic, retain) AVAssetWriter* recordAssetWriter;\n\n- (void)adjustLayoutToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;\n- (void)layoutPreviewLayer;\n- (void)saveVideo;\n- (NSURL *)videoFileURL;\n\n\n@end\n\n///////////////////////////////// CvPhotoCamera ///////////////////////////////////////////\n\n@class CvPhotoCamera;\n\n@protocol CvPhotoCameraDelegate <NSObject>\n\n- (void)photoCamera:(CvPhotoCamera*)photoCamera capturedImage:(UIImage *)image;\n- (void)photoCameraCancel:(CvPhotoCamera*)photoCamera;\n\n@end\n\n@interface CvPhotoCamera : CvAbstractCamera\n{\n    AVCaptureStillImageOutput *stillImageOutput;\n}\n\n@property (nonatomic, assign) id<CvPhotoCameraDelegate> delegate;\n\n- (void)takePicture;\n\n@end\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/highgui/highgui.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HIGHGUI_HPP__\n#define __OPENCV_HIGHGUI_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/highgui/highgui_c.h\"\n\n#ifdef __cplusplus\n\nstruct CvCapture;\nstruct CvVideoWriter;\n\nnamespace cv\n{\n\nenum {\n    // Flags for namedWindow\n    WINDOW_NORMAL   = CV_WINDOW_NORMAL,   // the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size\n    WINDOW_AUTOSIZE = CV_WINDOW_AUTOSIZE, // the user cannot resize the window, the size is constrainted by the image displayed\n    WINDOW_OPENGL   = CV_WINDOW_OPENGL,   // window with opengl support\n\n    // Flags for set / getWindowProperty\n    WND_PROP_FULLSCREEN   = CV_WND_PROP_FULLSCREEN,  // fullscreen property\n    WND_PROP_AUTOSIZE     = CV_WND_PROP_AUTOSIZE,    // autosize property\n    WND_PROP_ASPECT_RATIO = CV_WND_PROP_ASPECTRATIO, // window's aspect ration\n    WND_PROP_OPENGL       = CV_WND_PROP_OPENGL       // opengl support\n};\n\nCV_EXPORTS_W void namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE);\nCV_EXPORTS_W void destroyWindow(const string& winname);\nCV_EXPORTS_W void destroyAllWindows();\n\nCV_EXPORTS_W int startWindowThread();\n\nCV_EXPORTS_W int waitKey(int delay = 0);\n\nCV_EXPORTS_W void imshow(const string& winname, InputArray mat);\n\nCV_EXPORTS_W void resizeWindow(const string& winname, int width, int height);\nCV_EXPORTS_W void moveWindow(const string& winname, int x, int y);\n\nCV_EXPORTS_W void setWindowProperty(const string& winname, int prop_id, double prop_value);//YV\nCV_EXPORTS_W double getWindowProperty(const string& winname, int prop_id);//YV\n\nenum\n{\n    EVENT_MOUSEMOVE      =0,\n    EVENT_LBUTTONDOWN    =1,\n    EVENT_RBUTTONDOWN    =2,\n    EVENT_MBUTTONDOWN    =3,\n    EVENT_LBUTTONUP      =4,\n    EVENT_RBUTTONUP      =5,\n    EVENT_MBUTTONUP      =6,\n    EVENT_LBUTTONDBLCLK  =7,\n    EVENT_RBUTTONDBLCLK  =8,\n    EVENT_MBUTTONDBLCLK  =9\n};\n\nenum\n{\n    EVENT_FLAG_LBUTTON   =1,\n    EVENT_FLAG_RBUTTON   =2,\n    EVENT_FLAG_MBUTTON   =4,\n    EVENT_FLAG_CTRLKEY   =8,\n    EVENT_FLAG_SHIFTKEY  =16,\n    EVENT_FLAG_ALTKEY    =32\n};\n\ntypedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);\n\n//! assigns callback for mouse events\nCV_EXPORTS void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata = 0);\n\n\ntypedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);\n\nCV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname,\n                              int* value, int count,\n                              TrackbarCallback onChange = 0,\n                              void* userdata = 0);\n\nCV_EXPORTS_W int getTrackbarPos(const string& trackbarname, const string& winname);\nCV_EXPORTS_W void setTrackbarPos(const string& trackbarname, const string& winname, int pos);\n\n// OpenGL support\n\ntypedef void (*OpenGlDrawCallback)(void* userdata);\nCV_EXPORTS void setOpenGlDrawCallback(const string& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0);\n\nCV_EXPORTS void setOpenGlContext(const string& winname);\n\nCV_EXPORTS void updateWindow(const string& winname);\n\n// < Deperecated\nCV_EXPORTS void pointCloudShow(const string& winname, const GlCamera& camera, const GlArrays& arr);\nCV_EXPORTS void pointCloudShow(const string& winname, const GlCamera& camera, InputArray points, InputArray colors = noArray());\n// >\n\n//Only for Qt\n\nCV_EXPORTS CvFont fontQt(const string& nameFont, int pointSize=-1,\n                         Scalar color=Scalar::all(0), int weight=CV_FONT_NORMAL,\n                         int style=CV_STYLE_NORMAL, int spacing=0);\nCV_EXPORTS void addText( const Mat& img, const string& text, Point org, CvFont font);\n\nCV_EXPORTS void displayOverlay(const string& winname, const string& text, int delayms CV_DEFAULT(0));\nCV_EXPORTS void displayStatusBar(const string& winname, const string& text, int delayms CV_DEFAULT(0));\n\nCV_EXPORTS void saveWindowParameters(const string& windowName);\nCV_EXPORTS void loadWindowParameters(const string& windowName);\nCV_EXPORTS  int startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);\nCV_EXPORTS  void stopLoop();\n\ntypedef void (CV_CDECL *ButtonCallback)(int state, void* userdata);\nCV_EXPORTS int createButton( const string& bar_name, ButtonCallback on_change,\n                             void* userdata=NULL, int type=CV_PUSH_BUTTON,\n                             bool initial_button_state=0);\n\n//-------------------------\n\nenum\n{\n    // 8bit, color or not\n    IMREAD_UNCHANGED  =-1,\n    // 8bit, gray\n    IMREAD_GRAYSCALE  =0,\n    // ?, color\n    IMREAD_COLOR      =1,\n    // any depth, ?\n    IMREAD_ANYDEPTH   =2,\n    // ?, any color\n    IMREAD_ANYCOLOR   =4\n};\n\nenum\n{\n    IMWRITE_JPEG_QUALITY =1,\n    IMWRITE_PNG_COMPRESSION =16,\n    IMWRITE_PNG_STRATEGY =17,\n    IMWRITE_PNG_BILEVEL =18,\n    IMWRITE_PNG_STRATEGY_DEFAULT =0,\n    IMWRITE_PNG_STRATEGY_FILTERED =1,\n    IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2,\n    IMWRITE_PNG_STRATEGY_RLE =3,\n    IMWRITE_PNG_STRATEGY_FIXED =4,\n    IMWRITE_PXM_BINARY =32\n};\n\nCV_EXPORTS_W Mat imread( const string& filename, int flags=1 );\nCV_EXPORTS_W bool imwrite( const string& filename, InputArray img,\n              const vector<int>& params=vector<int>());\nCV_EXPORTS_W Mat imdecode( InputArray buf, int flags );\nCV_EXPORTS Mat imdecode( InputArray buf, int flags, Mat* dst );\nCV_EXPORTS_W bool imencode( const string& ext, InputArray img,\n                            CV_OUT vector<uchar>& buf,\n                            const vector<int>& params=vector<int>());\n\n#ifndef CV_NO_VIDEO_CAPTURE_CPP_API\n\ntemplate<> void CV_EXPORTS Ptr<CvCapture>::delete_obj();\ntemplate<> void CV_EXPORTS Ptr<CvVideoWriter>::delete_obj();\n\nclass CV_EXPORTS_W VideoCapture\n{\npublic:\n    CV_WRAP VideoCapture();\n    CV_WRAP VideoCapture(const string& filename);\n    CV_WRAP VideoCapture(int device);\n\n    virtual ~VideoCapture();\n    CV_WRAP virtual bool open(const string& filename);\n    CV_WRAP virtual bool open(int device);\n    CV_WRAP virtual bool isOpened() const;\n    CV_WRAP virtual void release();\n\n    CV_WRAP virtual bool grab();\n    CV_WRAP virtual bool retrieve(CV_OUT Mat& image, int channel=0);\n    virtual VideoCapture& operator >> (CV_OUT Mat& image);\n    CV_WRAP virtual bool read(CV_OUT Mat& image);\n\n    CV_WRAP virtual bool set(int propId, double value);\n    CV_WRAP virtual double get(int propId);\n\nprotected:\n    Ptr<CvCapture> cap;\n};\n\n\nclass CV_EXPORTS_W VideoWriter\n{\npublic:\n    CV_WRAP VideoWriter();\n    CV_WRAP VideoWriter(const string& filename, int fourcc, double fps,\n                Size frameSize, bool isColor=true);\n\n    virtual ~VideoWriter();\n    CV_WRAP virtual bool open(const string& filename, int fourcc, double fps,\n                      Size frameSize, bool isColor=true);\n    CV_WRAP virtual bool isOpened() const;\n    CV_WRAP virtual void release();\n    virtual VideoWriter& operator << (const Mat& image);\n    CV_WRAP virtual void write(const Mat& image);\n\nprotected:\n    Ptr<CvVideoWriter> writer;\n};\n\n#endif\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/highgui/highgui_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HIGHGUI_H__\n#define __OPENCV_HIGHGUI_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/****************************************************************************************\\\n*                                  Basic GUI functions                                   *\n\\****************************************************************************************/\n//YV\n//-----------New for Qt\n/* For font */\nenum {  CV_FONT_LIGHT           = 25,//QFont::Light,\n        CV_FONT_NORMAL          = 50,//QFont::Normal,\n        CV_FONT_DEMIBOLD        = 63,//QFont::DemiBold,\n        CV_FONT_BOLD            = 75,//QFont::Bold,\n        CV_FONT_BLACK           = 87 //QFont::Black\n};\n\nenum {  CV_STYLE_NORMAL         = 0,//QFont::StyleNormal,\n        CV_STYLE_ITALIC         = 1,//QFont::StyleItalic,\n        CV_STYLE_OBLIQUE        = 2 //QFont::StyleOblique\n};\n/* ---------*/\n\n//for color cvScalar(blue_component, green_component, red\\_component[, alpha_component])\n//and alpha= 0 <-> 0xFF (not transparent <-> transparent)\nCVAPI(CvFont) cvFontQt(const char* nameFont, int pointSize CV_DEFAULT(-1), CvScalar color CV_DEFAULT(cvScalarAll(0)), int weight CV_DEFAULT(CV_FONT_NORMAL),  int style CV_DEFAULT(CV_STYLE_NORMAL), int spacing CV_DEFAULT(0));\n\nCVAPI(void) cvAddText(const CvArr* img, const char* text, CvPoint org, CvFont *arg2);\n\nCVAPI(void) cvDisplayOverlay(const char* name, const char* text, int delayms CV_DEFAULT(0));\nCVAPI(void) cvDisplayStatusBar(const char* name, const char* text, int delayms CV_DEFAULT(0));\n\nCVAPI(void) cvSaveWindowParameters(const char* name);\nCVAPI(void) cvLoadWindowParameters(const char* name);\nCVAPI(int) cvStartLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);\nCVAPI(void) cvStopLoop( void );\n\ntypedef void (CV_CDECL *CvButtonCallback)(int state, void* userdata);\nenum {CV_PUSH_BUTTON = 0, CV_CHECKBOX = 1, CV_RADIOBOX = 2};\nCVAPI(int) cvCreateButton( const char* button_name CV_DEFAULT(NULL),CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL) , int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0));\n//----------------------\n\n\n/* this function is used to set some external parameters in case of X Window */\nCVAPI(int) cvInitSystem( int argc, char** argv );\n\nCVAPI(int) cvStartWindowThread( void );\n\n// ---------  YV ---------\nenum\n{\n    //These 3 flags are used by cvSet/GetWindowProperty\n    CV_WND_PROP_FULLSCREEN = 0, //to change/get window's fullscreen property\n    CV_WND_PROP_AUTOSIZE   = 1, //to change/get window's autosize property\n    CV_WND_PROP_ASPECTRATIO= 2, //to change/get window's aspectratio property\n    CV_WND_PROP_OPENGL     = 3, //to change/get window's opengl support\n\n    //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty\n    CV_WINDOW_NORMAL       = 0x00000000, //the user can resize the window (no constraint)  / also use to switch a fullscreen window to a normal size\n    CV_WINDOW_AUTOSIZE     = 0x00000001, //the user cannot resize the window, the size is constrainted by the image displayed\n    CV_WINDOW_OPENGL       = 0x00001000, //window with opengl support\n\n    //Those flags are only for Qt\n    CV_GUI_EXPANDED         = 0x00000000, //status bar and tool bar\n    CV_GUI_NORMAL           = 0x00000010, //old fashious way\n\n    //These 3 flags are used by cvNamedWindow and cvSet/GetWindowProperty\n    CV_WINDOW_FULLSCREEN   = 1,//change the window to fullscreen\n    CV_WINDOW_FREERATIO    = 0x00000100,//the image expends as much as it can (no ratio constraint)\n    CV_WINDOW_KEEPRATIO    = 0x00000000//the ration image is respected.\n};\n\n/* create window */\nCVAPI(int) cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );\n\n/* Set and Get Property of the window */\nCVAPI(void) cvSetWindowProperty(const char* name, int prop_id, double prop_value);\nCVAPI(double) cvGetWindowProperty(const char* name, int prop_id);\n\n/* display image within window (highgui windows remember their content) */\nCVAPI(void) cvShowImage( const char* name, const CvArr* image );\n\n/* resize/move window */\nCVAPI(void) cvResizeWindow( const char* name, int width, int height );\nCVAPI(void) cvMoveWindow( const char* name, int x, int y );\n\n\n/* destroy window and all the trackers associated with it */\nCVAPI(void) cvDestroyWindow( const char* name );\n\nCVAPI(void) cvDestroyAllWindows(void);\n\n/* get native window handle (HWND in case of Win32 and Widget in case of X Window) */\nCVAPI(void*) cvGetWindowHandle( const char* name );\n\n/* get name of highgui window given its native handle */\nCVAPI(const char*) cvGetWindowName( void* window_handle );\n\n\ntypedef void (CV_CDECL *CvTrackbarCallback)(int pos);\n\n/* create trackbar and display it on top of given window, set callback */\nCVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name,\n                             int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL));\n\ntypedef void (CV_CDECL *CvTrackbarCallback2)(int pos, void* userdata);\n\nCVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name,\n                              int* value, int count, CvTrackbarCallback2 on_change,\n                              void* userdata CV_DEFAULT(0));\n\n/* retrieve or set trackbar position */\nCVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name );\nCVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );\n\nenum\n{\n    CV_EVENT_MOUSEMOVE      =0,\n    CV_EVENT_LBUTTONDOWN    =1,\n    CV_EVENT_RBUTTONDOWN    =2,\n    CV_EVENT_MBUTTONDOWN    =3,\n    CV_EVENT_LBUTTONUP      =4,\n    CV_EVENT_RBUTTONUP      =5,\n    CV_EVENT_MBUTTONUP      =6,\n    CV_EVENT_LBUTTONDBLCLK  =7,\n    CV_EVENT_RBUTTONDBLCLK  =8,\n    CV_EVENT_MBUTTONDBLCLK  =9\n};\n\nenum\n{\n    CV_EVENT_FLAG_LBUTTON   =1,\n    CV_EVENT_FLAG_RBUTTON   =2,\n    CV_EVENT_FLAG_MBUTTON   =4,\n    CV_EVENT_FLAG_CTRLKEY   =8,\n    CV_EVENT_FLAG_SHIFTKEY  =16,\n    CV_EVENT_FLAG_ALTKEY    =32\n};\n\ntypedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param);\n\n/* assign callback for mouse events */\nCVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,\n                                void* param CV_DEFAULT(NULL));\n\nenum\n{\n/* 8bit, color or not */\n    CV_LOAD_IMAGE_UNCHANGED  =-1,\n/* 8bit, gray */\n    CV_LOAD_IMAGE_GRAYSCALE  =0,\n/* ?, color */\n    CV_LOAD_IMAGE_COLOR      =1,\n/* any depth, ? */\n    CV_LOAD_IMAGE_ANYDEPTH   =2,\n/* ?, any color */\n    CV_LOAD_IMAGE_ANYCOLOR   =4\n};\n\n/* load image from file\n  iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED\n  overrides the other flags\n  using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED\n  unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit\n*/\nCVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\nCVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\n\nenum\n{\n    CV_IMWRITE_JPEG_QUALITY =1,\n    CV_IMWRITE_PNG_COMPRESSION =16,\n    CV_IMWRITE_PNG_STRATEGY =17,\n    CV_IMWRITE_PNG_BILEVEL =18,\n    CV_IMWRITE_PNG_STRATEGY_DEFAULT =0,\n    CV_IMWRITE_PNG_STRATEGY_FILTERED =1,\n    CV_IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2,\n    CV_IMWRITE_PNG_STRATEGY_RLE =3,\n    CV_IMWRITE_PNG_STRATEGY_FIXED =4,\n    CV_IMWRITE_PXM_BINARY =32\n};\n\n/* save image to file */\nCVAPI(int) cvSaveImage( const char* filename, const CvArr* image,\n                        const int* params CV_DEFAULT(0) );\n\n/* decode image stored in the buffer */\nCVAPI(IplImage*) cvDecodeImage( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\nCVAPI(CvMat*) cvDecodeImageM( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\n\n/* encode image and store the result as a byte vector (single-row 8uC1 matrix) */\nCVAPI(CvMat*) cvEncodeImage( const char* ext, const CvArr* image,\n                             const int* params CV_DEFAULT(0) );\n\nenum\n{\n    CV_CVTIMG_FLIP      =1,\n    CV_CVTIMG_SWAP_RB   =2\n};\n\n/* utility function: convert one image to another with optional vertical flip */\nCVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0));\n\n/* wait for key event infinitely (delay<=0) or for \"delay\" milliseconds */\nCVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));\n\n// OpenGL support\n\ntypedef void (CV_CDECL *CvOpenGlDrawCallback)(void* userdata);\nCVAPI(void) cvSetOpenGlDrawCallback(const char* window_name, CvOpenGlDrawCallback callback, void* userdata CV_DEFAULT(NULL));\n\nCVAPI(void) cvSetOpenGlContext(const char* window_name);\nCVAPI(void) cvUpdateWindow(const char* window_name);\n\n\n/****************************************************************************************\\\n*                         Working with Video Files and Cameras                           *\n\\****************************************************************************************/\n\n/* \"black box\" capture structure */\ntypedef struct CvCapture CvCapture;\n\n/* start capturing frames from video file */\nCVAPI(CvCapture*) cvCreateFileCapture( const char* filename );\n\nenum\n{\n    CV_CAP_ANY      =0,     // autodetect\n\n    CV_CAP_MIL      =100,   // MIL proprietary drivers\n\n    CV_CAP_VFW      =200,   // platform native\n    CV_CAP_V4L      =200,\n    CV_CAP_V4L2     =200,\n\n    CV_CAP_FIREWARE =300,   // IEEE 1394 drivers\n    CV_CAP_FIREWIRE =300,\n    CV_CAP_IEEE1394 =300,\n    CV_CAP_DC1394   =300,\n    CV_CAP_CMU1394  =300,\n\n    CV_CAP_STEREO   =400,   // TYZX proprietary drivers\n    CV_CAP_TYZX     =400,\n    CV_TYZX_LEFT    =400,\n    CV_TYZX_RIGHT   =401,\n    CV_TYZX_COLOR   =402,\n    CV_TYZX_Z       =403,\n\n    CV_CAP_QT       =500,   // QuickTime\n\n    CV_CAP_UNICAP   =600,   // Unicap drivers\n\n    CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)\n    CV_CAP_MSMF     =1400,  // Microsoft Media Foundation (via videoInput)\n\n    CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK\n\n    CV_CAP_OPENNI   =900,   // OpenNI (for Kinect)\n    CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)\n\n    CV_CAP_ANDROID  =1000,  // Android\n    CV_CAP_ANDROID_BACK =CV_CAP_ANDROID+99, // Android back camera\n    CV_CAP_ANDROID_FRONT =CV_CAP_ANDROID+98, // Android front camera\n\n    CV_CAP_XIAPI    =1100,   // XIMEA Camera API\n\n    CV_CAP_AVFOUNDATION = 1200,  // AVFoundation framework for iOS (OS X Lion will have the same API)\n\n    CV_CAP_GIGANETIX = 1300,  // Smartek Giganetix GigEVisionSDK\n\n    CV_CAP_INTELPERC = 1500 // Intel Perceptual Computing SDK\n};\n\n/* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */\nCVAPI(CvCapture*) cvCreateCameraCapture( int index );\n\n/* grab a frame, return 1 on success, 0 on fail.\n  this function is thought to be fast               */\nCVAPI(int) cvGrabFrame( CvCapture* capture );\n\n/* get the frame grabbed with cvGrabFrame(..)\n  This function may apply some frame processing like\n  frame decompression, flipping etc.\n  !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */\nCVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture, int streamIdx CV_DEFAULT(0) );\n\n/* Just a combination of cvGrabFrame and cvRetrieveFrame\n   !!!DO NOT RELEASE or MODIFY the retrieved frame!!!      */\nCVAPI(IplImage*) cvQueryFrame( CvCapture* capture );\n\n/* stop capturing/reading and free resources */\nCVAPI(void) cvReleaseCapture( CvCapture** capture );\n\nenum\n{\n    // modes of the controlling registers (can be: auto, manual, auto single push, absolute Latter allowed with any other mode)\n    // every feature can have only one mode turned on at a time\n    CV_CAP_PROP_DC1394_OFF         = -4,  //turn the feature off (not controlled manually nor automatically)\n    CV_CAP_PROP_DC1394_MODE_MANUAL = -3, //set automatically when a value of the feature is set by the user\n    CV_CAP_PROP_DC1394_MODE_AUTO = -2,\n    CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1,\n    CV_CAP_PROP_POS_MSEC       =0,\n    CV_CAP_PROP_POS_FRAMES     =1,\n    CV_CAP_PROP_POS_AVI_RATIO  =2,\n    CV_CAP_PROP_FRAME_WIDTH    =3,\n    CV_CAP_PROP_FRAME_HEIGHT   =4,\n    CV_CAP_PROP_FPS            =5,\n    CV_CAP_PROP_FOURCC         =6,\n    CV_CAP_PROP_FRAME_COUNT    =7,\n    CV_CAP_PROP_FORMAT         =8,\n    CV_CAP_PROP_MODE           =9,\n    CV_CAP_PROP_BRIGHTNESS    =10,\n    CV_CAP_PROP_CONTRAST      =11,\n    CV_CAP_PROP_SATURATION    =12,\n    CV_CAP_PROP_HUE           =13,\n    CV_CAP_PROP_GAIN          =14,\n    CV_CAP_PROP_EXPOSURE      =15,\n    CV_CAP_PROP_CONVERT_RGB   =16,\n    CV_CAP_PROP_WHITE_BALANCE_BLUE_U =17,\n    CV_CAP_PROP_RECTIFICATION =18,\n    CV_CAP_PROP_MONOCROME     =19,\n    CV_CAP_PROP_SHARPNESS     =20,\n    CV_CAP_PROP_AUTO_EXPOSURE =21, // exposure control done by camera,\n                                   // user can adjust refernce level\n                                   // using this feature\n    CV_CAP_PROP_GAMMA         =22,\n    CV_CAP_PROP_TEMPERATURE   =23,\n    CV_CAP_PROP_TRIGGER       =24,\n    CV_CAP_PROP_TRIGGER_DELAY =25,\n    CV_CAP_PROP_WHITE_BALANCE_RED_V =26,\n    CV_CAP_PROP_ZOOM          =27,\n    CV_CAP_PROP_FOCUS         =28,\n    CV_CAP_PROP_GUID          =29,\n    CV_CAP_PROP_ISO_SPEED     =30,\n    CV_CAP_PROP_MAX_DC1394    =31,\n    CV_CAP_PROP_BACKLIGHT     =32,\n    CV_CAP_PROP_PAN           =33,\n    CV_CAP_PROP_TILT          =34,\n    CV_CAP_PROP_ROLL          =35,\n    CV_CAP_PROP_IRIS          =36,\n    CV_CAP_PROP_SETTINGS      =37,\n\n    CV_CAP_PROP_AUTOGRAB      =1024, // property for highgui class CvCapture_Android only\n    CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING=1025, // readonly, tricky property, returns cpnst char* indeed\n    CV_CAP_PROP_PREVIEW_FORMAT=1026, // readonly, tricky property, returns cpnst char* indeed\n\n    // OpenNI map generators\n    CV_CAP_OPENNI_DEPTH_GENERATOR = 1 << 31,\n    CV_CAP_OPENNI_IMAGE_GENERATOR = 1 << 30,\n    CV_CAP_OPENNI_GENERATORS_MASK = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_OPENNI_IMAGE_GENERATOR,\n\n    // Properties of cameras available through OpenNI interfaces\n    CV_CAP_PROP_OPENNI_OUTPUT_MODE     = 100,\n    CV_CAP_PROP_OPENNI_FRAME_MAX_DEPTH = 101, // in mm\n    CV_CAP_PROP_OPENNI_BASELINE        = 102, // in mm\n    CV_CAP_PROP_OPENNI_FOCAL_LENGTH    = 103, // in pixels\n    CV_CAP_PROP_OPENNI_REGISTRATION    = 104, // flag\n    CV_CAP_PROP_OPENNI_REGISTRATION_ON = CV_CAP_PROP_OPENNI_REGISTRATION, // flag that synchronizes the remapping depth map to image map\n                                                                          // by changing depth generator's view point (if the flag is \"on\") or\n                                                                          // sets this view point to its normal one (if the flag is \"off\").\n    CV_CAP_PROP_OPENNI_APPROX_FRAME_SYNC = 105,\n    CV_CAP_PROP_OPENNI_MAX_BUFFER_SIZE   = 106,\n    CV_CAP_PROP_OPENNI_CIRCLE_BUFFER     = 107,\n    CV_CAP_PROP_OPENNI_MAX_TIME_DURATION = 108,\n\n    CV_CAP_PROP_OPENNI_GENERATOR_PRESENT = 109,\n\n    CV_CAP_OPENNI_IMAGE_GENERATOR_PRESENT         = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_GENERATOR_PRESENT,\n    CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE     = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_OUTPUT_MODE,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_BASELINE        = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_BASELINE,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH    = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_FOCAL_LENGTH,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION    = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION,\n\n    // Properties of cameras available through GStreamer interface\n    CV_CAP_GSTREAMER_QUEUE_LENGTH   = 200, // default is 1\n    CV_CAP_PROP_PVAPI_MULTICASTIP   = 300, // ip for anable multicast master mode. 0 for disable multicast\n\n    // Properties of cameras available through XIMEA SDK interface\n    CV_CAP_PROP_XI_DOWNSAMPLING  = 400,      // Change image resolution by binning or skipping.\n    CV_CAP_PROP_XI_DATA_FORMAT   = 401,       // Output data format.\n    CV_CAP_PROP_XI_OFFSET_X      = 402,      // Horizontal offset from the origin to the area of interest (in pixels).\n    CV_CAP_PROP_XI_OFFSET_Y      = 403,      // Vertical offset from the origin to the area of interest (in pixels).\n    CV_CAP_PROP_XI_TRG_SOURCE    = 404,      // Defines source of trigger.\n    CV_CAP_PROP_XI_TRG_SOFTWARE  = 405,      // Generates an internal trigger. PRM_TRG_SOURCE must be set to TRG_SOFTWARE.\n    CV_CAP_PROP_XI_GPI_SELECTOR  = 406,      // Selects general purpose input\n    CV_CAP_PROP_XI_GPI_MODE      = 407,      // Set general purpose input mode\n    CV_CAP_PROP_XI_GPI_LEVEL     = 408,      // Get general purpose level\n    CV_CAP_PROP_XI_GPO_SELECTOR  = 409,      // Selects general purpose output\n    CV_CAP_PROP_XI_GPO_MODE      = 410,      // Set general purpose output mode\n    CV_CAP_PROP_XI_LED_SELECTOR  = 411,      // Selects camera signalling LED\n    CV_CAP_PROP_XI_LED_MODE      = 412,      // Define camera signalling LED functionality\n    CV_CAP_PROP_XI_MANUAL_WB     = 413,      // Calculates White Balance(must be called during acquisition)\n    CV_CAP_PROP_XI_AUTO_WB       = 414,      // Automatic white balance\n    CV_CAP_PROP_XI_AEAG          = 415,      // Automatic exposure/gain\n    CV_CAP_PROP_XI_EXP_PRIORITY  = 416,      // Exposure priority (0.5 - exposure 50%, gain 50%).\n    CV_CAP_PROP_XI_AE_MAX_LIMIT  = 417,      // Maximum limit of exposure in AEAG procedure\n    CV_CAP_PROP_XI_AG_MAX_LIMIT  = 418,      // Maximum limit of gain in AEAG procedure\n    CV_CAP_PROP_XI_AEAG_LEVEL    = 419,       // Average intensity of output signal AEAG should achieve(in %)\n    CV_CAP_PROP_XI_TIMEOUT       = 420,       // Image capture timeout in milliseconds\n\n    // Properties for Android cameras\n    CV_CAP_PROP_ANDROID_FLASH_MODE = 8001,\n    CV_CAP_PROP_ANDROID_FOCUS_MODE = 8002,\n    CV_CAP_PROP_ANDROID_WHITE_BALANCE = 8003,\n    CV_CAP_PROP_ANDROID_ANTIBANDING = 8004,\n    CV_CAP_PROP_ANDROID_FOCAL_LENGTH = 8005,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_NEAR = 8006,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_OPTIMAL = 8007,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_FAR = 8008,\n    CV_CAP_PROP_ANDROID_EXPOSE_LOCK = 8009,\n    CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK = 8010,\n\n    // Properties of cameras available through AVFOUNDATION interface\n    CV_CAP_PROP_IOS_DEVICE_FOCUS = 9001,\n    CV_CAP_PROP_IOS_DEVICE_EXPOSURE = 9002,\n    CV_CAP_PROP_IOS_DEVICE_FLASH = 9003,\n    CV_CAP_PROP_IOS_DEVICE_WHITEBALANCE = 9004,\n    CV_CAP_PROP_IOS_DEVICE_TORCH = 9005,\n\n    // Properties of cameras available through Smartek Giganetix Ethernet Vision interface\n    /* --- Vladimir Litvinenko (litvinenko.vladimir@gmail.com) --- */\n    CV_CAP_PROP_GIGA_FRAME_OFFSET_X = 10001,\n    CV_CAP_PROP_GIGA_FRAME_OFFSET_Y = 10002,\n    CV_CAP_PROP_GIGA_FRAME_WIDTH_MAX = 10003,\n    CV_CAP_PROP_GIGA_FRAME_HEIGH_MAX = 10004,\n    CV_CAP_PROP_GIGA_FRAME_SENS_WIDTH = 10005,\n    CV_CAP_PROP_GIGA_FRAME_SENS_HEIGH = 10006,\n\n    CV_CAP_PROP_INTELPERC_PROFILE_COUNT               = 11001,\n    CV_CAP_PROP_INTELPERC_PROFILE_IDX                 = 11002,\n    CV_CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE  = 11003,\n    CV_CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE      = 11004,\n    CV_CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD  = 11005,\n    CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_HORZ     = 11006,\n    CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_VERT     = 11007,\n\n    // Intel PerC streams\n    CV_CAP_INTELPERC_DEPTH_GENERATOR = 1 << 29,\n    CV_CAP_INTELPERC_IMAGE_GENERATOR = 1 << 28,\n    CV_CAP_INTELPERC_GENERATORS_MASK = CV_CAP_INTELPERC_DEPTH_GENERATOR + CV_CAP_INTELPERC_IMAGE_GENERATOR\n};\n\nenum\n{\n    // Data given from depth generator.\n    CV_CAP_OPENNI_DEPTH_MAP                 = 0, // Depth values in mm (CV_16UC1)\n    CV_CAP_OPENNI_POINT_CLOUD_MAP           = 1, // XYZ in meters (CV_32FC3)\n    CV_CAP_OPENNI_DISPARITY_MAP             = 2, // Disparity in pixels (CV_8UC1)\n    CV_CAP_OPENNI_DISPARITY_MAP_32F         = 3, // Disparity in pixels (CV_32FC1)\n    CV_CAP_OPENNI_VALID_DEPTH_MASK          = 4, // CV_8UC1\n\n    // Data given from RGB image generator.\n    CV_CAP_OPENNI_BGR_IMAGE                 = 5,\n    CV_CAP_OPENNI_GRAY_IMAGE                = 6\n};\n\n// Supported output modes of OpenNI image generator\nenum\n{\n    CV_CAP_OPENNI_VGA_30HZ     = 0,\n    CV_CAP_OPENNI_SXGA_15HZ    = 1,\n    CV_CAP_OPENNI_SXGA_30HZ    = 2,\n    CV_CAP_OPENNI_QVGA_30HZ    = 3,\n    CV_CAP_OPENNI_QVGA_60HZ    = 4\n};\n\n//supported by Android camera output formats\nenum\n{\n    CV_CAP_ANDROID_COLOR_FRAME_BGR = 0, //BGR\n    CV_CAP_ANDROID_COLOR_FRAME = CV_CAP_ANDROID_COLOR_FRAME_BGR,\n    CV_CAP_ANDROID_GREY_FRAME  = 1,  //Y\n    CV_CAP_ANDROID_COLOR_FRAME_RGB = 2,\n    CV_CAP_ANDROID_COLOR_FRAME_BGRA = 3,\n    CV_CAP_ANDROID_COLOR_FRAME_RGBA = 4\n};\n\n// supported Android camera flash modes\nenum\n{\n    CV_CAP_ANDROID_FLASH_MODE_AUTO = 0,\n    CV_CAP_ANDROID_FLASH_MODE_OFF,\n    CV_CAP_ANDROID_FLASH_MODE_ON,\n    CV_CAP_ANDROID_FLASH_MODE_RED_EYE,\n    CV_CAP_ANDROID_FLASH_MODE_TORCH\n};\n\n// supported Android camera focus modes\nenum\n{\n    CV_CAP_ANDROID_FOCUS_MODE_AUTO = 0,\n    CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_PICTURE,\n    CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_VIDEO,\n    CV_CAP_ANDROID_FOCUS_MODE_EDOF,\n    CV_CAP_ANDROID_FOCUS_MODE_FIXED,\n    CV_CAP_ANDROID_FOCUS_MODE_INFINITY,\n    CV_CAP_ANDROID_FOCUS_MODE_MACRO\n};\n\n// supported Android camera white balance modes\nenum\n{\n    CV_CAP_ANDROID_WHITE_BALANCE_AUTO = 0,\n    CV_CAP_ANDROID_WHITE_BALANCE_CLOUDY_DAYLIGHT,\n    CV_CAP_ANDROID_WHITE_BALANCE_DAYLIGHT,\n    CV_CAP_ANDROID_WHITE_BALANCE_FLUORESCENT,\n    CV_CAP_ANDROID_WHITE_BALANCE_INCANDESCENT,\n    CV_CAP_ANDROID_WHITE_BALANCE_SHADE,\n    CV_CAP_ANDROID_WHITE_BALANCE_TWILIGHT,\n    CV_CAP_ANDROID_WHITE_BALANCE_WARM_FLUORESCENT\n};\n\n// supported Android camera antibanding modes\nenum\n{\n    CV_CAP_ANDROID_ANTIBANDING_50HZ = 0,\n    CV_CAP_ANDROID_ANTIBANDING_60HZ,\n    CV_CAP_ANDROID_ANTIBANDING_AUTO,\n    CV_CAP_ANDROID_ANTIBANDING_OFF\n};\n\nenum\n{\n    CV_CAP_INTELPERC_DEPTH_MAP              = 0, // Each pixel is a 16-bit integer. The value indicates the distance from an object to the camera's XY plane or the Cartesian depth.\n    CV_CAP_INTELPERC_UVDEPTH_MAP            = 1, // Each pixel contains two 32-bit floating point values in the range of 0-1, representing the mapping of depth coordinates to the color coordinates.\n    CV_CAP_INTELPERC_IR_MAP                 = 2, // Each pixel is a 16-bit integer. The value indicates the intensity of the reflected laser beam.\n    CV_CAP_INTELPERC_IMAGE                  = 3\n};\n\n/* retrieve or set capture properties */\nCVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id );\nCVAPI(int)    cvSetCaptureProperty( CvCapture* capture, int property_id, double value );\n\n// Return the type of the capturer (eg, CV_CAP_V4W, CV_CAP_UNICAP), which is unknown if created with CV_CAP_ANY\nCVAPI(int)    cvGetCaptureDomain( CvCapture* capture);\n\n/* \"black box\" video file writer structure */\ntypedef struct CvVideoWriter CvVideoWriter;\n\n#define CV_FOURCC_MACRO(c1, c2, c3, c4) (((c1) & 255) + (((c2) & 255) << 8) + (((c3) & 255) << 16) + (((c4) & 255) << 24))\n\nCV_INLINE int CV_FOURCC(char c1, char c2, char c3, char c4)\n{\n    return CV_FOURCC_MACRO(c1, c2, c3, c4);\n}\n\n#define CV_FOURCC_PROMPT -1  /* Open Codec Selection Dialog (Windows only) */\n#define CV_FOURCC_DEFAULT CV_FOURCC('I', 'Y', 'U', 'V') /* Use default codec for specified filename (Linux only) */\n\n/* initialize video file writer */\nCVAPI(CvVideoWriter*) cvCreateVideoWriter( const char* filename, int fourcc,\n                                           double fps, CvSize frame_size,\n                                           int is_color CV_DEFAULT(1));\n\n//CVAPI(CvVideoWriter*) cvCreateImageSequenceWriter( const char* filename,\n//                                                   int is_color CV_DEFAULT(1));\n\n/* write frame to video file */\nCVAPI(int) cvWriteFrame( CvVideoWriter* writer, const IplImage* image );\n\n/* close video file writer */\nCVAPI(void) cvReleaseVideoWriter( CvVideoWriter** writer );\n\n/****************************************************************************************\\\n*                              Obsolete functions/synonyms                               *\n\\****************************************************************************************/\n\n#define cvCaptureFromFile cvCreateFileCapture\n#define cvCaptureFromCAM cvCreateCameraCapture\n#define cvCaptureFromAVI cvCaptureFromFile\n#define cvCreateAVIWriter cvCreateVideoWriter\n#define cvWriteToAVI cvWriteFrame\n#define cvAddSearchPath(path)\n#define cvvInitSystem cvInitSystem\n#define cvvNamedWindow cvNamedWindow\n#define cvvShowImage cvShowImage\n#define cvvResizeWindow cvResizeWindow\n#define cvvDestroyWindow cvDestroyWindow\n#define cvvCreateTrackbar cvCreateTrackbar\n#define cvvLoadImage(name) cvLoadImage((name),1)\n#define cvvSaveImage cvSaveImage\n#define cvvAddSearchPath cvAddSearchPath\n#define cvvWaitKey(name) cvWaitKey(0)\n#define cvvWaitKeyEx(name,delay) cvWaitKey(delay)\n#define cvvConvertImage cvConvertImage\n#define HG_AUTOSIZE CV_WINDOW_AUTOSIZE\n#define set_preprocess_func cvSetPreprocessFuncWin32\n#define set_postprocess_func cvSetPostprocessFuncWin32\n\n#if defined WIN32 || defined _WIN32\n\nCVAPI(void) cvSetPreprocessFuncWin32_(const void* callback);\nCVAPI(void) cvSetPostprocessFuncWin32_(const void* callback);\n#define cvSetPreprocessFuncWin32(callback) cvSetPreprocessFuncWin32_((const void*)(callback))\n#define cvSetPostprocessFuncWin32(callback) cvSetPostprocessFuncWin32_((const void*)(callback))\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/highgui/ios.h",
    "content": "\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#include \"opencv2/core/core.hpp\"\n#import \"opencv2/highgui/cap_ios.h\"\n\nUIImage* MatToUIImage(const cv::Mat& image);\nvoid UIImageToMat(const UIImage* image,\n                         cv::Mat& m, bool alphaExist = false);\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/imgproc/imgproc.hpp",
    "content": "/*! \\file imgproc.hpp\n \\brief The Image Processing\n */\n\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_HPP__\n#define __OPENCV_IMGPROC_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/types_c.h\"\n\n#ifdef __cplusplus\n\n/*! \\namespace cv\n Namespace where all the C++ OpenCV functionality resides\n */\nnamespace cv\n{\n\n//! various border interpolation methods\nenum { BORDER_REPLICATE=IPL_BORDER_REPLICATE, BORDER_CONSTANT=IPL_BORDER_CONSTANT,\n       BORDER_REFLECT=IPL_BORDER_REFLECT, BORDER_WRAP=IPL_BORDER_WRAP,\n       BORDER_REFLECT_101=IPL_BORDER_REFLECT_101, BORDER_REFLECT101=BORDER_REFLECT_101,\n       BORDER_TRANSPARENT=IPL_BORDER_TRANSPARENT,\n       BORDER_DEFAULT=BORDER_REFLECT_101, BORDER_ISOLATED=16 };\n\n//! 1D interpolation function: returns coordinate of the \"donor\" pixel for the specified location p.\nCV_EXPORTS_W int borderInterpolate( int p, int len, int borderType );\n\n/*!\n The Base Class for 1D or Row-wise Filters\n\n This is the base class for linear or non-linear filters that process 1D data.\n In particular, such filters are used for the \"horizontal\" filtering parts in separable filters.\n\n Several functions in OpenCV return Ptr<BaseRowFilter> for the specific types of filters,\n and those pointers can be used directly or within cv::FilterEngine.\n*/\nclass CV_EXPORTS BaseRowFilter\n{\npublic:\n    //! the default constructor\n    BaseRowFilter();\n    //! the destructor\n    virtual ~BaseRowFilter();\n    //! the filtering operator. Must be overrided in the derived classes. The horizontal border interpolation is done outside of the class.\n    virtual void operator()(const uchar* src, uchar* dst,\n                            int width, int cn) = 0;\n    int ksize, anchor;\n};\n\n\n/*!\n The Base Class for Column-wise Filters\n\n This is the base class for linear or non-linear filters that process columns of 2D arrays.\n Such filters are used for the \"vertical\" filtering parts in separable filters.\n\n Several functions in OpenCV return Ptr<BaseColumnFilter> for the specific types of filters,\n and those pointers can be used directly or within cv::FilterEngine.\n\n Unlike cv::BaseRowFilter, cv::BaseColumnFilter may have some context information,\n i.e. box filter keeps the sliding sum of elements. To reset the state BaseColumnFilter::reset()\n must be called (e.g. the method is called by cv::FilterEngine)\n */\nclass CV_EXPORTS BaseColumnFilter\n{\npublic:\n    //! the default constructor\n    BaseColumnFilter();\n    //! the destructor\n    virtual ~BaseColumnFilter();\n    //! the filtering operator. Must be overrided in the derived classes. The vertical border interpolation is done outside of the class.\n    virtual void operator()(const uchar** src, uchar* dst, int dststep,\n                            int dstcount, int width) = 0;\n    //! resets the internal buffers, if any\n    virtual void reset();\n    int ksize, anchor;\n};\n\n/*!\n The Base Class for Non-Separable 2D Filters.\n\n This is the base class for linear or non-linear 2D filters.\n\n Several functions in OpenCV return Ptr<BaseFilter> for the specific types of filters,\n and those pointers can be used directly or within cv::FilterEngine.\n\n Similar to cv::BaseColumnFilter, the class may have some context information,\n that should be reset using BaseFilter::reset() method before processing the new array.\n*/\nclass CV_EXPORTS BaseFilter\n{\npublic:\n    //! the default constructor\n    BaseFilter();\n    //! the destructor\n    virtual ~BaseFilter();\n    //! the filtering operator. The horizontal and the vertical border interpolation is done outside of the class.\n    virtual void operator()(const uchar** src, uchar* dst, int dststep,\n                            int dstcount, int width, int cn) = 0;\n    //! resets the internal buffers, if any\n    virtual void reset();\n    Size ksize;\n    Point anchor;\n};\n\n/*!\n The Main Class for Image Filtering.\n\n The class can be used to apply an arbitrary filtering operation to an image.\n It contains all the necessary intermediate buffers, it computes extrapolated values\n of the \"virtual\" pixels outside of the image etc.\n Pointers to the initialized cv::FilterEngine instances\n are returned by various OpenCV functions, such as cv::createSeparableLinearFilter(),\n cv::createLinearFilter(), cv::createGaussianFilter(), cv::createDerivFilter(),\n cv::createBoxFilter() and cv::createMorphologyFilter().\n\n Using the class you can process large images by parts and build complex pipelines\n that include filtering as some of the stages. If all you need is to apply some pre-defined\n filtering operation, you may use cv::filter2D(), cv::erode(), cv::dilate() etc.\n functions that create FilterEngine internally.\n\n Here is the example on how to use the class to implement Laplacian operator, which is the sum of\n second-order derivatives. More complex variant for different types is implemented in cv::Laplacian().\n\n \\code\n void laplace_f(const Mat& src, Mat& dst)\n {\n     CV_Assert( src.type() == CV_32F );\n     // make sure the destination array has the proper size and type\n     dst.create(src.size(), src.type());\n\n     // get the derivative and smooth kernels for d2I/dx2.\n     // for d2I/dy2 we could use the same kernels, just swapped\n     Mat kd, ks;\n     getSobelKernels( kd, ks, 2, 0, ksize, false, ktype );\n\n     // let's process 10 source rows at once\n     int DELTA = std::min(10, src.rows);\n     Ptr<FilterEngine> Fxx = createSeparableLinearFilter(src.type(),\n     dst.type(), kd, ks, Point(-1,-1), 0, borderType, borderType, Scalar() );\n     Ptr<FilterEngine> Fyy = createSeparableLinearFilter(src.type(),\n     dst.type(), ks, kd, Point(-1,-1), 0, borderType, borderType, Scalar() );\n\n     int y = Fxx->start(src), dsty = 0, dy = 0;\n     Fyy->start(src);\n     const uchar* sptr = src.data + y*src.step;\n\n     // allocate the buffers for the spatial image derivatives;\n     // the buffers need to have more than DELTA rows, because at the\n     // last iteration the output may take max(kd.rows-1,ks.rows-1)\n     // rows more than the input.\n     Mat Ixx( DELTA + kd.rows - 1, src.cols, dst.type() );\n     Mat Iyy( DELTA + kd.rows - 1, src.cols, dst.type() );\n\n     // inside the loop we always pass DELTA rows to the filter\n     // (note that the \"proceed\" method takes care of possibe overflow, since\n     // it was given the actual image height in the \"start\" method)\n     // on output we can get:\n     //  * < DELTA rows (the initial buffer accumulation stage)\n     //  * = DELTA rows (settled state in the middle)\n     //  * > DELTA rows (then the input image is over, but we generate\n     //                  \"virtual\" rows using the border mode and filter them)\n     // this variable number of output rows is dy.\n     // dsty is the current output row.\n     // sptr is the pointer to the first input row in the portion to process\n     for( ; dsty < dst.rows; sptr += DELTA*src.step, dsty += dy )\n     {\n         Fxx->proceed( sptr, (int)src.step, DELTA, Ixx.data, (int)Ixx.step );\n         dy = Fyy->proceed( sptr, (int)src.step, DELTA, d2y.data, (int)Iyy.step );\n         if( dy > 0 )\n         {\n             Mat dstripe = dst.rowRange(dsty, dsty + dy);\n             add(Ixx.rowRange(0, dy), Iyy.rowRange(0, dy), dstripe);\n         }\n     }\n }\n \\endcode\n*/\nclass CV_EXPORTS FilterEngine\n{\npublic:\n    //! the default constructor\n    FilterEngine();\n    //! the full constructor. Either _filter2D or both _rowFilter and _columnFilter must be non-empty.\n    FilterEngine(const Ptr<BaseFilter>& _filter2D,\n                 const Ptr<BaseRowFilter>& _rowFilter,\n                 const Ptr<BaseColumnFilter>& _columnFilter,\n                 int srcType, int dstType, int bufType,\n                 int _rowBorderType=BORDER_REPLICATE,\n                 int _columnBorderType=-1,\n                 const Scalar& _borderValue=Scalar());\n    //! the destructor\n    virtual ~FilterEngine();\n    //! reinitializes the engine. The previously assigned filters are released.\n    void init(const Ptr<BaseFilter>& _filter2D,\n              const Ptr<BaseRowFilter>& _rowFilter,\n              const Ptr<BaseColumnFilter>& _columnFilter,\n              int srcType, int dstType, int bufType,\n              int _rowBorderType=BORDER_REPLICATE, int _columnBorderType=-1,\n              const Scalar& _borderValue=Scalar());\n    //! starts filtering of the specified ROI of an image of size wholeSize.\n    virtual int start(Size wholeSize, Rect roi, int maxBufRows=-1);\n    //! starts filtering of the specified ROI of the specified image.\n    virtual int start(const Mat& src, const Rect& srcRoi=Rect(0,0,-1,-1),\n                      bool isolated=false, int maxBufRows=-1);\n    //! processes the next srcCount rows of the image.\n    virtual int proceed(const uchar* src, int srcStep, int srcCount,\n                        uchar* dst, int dstStep);\n    //! applies filter to the specified ROI of the image. if srcRoi=(0,0,-1,-1), the whole image is filtered.\n    virtual void apply( const Mat& src, Mat& dst,\n                        const Rect& srcRoi=Rect(0,0,-1,-1),\n                        Point dstOfs=Point(0,0),\n                        bool isolated=false);\n    //! returns true if the filter is separable\n    bool isSeparable() const { return (const BaseFilter*)filter2D == 0; }\n    //! returns the number\n    int remainingInputRows() const;\n    int remainingOutputRows() const;\n\n    int srcType, dstType, bufType;\n    Size ksize;\n    Point anchor;\n    int maxWidth;\n    Size wholeSize;\n    Rect roi;\n    int dx1, dx2;\n    int rowBorderType, columnBorderType;\n    vector<int> borderTab;\n    int borderElemSize;\n    vector<uchar> ringBuf;\n    vector<uchar> srcRow;\n    vector<uchar> constBorderValue;\n    vector<uchar> constBorderRow;\n    int bufStep, startY, startY0, endY, rowCount, dstY;\n    vector<uchar*> rows;\n\n    Ptr<BaseFilter> filter2D;\n    Ptr<BaseRowFilter> rowFilter;\n    Ptr<BaseColumnFilter> columnFilter;\n};\n\n//! type of the kernel\nenum { KERNEL_GENERAL=0, KERNEL_SYMMETRICAL=1, KERNEL_ASYMMETRICAL=2,\n       KERNEL_SMOOTH=4, KERNEL_INTEGER=8 };\n\n//! returns type (one of KERNEL_*) of 1D or 2D kernel specified by its coefficients.\nCV_EXPORTS int getKernelType(InputArray kernel, Point anchor);\n\n//! returns the primitive row filter with the specified kernel\nCV_EXPORTS Ptr<BaseRowFilter> getLinearRowFilter(int srcType, int bufType,\n                                            InputArray kernel, int anchor,\n                                            int symmetryType);\n\n//! returns the primitive column filter with the specified kernel\nCV_EXPORTS Ptr<BaseColumnFilter> getLinearColumnFilter(int bufType, int dstType,\n                                            InputArray kernel, int anchor,\n                                            int symmetryType, double delta=0,\n                                            int bits=0);\n\n//! returns 2D filter with the specified kernel\nCV_EXPORTS Ptr<BaseFilter> getLinearFilter(int srcType, int dstType,\n                                           InputArray kernel,\n                                           Point anchor=Point(-1,-1),\n                                           double delta=0, int bits=0);\n\n//! returns the separable linear filter engine\nCV_EXPORTS Ptr<FilterEngine> createSeparableLinearFilter(int srcType, int dstType,\n                          InputArray rowKernel, InputArray columnKernel,\n                          Point anchor=Point(-1,-1), double delta=0,\n                          int rowBorderType=BORDER_DEFAULT,\n                          int columnBorderType=-1,\n                          const Scalar& borderValue=Scalar());\n\n//! returns the non-separable linear filter engine\nCV_EXPORTS Ptr<FilterEngine> createLinearFilter(int srcType, int dstType,\n                 InputArray kernel, Point _anchor=Point(-1,-1),\n                 double delta=0, int rowBorderType=BORDER_DEFAULT,\n                 int columnBorderType=-1, const Scalar& borderValue=Scalar());\n\n//! returns the Gaussian kernel with the specified parameters\nCV_EXPORTS_W Mat getGaussianKernel( int ksize, double sigma, int ktype=CV_64F );\n\n//! returns the Gaussian filter engine\nCV_EXPORTS Ptr<FilterEngine> createGaussianFilter( int type, Size ksize,\n                                    double sigma1, double sigma2=0,\n                                    int borderType=BORDER_DEFAULT);\n//! initializes kernels of the generalized Sobel operator\nCV_EXPORTS_W void getDerivKernels( OutputArray kx, OutputArray ky,\n                                   int dx, int dy, int ksize,\n                                   bool normalize=false, int ktype=CV_32F );\n//! returns filter engine for the generalized Sobel operator\nCV_EXPORTS Ptr<FilterEngine> createDerivFilter( int srcType, int dstType,\n                                        int dx, int dy, int ksize,\n                                        int borderType=BORDER_DEFAULT );\n//! returns horizontal 1D box filter\nCV_EXPORTS Ptr<BaseRowFilter> getRowSumFilter(int srcType, int sumType,\n                                              int ksize, int anchor=-1);\n//! returns vertical 1D box filter\nCV_EXPORTS Ptr<BaseColumnFilter> getColumnSumFilter( int sumType, int dstType,\n                                                     int ksize, int anchor=-1,\n                                                     double scale=1);\n//! returns box filter engine\nCV_EXPORTS Ptr<FilterEngine> createBoxFilter( int srcType, int dstType, Size ksize,\n                                              Point anchor=Point(-1,-1),\n                                              bool normalize=true,\n                                              int borderType=BORDER_DEFAULT);\n\n//! returns the Gabor kernel with the specified parameters\nCV_EXPORTS_W Mat getGaborKernel( Size ksize, double sigma, double theta, double lambd,\n                                 double gamma, double psi=CV_PI*0.5, int ktype=CV_64F );\n\n//! type of morphological operation\nenum { MORPH_ERODE=CV_MOP_ERODE, MORPH_DILATE=CV_MOP_DILATE,\n       MORPH_OPEN=CV_MOP_OPEN, MORPH_CLOSE=CV_MOP_CLOSE,\n       MORPH_GRADIENT=CV_MOP_GRADIENT, MORPH_TOPHAT=CV_MOP_TOPHAT,\n       MORPH_BLACKHAT=CV_MOP_BLACKHAT };\n\n//! returns horizontal 1D morphological filter\nCV_EXPORTS Ptr<BaseRowFilter> getMorphologyRowFilter(int op, int type, int ksize, int anchor=-1);\n//! returns vertical 1D morphological filter\nCV_EXPORTS Ptr<BaseColumnFilter> getMorphologyColumnFilter(int op, int type, int ksize, int anchor=-1);\n//! returns 2D morphological filter\nCV_EXPORTS Ptr<BaseFilter> getMorphologyFilter(int op, int type, InputArray kernel,\n                                               Point anchor=Point(-1,-1));\n\n//! returns \"magic\" border value for erosion and dilation. It is automatically transformed to Scalar::all(-DBL_MAX) for dilation.\nstatic inline Scalar morphologyDefaultBorderValue() { return Scalar::all(DBL_MAX); }\n\n//! returns morphological filter engine. Only MORPH_ERODE and MORPH_DILATE are supported.\nCV_EXPORTS Ptr<FilterEngine> createMorphologyFilter(int op, int type, InputArray kernel,\n                    Point anchor=Point(-1,-1), int rowBorderType=BORDER_CONSTANT,\n                    int columnBorderType=-1,\n                    const Scalar& borderValue=morphologyDefaultBorderValue());\n\n//! shape of the structuring element\nenum { MORPH_RECT=0, MORPH_CROSS=1, MORPH_ELLIPSE=2 };\n//! returns structuring element of the specified shape and size\nCV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1));\n\ntemplate<> CV_EXPORTS void Ptr<IplConvKernel>::delete_obj();\n\n//! copies 2D array to a larger destination array with extrapolation of the outer part of src using the specified border mode\nCV_EXPORTS_W void copyMakeBorder( InputArray src, OutputArray dst,\n                                int top, int bottom, int left, int right,\n                                int borderType, const Scalar& value=Scalar() );\n\n//! smooths the image using median filter.\nCV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );\n//! smooths the image using Gaussian filter.\nCV_EXPORTS_W void GaussianBlur( InputArray src,\n                                               OutputArray dst, Size ksize,\n                                               double sigmaX, double sigmaY=0,\n                                               int borderType=BORDER_DEFAULT );\n//! smooths the image using bilateral filter\nCV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,\n                                   double sigmaColor, double sigmaSpace,\n                                   int borderType=BORDER_DEFAULT );\n//! smooths the image using adaptive bilateral filter\nCV_EXPORTS_W void adaptiveBilateralFilter( InputArray src, OutputArray dst, Size ksize,\n                                           double sigmaSpace, double maxSigmaColor = 20.0, Point anchor=Point(-1, -1),\n                                           int borderType=BORDER_DEFAULT );\n//! smooths the image using the box filter. Each pixel is processed in O(1) time\nCV_EXPORTS_W void boxFilter( InputArray src, OutputArray dst, int ddepth,\n                             Size ksize, Point anchor=Point(-1,-1),\n                             bool normalize=true,\n                             int borderType=BORDER_DEFAULT );\n//! a synonym for normalized box filter\nCV_EXPORTS_W void blur( InputArray src, OutputArray dst,\n                        Size ksize, Point anchor=Point(-1,-1),\n                        int borderType=BORDER_DEFAULT );\n\n//! applies non-separable 2D linear filter to the image\nCV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,\n                            InputArray kernel, Point anchor=Point(-1,-1),\n                            double delta=0, int borderType=BORDER_DEFAULT );\n\n//! applies separable 2D linear filter to the image\nCV_EXPORTS_W void sepFilter2D( InputArray src, OutputArray dst, int ddepth,\n                               InputArray kernelX, InputArray kernelY,\n                               Point anchor=Point(-1,-1),\n                               double delta=0, int borderType=BORDER_DEFAULT );\n\n//! applies generalized Sobel operator to the image\nCV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth,\n                         int dx, int dy, int ksize=3,\n                         double scale=1, double delta=0,\n                         int borderType=BORDER_DEFAULT );\n\n//! applies the vertical or horizontal Scharr operator to the image\nCV_EXPORTS_W void Scharr( InputArray src, OutputArray dst, int ddepth,\n                          int dx, int dy, double scale=1, double delta=0,\n                          int borderType=BORDER_DEFAULT );\n\n//! applies Laplacian operator to the image\nCV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,\n                             int ksize=1, double scale=1, double delta=0,\n                             int borderType=BORDER_DEFAULT );\n\n//! applies Canny edge detector and produces the edge map.\nCV_EXPORTS_W void Canny( InputArray image, OutputArray edges,\n                         double threshold1, double threshold2,\n                         int apertureSize=3, bool L2gradient=false );\n\n//! computes minimum eigen value of 2x2 derivative covariation matrix at each pixel - the cornerness criteria\nCV_EXPORTS_W void cornerMinEigenVal( InputArray src, OutputArray dst,\n                                   int blockSize, int ksize=3,\n                                   int borderType=BORDER_DEFAULT );\n\n//! computes Harris cornerness criteria at each image pixel\nCV_EXPORTS_W void cornerHarris( InputArray src, OutputArray dst, int blockSize,\n                                int ksize, double k,\n                                int borderType=BORDER_DEFAULT );\n\n// low-level function for computing eigenvalues and eigenvectors of 2x2 matrices\nCV_EXPORTS void eigen2x2( const float* a, float* e, int n );\n\n//! computes both eigenvalues and the eigenvectors of 2x2 derivative covariation matrix  at each pixel. The output is stored as 6-channel matrix.\nCV_EXPORTS_W void cornerEigenValsAndVecs( InputArray src, OutputArray dst,\n                                          int blockSize, int ksize,\n                                          int borderType=BORDER_DEFAULT );\n\n//! computes another complex cornerness criteria at each pixel\nCV_EXPORTS_W void preCornerDetect( InputArray src, OutputArray dst, int ksize,\n                                   int borderType=BORDER_DEFAULT );\n\n//! adjusts the corner locations with sub-pixel accuracy to maximize the certain cornerness criteria\nCV_EXPORTS_W void cornerSubPix( InputArray image, InputOutputArray corners,\n                                Size winSize, Size zeroZone,\n                                TermCriteria criteria );\n\n//! finds the strong enough corners where the cornerMinEigenVal() or cornerHarris() report the local maxima\nCV_EXPORTS_W void goodFeaturesToTrack( InputArray image, OutputArray corners,\n                                     int maxCorners, double qualityLevel, double minDistance,\n                                     InputArray mask=noArray(), int blockSize=3,\n                                     bool useHarrisDetector=false, double k=0.04 );\n\n//! finds lines in the black-n-white image using the standard or pyramid Hough transform\nCV_EXPORTS_W void HoughLines( InputArray image, OutputArray lines,\n                              double rho, double theta, int threshold,\n                              double srn=0, double stn=0 );\n\n//! finds line segments in the black-n-white image using probabilistic Hough transform\nCV_EXPORTS_W void HoughLinesP( InputArray image, OutputArray lines,\n                               double rho, double theta, int threshold,\n                               double minLineLength=0, double maxLineGap=0 );\n\n//! finds circles in the grayscale image using 2+1 gradient Hough transform\nCV_EXPORTS_W void HoughCircles( InputArray image, OutputArray circles,\n                               int method, double dp, double minDist,\n                               double param1=100, double param2=100,\n                               int minRadius=0, int maxRadius=0 );\n\nenum\n{\n    GHT_POSITION = 0,\n    GHT_SCALE = 1,\n    GHT_ROTATION = 2\n};\n\n//! finds arbitrary template in the grayscale image using Generalized Hough Transform\n//! Ballard, D.H. (1981). Generalizing the Hough transform to detect arbitrary shapes. Pattern Recognition 13 (2): 111-122.\n//! Guil, N., González-Linares, J.M. and Zapata, E.L. (1999). Bidimensional shape detection using an invariant approach. Pattern Recognition 32 (6): 1025-1038.\nclass CV_EXPORTS GeneralizedHough : public Algorithm\n{\npublic:\n    static Ptr<GeneralizedHough> create(int method);\n\n    virtual ~GeneralizedHough();\n\n    //! set template to search\n    void setTemplate(InputArray templ, int cannyThreshold = 100, Point templCenter = Point(-1, -1));\n    void setTemplate(InputArray edges, InputArray dx, InputArray dy, Point templCenter = Point(-1, -1));\n\n    //! find template on image\n    void detect(InputArray image, OutputArray positions, OutputArray votes = cv::noArray(), int cannyThreshold = 100);\n    void detect(InputArray edges, InputArray dx, InputArray dy, OutputArray positions, OutputArray votes = cv::noArray());\n\n    void release();\n\nprotected:\n    virtual void setTemplateImpl(const Mat& edges, const Mat& dx, const Mat& dy, Point templCenter) = 0;\n    virtual void detectImpl(const Mat& edges, const Mat& dx, const Mat& dy, OutputArray positions, OutputArray votes) = 0;\n    virtual void releaseImpl() = 0;\n\nprivate:\n    Mat edges_, dx_, dy_;\n};\n\n//! erodes the image (applies the local minimum operator)\nCV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,\n                         Point anchor=Point(-1,-1), int iterations=1,\n                         int borderType=BORDER_CONSTANT,\n                         const Scalar& borderValue=morphologyDefaultBorderValue() );\n\n//! dilates the image (applies the local maximum operator)\nCV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,\n                          Point anchor=Point(-1,-1), int iterations=1,\n                          int borderType=BORDER_CONSTANT,\n                          const Scalar& borderValue=morphologyDefaultBorderValue() );\n\n//! applies an advanced morphological operation to the image\nCV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,\n                                int op, InputArray kernel,\n                                Point anchor=Point(-1,-1), int iterations=1,\n                                int borderType=BORDER_CONSTANT,\n                                const Scalar& borderValue=morphologyDefaultBorderValue() );\n\n//! interpolation algorithm\nenum\n{\n    INTER_NEAREST=CV_INTER_NN, //!< nearest neighbor interpolation\n    INTER_LINEAR=CV_INTER_LINEAR, //!< bilinear interpolation\n    INTER_CUBIC=CV_INTER_CUBIC, //!< bicubic interpolation\n    INTER_AREA=CV_INTER_AREA, //!< area-based (or super) interpolation\n    INTER_LANCZOS4=CV_INTER_LANCZOS4, //!< Lanczos interpolation over 8x8 neighborhood\n    INTER_MAX=7,\n    WARP_INVERSE_MAP=CV_WARP_INVERSE_MAP\n};\n\n//! resizes the image\nCV_EXPORTS_W void resize( InputArray src, OutputArray dst,\n                          Size dsize, double fx=0, double fy=0,\n                          int interpolation=INTER_LINEAR );\n\n//! warps the image using affine transformation\nCV_EXPORTS_W void warpAffine( InputArray src, OutputArray dst,\n                              InputArray M, Size dsize,\n                              int flags=INTER_LINEAR,\n                              int borderMode=BORDER_CONSTANT,\n                              const Scalar& borderValue=Scalar());\n\n//! warps the image using perspective transformation\nCV_EXPORTS_W void warpPerspective( InputArray src, OutputArray dst,\n                                   InputArray M, Size dsize,\n                                   int flags=INTER_LINEAR,\n                                   int borderMode=BORDER_CONSTANT,\n                                   const Scalar& borderValue=Scalar());\n\nenum\n{\n    INTER_BITS=5, INTER_BITS2=INTER_BITS*2,\n    INTER_TAB_SIZE=(1<<INTER_BITS),\n    INTER_TAB_SIZE2=INTER_TAB_SIZE*INTER_TAB_SIZE\n};\n\n//! warps the image using the precomputed maps. The maps are stored in either floating-point or integer fixed-point format\nCV_EXPORTS_W void remap( InputArray src, OutputArray dst,\n                         InputArray map1, InputArray map2,\n                         int interpolation, int borderMode=BORDER_CONSTANT,\n                         const Scalar& borderValue=Scalar());\n\n//! converts maps for remap from floating-point to fixed-point format or backwards\nCV_EXPORTS_W void convertMaps( InputArray map1, InputArray map2,\n                               OutputArray dstmap1, OutputArray dstmap2,\n                               int dstmap1type, bool nninterpolation=false );\n\n//! returns 2x3 affine transformation matrix for the planar rotation.\nCV_EXPORTS_W Mat getRotationMatrix2D( Point2f center, double angle, double scale );\n//! returns 3x3 perspective transformation for the corresponding 4 point pairs.\nCV_EXPORTS Mat getPerspectiveTransform( const Point2f src[], const Point2f dst[] );\n//! returns 2x3 affine transformation for the corresponding 3 point pairs.\nCV_EXPORTS Mat getAffineTransform( const Point2f src[], const Point2f dst[] );\n//! computes 2x3 affine transformation matrix that is inverse to the specified 2x3 affine transformation.\nCV_EXPORTS_W void invertAffineTransform( InputArray M, OutputArray iM );\n\nCV_EXPORTS_W Mat getPerspectiveTransform( InputArray src, InputArray dst );\nCV_EXPORTS_W Mat getAffineTransform( InputArray src, InputArray dst );\n\n//! extracts rectangle from the image at sub-pixel location\nCV_EXPORTS_W void getRectSubPix( InputArray image, Size patchSize,\n                                 Point2f center, OutputArray patch, int patchType=-1 );\n\n//! computes the integral image\nCV_EXPORTS_W void integral( InputArray src, OutputArray sum, int sdepth=-1 );\n\n//! computes the integral image and integral for the squared image\nCV_EXPORTS_AS(integral2) void integral( InputArray src, OutputArray sum,\n                                        OutputArray sqsum, int sdepth=-1 );\n//! computes the integral image, integral for the squared image and the tilted integral image\nCV_EXPORTS_AS(integral3) void integral( InputArray src, OutputArray sum,\n                                        OutputArray sqsum, OutputArray tilted,\n                                        int sdepth=-1 );\n\n//! adds image to the accumulator (dst += src). Unlike cv::add, dst and src can have different types.\nCV_EXPORTS_W void accumulate( InputArray src, InputOutputArray dst,\n                              InputArray mask=noArray() );\n//! adds squared src image to the accumulator (dst += src*src).\nCV_EXPORTS_W void accumulateSquare( InputArray src, InputOutputArray dst,\n                                    InputArray mask=noArray() );\n//! adds product of the 2 images to the accumulator (dst += src1*src2).\nCV_EXPORTS_W void accumulateProduct( InputArray src1, InputArray src2,\n                                     InputOutputArray dst, InputArray mask=noArray() );\n//! updates the running average (dst = dst*(1-alpha) + src*alpha)\nCV_EXPORTS_W void accumulateWeighted( InputArray src, InputOutputArray dst,\n                                      double alpha, InputArray mask=noArray() );\n\n//! computes PSNR image/video quality metric\nCV_EXPORTS_W double PSNR(InputArray src1, InputArray src2);\n\nCV_EXPORTS_W Point2d phaseCorrelate(InputArray src1, InputArray src2,\n                                  InputArray window = noArray());\nCV_EXPORTS_W Point2d phaseCorrelateRes(InputArray src1, InputArray src2,\n                                    InputArray window, CV_OUT double* response = 0);\nCV_EXPORTS_W void createHanningWindow(OutputArray dst, Size winSize, int type);\n\n//! type of the threshold operation\nenum { THRESH_BINARY=CV_THRESH_BINARY, THRESH_BINARY_INV=CV_THRESH_BINARY_INV,\n       THRESH_TRUNC=CV_THRESH_TRUNC, THRESH_TOZERO=CV_THRESH_TOZERO,\n       THRESH_TOZERO_INV=CV_THRESH_TOZERO_INV, THRESH_MASK=CV_THRESH_MASK,\n       THRESH_OTSU=CV_THRESH_OTSU };\n\n//! applies fixed threshold to the image\nCV_EXPORTS_W double threshold( InputArray src, OutputArray dst,\n                               double thresh, double maxval, int type );\n\n//! adaptive threshold algorithm\nenum { ADAPTIVE_THRESH_MEAN_C=0, ADAPTIVE_THRESH_GAUSSIAN_C=1 };\n\n//! applies variable (adaptive) threshold to the image\nCV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,\n                                     double maxValue, int adaptiveMethod,\n                                     int thresholdType, int blockSize, double C );\n\n//! smooths and downsamples the image\nCV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,\n                           const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );\n//! upsamples and smoothes the image\nCV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,\n                         const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );\n\n//! builds the gaussian pyramid using pyrDown() as a basic operation\nCV_EXPORTS void buildPyramid( InputArray src, OutputArrayOfArrays dst,\n                              int maxlevel, int borderType=BORDER_DEFAULT );\n\n//! corrects lens distortion for the given camera matrix and distortion coefficients\nCV_EXPORTS_W void undistort( InputArray src, OutputArray dst,\n                             InputArray cameraMatrix,\n                             InputArray distCoeffs,\n                             InputArray newCameraMatrix=noArray() );\n\n//! initializes maps for cv::remap() to correct lens distortion and optionally rectify the image\nCV_EXPORTS_W void initUndistortRectifyMap( InputArray cameraMatrix, InputArray distCoeffs,\n                           InputArray R, InputArray newCameraMatrix,\n                           Size size, int m1type, OutputArray map1, OutputArray map2 );\n\nenum\n{\n    PROJ_SPHERICAL_ORTHO = 0,\n    PROJ_SPHERICAL_EQRECT = 1\n};\n\n//! initializes maps for cv::remap() for wide-angle\nCV_EXPORTS_W float initWideAngleProjMap( InputArray cameraMatrix, InputArray distCoeffs,\n                                         Size imageSize, int destImageWidth,\n                                         int m1type, OutputArray map1, OutputArray map2,\n                                         int projType=PROJ_SPHERICAL_EQRECT, double alpha=0);\n\n//! returns the default new camera matrix (by default it is the same as cameraMatrix unless centerPricipalPoint=true)\nCV_EXPORTS_W Mat getDefaultNewCameraMatrix( InputArray cameraMatrix, Size imgsize=Size(),\n                                            bool centerPrincipalPoint=false );\n\n//! returns points' coordinates after lens distortion correction\nCV_EXPORTS_W void undistortPoints( InputArray src, OutputArray dst,\n                                   InputArray cameraMatrix, InputArray distCoeffs,\n                                   InputArray R=noArray(), InputArray P=noArray());\n\ntemplate<> CV_EXPORTS void Ptr<CvHistogram>::delete_obj();\n\n//! computes the joint dense histogram for a set of images.\nCV_EXPORTS void calcHist( const Mat* images, int nimages,\n                          const int* channels, InputArray mask,\n                          OutputArray hist, int dims, const int* histSize,\n                          const float** ranges, bool uniform=true, bool accumulate=false );\n\n//! computes the joint sparse histogram for a set of images.\nCV_EXPORTS void calcHist( const Mat* images, int nimages,\n                          const int* channels, InputArray mask,\n                          SparseMat& hist, int dims,\n                          const int* histSize, const float** ranges,\n                          bool uniform=true, bool accumulate=false );\n\nCV_EXPORTS_W void calcHist( InputArrayOfArrays images,\n                            const vector<int>& channels,\n                            InputArray mask, OutputArray hist,\n                            const vector<int>& histSize,\n                            const vector<float>& ranges,\n                            bool accumulate=false );\n\n//! computes back projection for the set of images\nCV_EXPORTS void calcBackProject( const Mat* images, int nimages,\n                                 const int* channels, InputArray hist,\n                                 OutputArray backProject, const float** ranges,\n                                 double scale=1, bool uniform=true );\n\n//! computes back projection for the set of images\nCV_EXPORTS void calcBackProject( const Mat* images, int nimages,\n                                 const int* channels, const SparseMat& hist,\n                                 OutputArray backProject, const float** ranges,\n                                 double scale=1, bool uniform=true );\n\nCV_EXPORTS_W void calcBackProject( InputArrayOfArrays images, const vector<int>& channels,\n                                   InputArray hist, OutputArray dst,\n                                   const vector<float>& ranges,\n                                   double scale );\n\n/*CV_EXPORTS void calcBackProjectPatch( const Mat* images, int nimages, const int* channels,\n                                      InputArray hist, OutputArray dst, Size patchSize,\n                                      int method, double factor=1 );\n\nCV_EXPORTS_W void calcBackProjectPatch( InputArrayOfArrays images, const vector<int>& channels,\n                                        InputArray hist, OutputArray dst, Size patchSize,\n                                        int method, double factor=1 );*/\n\n//! compares two histograms stored in dense arrays\nCV_EXPORTS_W double compareHist( InputArray H1, InputArray H2, int method );\n\n//! compares two histograms stored in sparse arrays\nCV_EXPORTS double compareHist( const SparseMat& H1, const SparseMat& H2, int method );\n\n//! normalizes the grayscale image brightness and contrast by normalizing its histogram\nCV_EXPORTS_W void equalizeHist( InputArray src, OutputArray dst );\n\nclass CV_EXPORTS_W CLAHE : public Algorithm\n{\npublic:\n    CV_WRAP virtual void apply(InputArray src, OutputArray dst) = 0;\n\n    CV_WRAP virtual void setClipLimit(double clipLimit) = 0;\n    CV_WRAP virtual double getClipLimit() const = 0;\n\n    CV_WRAP virtual void setTilesGridSize(Size tileGridSize) = 0;\n    CV_WRAP virtual Size getTilesGridSize() const = 0;\n\n    CV_WRAP virtual void collectGarbage() = 0;\n};\nCV_EXPORTS_W Ptr<CLAHE> createCLAHE(double clipLimit = 40.0, Size tileGridSize = Size(8, 8));\n\nCV_EXPORTS float EMD( InputArray signature1, InputArray signature2,\n                      int distType, InputArray cost=noArray(),\n                      float* lowerBound=0, OutputArray flow=noArray() );\n\n//! segments the image using watershed algorithm\nCV_EXPORTS_W void watershed( InputArray image, InputOutputArray markers );\n\n//! filters image using meanshift algorithm\nCV_EXPORTS_W void pyrMeanShiftFiltering( InputArray src, OutputArray dst,\n                                         double sp, double sr, int maxLevel=1,\n                                         TermCriteria termcrit=TermCriteria(\n                                            TermCriteria::MAX_ITER+TermCriteria::EPS,5,1) );\n\n//! class of the pixel in GrabCut algorithm\nenum\n{\n    GC_BGD    = 0,  //!< background\n    GC_FGD    = 1,  //!< foreground\n    GC_PR_BGD = 2,  //!< most probably background\n    GC_PR_FGD = 3   //!< most probably foreground\n};\n\n//! GrabCut algorithm flags\nenum\n{\n    GC_INIT_WITH_RECT  = 0,\n    GC_INIT_WITH_MASK  = 1,\n    GC_EVAL            = 2\n};\n\n//! segments the image using GrabCut algorithm\nCV_EXPORTS_W void grabCut( InputArray img, InputOutputArray mask, Rect rect,\n                           InputOutputArray bgdModel, InputOutputArray fgdModel,\n                           int iterCount, int mode = GC_EVAL );\n\nenum\n{\n    DIST_LABEL_CCOMP = 0,\n    DIST_LABEL_PIXEL = 1\n};\n\n//! builds the discrete Voronoi diagram\nCV_EXPORTS_AS(distanceTransformWithLabels) void distanceTransform( InputArray src, OutputArray dst,\n                                     OutputArray labels, int distanceType, int maskSize,\n                                     int labelType=DIST_LABEL_CCOMP );\n\n//! computes the distance transform map\nCV_EXPORTS_W void distanceTransform( InputArray src, OutputArray dst,\n                                     int distanceType, int maskSize );\n\nenum { FLOODFILL_FIXED_RANGE = 1 << 16, FLOODFILL_MASK_ONLY = 1 << 17 };\n\n//! fills the semi-uniform image region starting from the specified seed point\nCV_EXPORTS int floodFill( InputOutputArray image,\n                          Point seedPoint, Scalar newVal, CV_OUT Rect* rect=0,\n                          Scalar loDiff=Scalar(), Scalar upDiff=Scalar(),\n                          int flags=4 );\n\n//! fills the semi-uniform image region and/or the mask starting from the specified seed point\nCV_EXPORTS_W int floodFill( InputOutputArray image, InputOutputArray mask,\n                            Point seedPoint, Scalar newVal, CV_OUT Rect* rect=0,\n                            Scalar loDiff=Scalar(), Scalar upDiff=Scalar(),\n                            int flags=4 );\n\n\nenum\n{\n    COLOR_BGR2BGRA    =0,\n    COLOR_RGB2RGBA    =COLOR_BGR2BGRA,\n\n    COLOR_BGRA2BGR    =1,\n    COLOR_RGBA2RGB    =COLOR_BGRA2BGR,\n\n    COLOR_BGR2RGBA    =2,\n    COLOR_RGB2BGRA    =COLOR_BGR2RGBA,\n\n    COLOR_RGBA2BGR    =3,\n    COLOR_BGRA2RGB    =COLOR_RGBA2BGR,\n\n    COLOR_BGR2RGB     =4,\n    COLOR_RGB2BGR     =COLOR_BGR2RGB,\n\n    COLOR_BGRA2RGBA   =5,\n    COLOR_RGBA2BGRA   =COLOR_BGRA2RGBA,\n\n    COLOR_BGR2GRAY    =6,\n    COLOR_RGB2GRAY    =7,\n    COLOR_GRAY2BGR    =8,\n    COLOR_GRAY2RGB    =COLOR_GRAY2BGR,\n    COLOR_GRAY2BGRA   =9,\n    COLOR_GRAY2RGBA   =COLOR_GRAY2BGRA,\n    COLOR_BGRA2GRAY   =10,\n    COLOR_RGBA2GRAY   =11,\n\n    COLOR_BGR2BGR565  =12,\n    COLOR_RGB2BGR565  =13,\n    COLOR_BGR5652BGR  =14,\n    COLOR_BGR5652RGB  =15,\n    COLOR_BGRA2BGR565 =16,\n    COLOR_RGBA2BGR565 =17,\n    COLOR_BGR5652BGRA =18,\n    COLOR_BGR5652RGBA =19,\n\n    COLOR_GRAY2BGR565 =20,\n    COLOR_BGR5652GRAY =21,\n\n    COLOR_BGR2BGR555  =22,\n    COLOR_RGB2BGR555  =23,\n    COLOR_BGR5552BGR  =24,\n    COLOR_BGR5552RGB  =25,\n    COLOR_BGRA2BGR555 =26,\n    COLOR_RGBA2BGR555 =27,\n    COLOR_BGR5552BGRA =28,\n    COLOR_BGR5552RGBA =29,\n\n    COLOR_GRAY2BGR555 =30,\n    COLOR_BGR5552GRAY =31,\n\n    COLOR_BGR2XYZ     =32,\n    COLOR_RGB2XYZ     =33,\n    COLOR_XYZ2BGR     =34,\n    COLOR_XYZ2RGB     =35,\n\n    COLOR_BGR2YCrCb   =36,\n    COLOR_RGB2YCrCb   =37,\n    COLOR_YCrCb2BGR   =38,\n    COLOR_YCrCb2RGB   =39,\n\n    COLOR_BGR2HSV     =40,\n    COLOR_RGB2HSV     =41,\n\n    COLOR_BGR2Lab     =44,\n    COLOR_RGB2Lab     =45,\n\n    COLOR_BayerBG2BGR =46,\n    COLOR_BayerGB2BGR =47,\n    COLOR_BayerRG2BGR =48,\n    COLOR_BayerGR2BGR =49,\n\n    COLOR_BayerBG2RGB =COLOR_BayerRG2BGR,\n    COLOR_BayerGB2RGB =COLOR_BayerGR2BGR,\n    COLOR_BayerRG2RGB =COLOR_BayerBG2BGR,\n    COLOR_BayerGR2RGB =COLOR_BayerGB2BGR,\n\n    COLOR_BGR2Luv     =50,\n    COLOR_RGB2Luv     =51,\n    COLOR_BGR2HLS     =52,\n    COLOR_RGB2HLS     =53,\n\n    COLOR_HSV2BGR     =54,\n    COLOR_HSV2RGB     =55,\n\n    COLOR_Lab2BGR     =56,\n    COLOR_Lab2RGB     =57,\n    COLOR_Luv2BGR     =58,\n    COLOR_Luv2RGB     =59,\n    COLOR_HLS2BGR     =60,\n    COLOR_HLS2RGB     =61,\n\n    COLOR_BayerBG2BGR_VNG =62,\n    COLOR_BayerGB2BGR_VNG =63,\n    COLOR_BayerRG2BGR_VNG =64,\n    COLOR_BayerGR2BGR_VNG =65,\n\n    COLOR_BayerBG2RGB_VNG =COLOR_BayerRG2BGR_VNG,\n    COLOR_BayerGB2RGB_VNG =COLOR_BayerGR2BGR_VNG,\n    COLOR_BayerRG2RGB_VNG =COLOR_BayerBG2BGR_VNG,\n    COLOR_BayerGR2RGB_VNG =COLOR_BayerGB2BGR_VNG,\n\n    COLOR_BGR2HSV_FULL = 66,\n    COLOR_RGB2HSV_FULL = 67,\n    COLOR_BGR2HLS_FULL = 68,\n    COLOR_RGB2HLS_FULL = 69,\n\n    COLOR_HSV2BGR_FULL = 70,\n    COLOR_HSV2RGB_FULL = 71,\n    COLOR_HLS2BGR_FULL = 72,\n    COLOR_HLS2RGB_FULL = 73,\n\n    COLOR_LBGR2Lab     = 74,\n    COLOR_LRGB2Lab     = 75,\n    COLOR_LBGR2Luv     = 76,\n    COLOR_LRGB2Luv     = 77,\n\n    COLOR_Lab2LBGR     = 78,\n    COLOR_Lab2LRGB     = 79,\n    COLOR_Luv2LBGR     = 80,\n    COLOR_Luv2LRGB     = 81,\n\n    COLOR_BGR2YUV      = 82,\n    COLOR_RGB2YUV      = 83,\n    COLOR_YUV2BGR      = 84,\n    COLOR_YUV2RGB      = 85,\n\n    COLOR_BayerBG2GRAY = 86,\n    COLOR_BayerGB2GRAY = 87,\n    COLOR_BayerRG2GRAY = 88,\n    COLOR_BayerGR2GRAY = 89,\n\n    //YUV 4:2:0 formats family\n    COLOR_YUV2RGB_NV12 = 90,\n    COLOR_YUV2BGR_NV12 = 91,\n    COLOR_YUV2RGB_NV21 = 92,\n    COLOR_YUV2BGR_NV21 = 93,\n    COLOR_YUV420sp2RGB = COLOR_YUV2RGB_NV21,\n    COLOR_YUV420sp2BGR = COLOR_YUV2BGR_NV21,\n\n    COLOR_YUV2RGBA_NV12 = 94,\n    COLOR_YUV2BGRA_NV12 = 95,\n    COLOR_YUV2RGBA_NV21 = 96,\n    COLOR_YUV2BGRA_NV21 = 97,\n    COLOR_YUV420sp2RGBA = COLOR_YUV2RGBA_NV21,\n    COLOR_YUV420sp2BGRA = COLOR_YUV2BGRA_NV21,\n\n    COLOR_YUV2RGB_YV12 = 98,\n    COLOR_YUV2BGR_YV12 = 99,\n    COLOR_YUV2RGB_IYUV = 100,\n    COLOR_YUV2BGR_IYUV = 101,\n    COLOR_YUV2RGB_I420 = COLOR_YUV2RGB_IYUV,\n    COLOR_YUV2BGR_I420 = COLOR_YUV2BGR_IYUV,\n    COLOR_YUV420p2RGB = COLOR_YUV2RGB_YV12,\n    COLOR_YUV420p2BGR = COLOR_YUV2BGR_YV12,\n\n    COLOR_YUV2RGBA_YV12 = 102,\n    COLOR_YUV2BGRA_YV12 = 103,\n    COLOR_YUV2RGBA_IYUV = 104,\n    COLOR_YUV2BGRA_IYUV = 105,\n    COLOR_YUV2RGBA_I420 = COLOR_YUV2RGBA_IYUV,\n    COLOR_YUV2BGRA_I420 = COLOR_YUV2BGRA_IYUV,\n    COLOR_YUV420p2RGBA = COLOR_YUV2RGBA_YV12,\n    COLOR_YUV420p2BGRA = COLOR_YUV2BGRA_YV12,\n\n    COLOR_YUV2GRAY_420 = 106,\n    COLOR_YUV2GRAY_NV21 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_NV12 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_YV12 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_IYUV = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_I420 = COLOR_YUV2GRAY_420,\n    COLOR_YUV420sp2GRAY = COLOR_YUV2GRAY_420,\n    COLOR_YUV420p2GRAY = COLOR_YUV2GRAY_420,\n\n    //YUV 4:2:2 formats family\n    COLOR_YUV2RGB_UYVY = 107,\n    COLOR_YUV2BGR_UYVY = 108,\n    //COLOR_YUV2RGB_VYUY = 109,\n    //COLOR_YUV2BGR_VYUY = 110,\n    COLOR_YUV2RGB_Y422 = COLOR_YUV2RGB_UYVY,\n    COLOR_YUV2BGR_Y422 = COLOR_YUV2BGR_UYVY,\n    COLOR_YUV2RGB_UYNV = COLOR_YUV2RGB_UYVY,\n    COLOR_YUV2BGR_UYNV = COLOR_YUV2BGR_UYVY,\n\n    COLOR_YUV2RGBA_UYVY = 111,\n    COLOR_YUV2BGRA_UYVY = 112,\n    //COLOR_YUV2RGBA_VYUY = 113,\n    //COLOR_YUV2BGRA_VYUY = 114,\n    COLOR_YUV2RGBA_Y422 = COLOR_YUV2RGBA_UYVY,\n    COLOR_YUV2BGRA_Y422 = COLOR_YUV2BGRA_UYVY,\n    COLOR_YUV2RGBA_UYNV = COLOR_YUV2RGBA_UYVY,\n    COLOR_YUV2BGRA_UYNV = COLOR_YUV2BGRA_UYVY,\n\n    COLOR_YUV2RGB_YUY2 = 115,\n    COLOR_YUV2BGR_YUY2 = 116,\n    COLOR_YUV2RGB_YVYU = 117,\n    COLOR_YUV2BGR_YVYU = 118,\n    COLOR_YUV2RGB_YUYV = COLOR_YUV2RGB_YUY2,\n    COLOR_YUV2BGR_YUYV = COLOR_YUV2BGR_YUY2,\n    COLOR_YUV2RGB_YUNV = COLOR_YUV2RGB_YUY2,\n    COLOR_YUV2BGR_YUNV = COLOR_YUV2BGR_YUY2,\n\n    COLOR_YUV2RGBA_YUY2 = 119,\n    COLOR_YUV2BGRA_YUY2 = 120,\n    COLOR_YUV2RGBA_YVYU = 121,\n    COLOR_YUV2BGRA_YVYU = 122,\n    COLOR_YUV2RGBA_YUYV = COLOR_YUV2RGBA_YUY2,\n    COLOR_YUV2BGRA_YUYV = COLOR_YUV2BGRA_YUY2,\n    COLOR_YUV2RGBA_YUNV = COLOR_YUV2RGBA_YUY2,\n    COLOR_YUV2BGRA_YUNV = COLOR_YUV2BGRA_YUY2,\n\n    COLOR_YUV2GRAY_UYVY = 123,\n    COLOR_YUV2GRAY_YUY2 = 124,\n    //COLOR_YUV2GRAY_VYUY = COLOR_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_Y422 = COLOR_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_UYNV = COLOR_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_YVYU = COLOR_YUV2GRAY_YUY2,\n    COLOR_YUV2GRAY_YUYV = COLOR_YUV2GRAY_YUY2,\n    COLOR_YUV2GRAY_YUNV = COLOR_YUV2GRAY_YUY2,\n\n    // alpha premultiplication\n    COLOR_RGBA2mRGBA = 125,\n    COLOR_mRGBA2RGBA = 126,\n\n    COLOR_RGB2YUV_I420 = 127,\n    COLOR_BGR2YUV_I420 = 128,\n    COLOR_RGB2YUV_IYUV = COLOR_RGB2YUV_I420,\n    COLOR_BGR2YUV_IYUV = COLOR_BGR2YUV_I420,\n\n    COLOR_RGBA2YUV_I420 = 129,\n    COLOR_BGRA2YUV_I420 = 130,\n    COLOR_RGBA2YUV_IYUV = COLOR_RGBA2YUV_I420,\n    COLOR_BGRA2YUV_IYUV = COLOR_BGRA2YUV_I420,\n    COLOR_RGB2YUV_YV12  = 131,\n    COLOR_BGR2YUV_YV12  = 132,\n    COLOR_RGBA2YUV_YV12 = 133,\n    COLOR_BGRA2YUV_YV12 = 134,\n\n    COLOR_COLORCVT_MAX  = 135\n};\n\n\n//! converts image from one color space to another\nCV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 );\n\n//! raster image moments\nclass CV_EXPORTS_W_MAP Moments\n{\npublic:\n    //! the default constructor\n    Moments();\n    //! the full constructor\n    Moments(double m00, double m10, double m01, double m20, double m11,\n            double m02, double m30, double m21, double m12, double m03 );\n    //! the conversion from CvMoments\n    Moments( const CvMoments& moments );\n    //! the conversion to CvMoments\n    operator CvMoments() const;\n\n    //! spatial moments\n    CV_PROP_RW double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03;\n    //! central moments\n    CV_PROP_RW double  mu20, mu11, mu02, mu30, mu21, mu12, mu03;\n    //! central normalized moments\n    CV_PROP_RW double  nu20, nu11, nu02, nu30, nu21, nu12, nu03;\n};\n\n//! computes moments of the rasterized shape or a vector of points\nCV_EXPORTS_W Moments moments( InputArray array, bool binaryImage=false );\n\n//! computes 7 Hu invariants from the moments\nCV_EXPORTS void HuMoments( const Moments& moments, double hu[7] );\nCV_EXPORTS_W void HuMoments( const Moments& m, CV_OUT OutputArray hu );\n\n//! type of the template matching operation\nenum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 };\n\n//! computes the proximity map for the raster template and the image where the template is searched for\nCV_EXPORTS_W void matchTemplate( InputArray image, InputArray templ,\n                                 OutputArray result, int method );\n\n//! mode of the contour retrieval algorithm\nenum\n{\n    RETR_EXTERNAL=CV_RETR_EXTERNAL, //!< retrieve only the most external (top-level) contours\n    RETR_LIST=CV_RETR_LIST, //!< retrieve all the contours without any hierarchical information\n    RETR_CCOMP=CV_RETR_CCOMP, //!< retrieve the connected components (that can possibly be nested)\n    RETR_TREE=CV_RETR_TREE, //!< retrieve all the contours and the whole hierarchy\n    RETR_FLOODFILL=CV_RETR_FLOODFILL\n};\n\n//! the contour approximation algorithm\nenum\n{\n    CHAIN_APPROX_NONE=CV_CHAIN_APPROX_NONE,\n    CHAIN_APPROX_SIMPLE=CV_CHAIN_APPROX_SIMPLE,\n    CHAIN_APPROX_TC89_L1=CV_CHAIN_APPROX_TC89_L1,\n    CHAIN_APPROX_TC89_KCOS=CV_CHAIN_APPROX_TC89_KCOS\n};\n\n//! retrieves contours and the hierarchical information from black-n-white image.\nCV_EXPORTS_W void findContours( InputOutputArray image, OutputArrayOfArrays contours,\n                              OutputArray hierarchy, int mode,\n                              int method, Point offset=Point());\n\n//! retrieves contours from black-n-white image.\nCV_EXPORTS void findContours( InputOutputArray image, OutputArrayOfArrays contours,\n                              int mode, int method, Point offset=Point());\n\n//! draws contours in the image\nCV_EXPORTS_W void drawContours( InputOutputArray image, InputArrayOfArrays contours,\n                              int contourIdx, const Scalar& color,\n                              int thickness=1, int lineType=8,\n                              InputArray hierarchy=noArray(),\n                              int maxLevel=INT_MAX, Point offset=Point() );\n\n//! approximates contour or a curve using Douglas-Peucker algorithm\nCV_EXPORTS_W void approxPolyDP( InputArray curve,\n                                OutputArray approxCurve,\n                                double epsilon, bool closed );\n\n//! computes the contour perimeter (closed=true) or a curve length\nCV_EXPORTS_W double arcLength( InputArray curve, bool closed );\n//! computes the bounding rectangle for a contour\nCV_EXPORTS_W Rect boundingRect( InputArray points );\n//! computes the contour area\nCV_EXPORTS_W double contourArea( InputArray contour, bool oriented=false );\n//! computes the minimal rotated rectangle for a set of points\nCV_EXPORTS_W RotatedRect minAreaRect( InputArray points );\n//! computes the minimal enclosing circle for a set of points\nCV_EXPORTS_W void minEnclosingCircle( InputArray points,\n                                      CV_OUT Point2f& center, CV_OUT float& radius );\n//! matches two contours using one of the available algorithms\nCV_EXPORTS_W double matchShapes( InputArray contour1, InputArray contour2,\n                                 int method, double parameter );\n//! computes convex hull for a set of 2D points.\nCV_EXPORTS_W void convexHull( InputArray points, OutputArray hull,\n                              bool clockwise=false, bool returnPoints=true );\n//! computes the contour convexity defects\nCV_EXPORTS_W void convexityDefects( InputArray contour, InputArray convexhull, OutputArray convexityDefects );\n\n//! returns true if the contour is convex. Does not support contours with self-intersection\nCV_EXPORTS_W bool isContourConvex( InputArray contour );\n\n//! finds intersection of two convex polygons\nCV_EXPORTS_W float intersectConvexConvex( InputArray _p1, InputArray _p2,\n                                          OutputArray _p12, bool handleNested=true );\n\n//! fits ellipse to the set of 2D points\nCV_EXPORTS_W RotatedRect fitEllipse( InputArray points );\n\n//! fits line to the set of 2D points using M-estimator algorithm\nCV_EXPORTS_W void fitLine( InputArray points, OutputArray line, int distType,\n                           double param, double reps, double aeps );\n//! checks if the point is inside the contour. Optionally computes the signed distance from the point to the contour boundary\nCV_EXPORTS_W double pointPolygonTest( InputArray contour, Point2f pt, bool measureDist );\n\n\nclass CV_EXPORTS_W Subdiv2D\n{\npublic:\n    enum\n    {\n        PTLOC_ERROR = -2,\n        PTLOC_OUTSIDE_RECT = -1,\n        PTLOC_INSIDE = 0,\n        PTLOC_VERTEX = 1,\n        PTLOC_ON_EDGE = 2\n    };\n\n    enum\n    {\n        NEXT_AROUND_ORG   = 0x00,\n        NEXT_AROUND_DST   = 0x22,\n        PREV_AROUND_ORG   = 0x11,\n        PREV_AROUND_DST   = 0x33,\n        NEXT_AROUND_LEFT  = 0x13,\n        NEXT_AROUND_RIGHT = 0x31,\n        PREV_AROUND_LEFT  = 0x20,\n        PREV_AROUND_RIGHT = 0x02\n    };\n\n    CV_WRAP Subdiv2D();\n    CV_WRAP Subdiv2D(Rect rect);\n    CV_WRAP void initDelaunay(Rect rect);\n\n    CV_WRAP int insert(Point2f pt);\n    CV_WRAP void insert(const vector<Point2f>& ptvec);\n    CV_WRAP int locate(Point2f pt, CV_OUT int& edge, CV_OUT int& vertex);\n\n    CV_WRAP int findNearest(Point2f pt, CV_OUT Point2f* nearestPt=0);\n    CV_WRAP void getEdgeList(CV_OUT vector<Vec4f>& edgeList) const;\n    CV_WRAP void getTriangleList(CV_OUT vector<Vec6f>& triangleList) const;\n    CV_WRAP void getVoronoiFacetList(const vector<int>& idx, CV_OUT vector<vector<Point2f> >& facetList,\n                                     CV_OUT vector<Point2f>& facetCenters);\n\n    CV_WRAP Point2f getVertex(int vertex, CV_OUT int* firstEdge=0) const;\n\n    CV_WRAP int getEdge( int edge, int nextEdgeType ) const;\n    CV_WRAP int nextEdge(int edge) const;\n    CV_WRAP int rotateEdge(int edge, int rotate) const;\n    CV_WRAP int symEdge(int edge) const;\n    CV_WRAP int edgeOrg(int edge, CV_OUT Point2f* orgpt=0) const;\n    CV_WRAP int edgeDst(int edge, CV_OUT Point2f* dstpt=0) const;\n\nprotected:\n    int newEdge();\n    void deleteEdge(int edge);\n    int newPoint(Point2f pt, bool isvirtual, int firstEdge=0);\n    void deletePoint(int vtx);\n    void setEdgePoints( int edge, int orgPt, int dstPt );\n    void splice( int edgeA, int edgeB );\n    int connectEdges( int edgeA, int edgeB );\n    void swapEdges( int edge );\n    int isRightOf(Point2f pt, int edge) const;\n    void calcVoronoi();\n    void clearVoronoi();\n    void checkSubdiv() const;\n\n    struct CV_EXPORTS Vertex\n    {\n        Vertex();\n        Vertex(Point2f pt, bool _isvirtual, int _firstEdge=0);\n        bool isvirtual() const;\n        bool isfree() const;\n        int firstEdge;\n        int type;\n        Point2f pt;\n    };\n    struct CV_EXPORTS QuadEdge\n    {\n        QuadEdge();\n        QuadEdge(int edgeidx);\n        bool isfree() const;\n        int next[4];\n        int pt[4];\n    };\n\n    vector<Vertex> vtx;\n    vector<QuadEdge> qedges;\n    int freeQEdge;\n    int freePoint;\n    bool validGeometry;\n\n    int recentEdge;\n    Point2f topLeft;\n    Point2f bottomRight;\n};\n\n}\n\n#endif /* __cplusplus */\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/imgproc/imgproc_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_IMGPROC_C_H__\n#define __OPENCV_IMGPROC_IMGPROC_C_H__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/imgproc/types_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*********************** Background statistics accumulation *****************************/\n\n/* Adds image to accumulator */\nCVAPI(void)  cvAcc( const CvArr* image, CvArr* sum,\n                   const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Adds squared image to accumulator */\nCVAPI(void)  cvSquareAcc( const CvArr* image, CvArr* sqsum,\n                         const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Adds a product of two images to accumulator */\nCVAPI(void)  cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc,\n                           const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha */\nCVAPI(void)  cvRunningAvg( const CvArr* image, CvArr* acc, double alpha,\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n/****************************************************************************************\\\n*                                    Image Processing                                    *\n\\****************************************************************************************/\n\n/* Copies source 2D array inside of the larger destination array and\n   makes a border of the specified type (IPL_BORDER_*) around the copied area. */\nCVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,\n                              int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0)));\n\n/* Smoothes array (removes noise) */\nCVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,\n                      int smoothtype CV_DEFAULT(CV_GAUSSIAN),\n                      int size1 CV_DEFAULT(3),\n                      int size2 CV_DEFAULT(0),\n                      double sigma1 CV_DEFAULT(0),\n                      double sigma2 CV_DEFAULT(0));\n\n/* Convolves the image with the kernel */\nCVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel,\n                        CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)));\n\n/* Finds integral image: SUM(X,Y) = sum(x<X,y<Y)I(x,y) */\nCVAPI(void) cvIntegral( const CvArr* image, CvArr* sum,\n                       CvArr* sqsum CV_DEFAULT(NULL),\n                       CvArr* tilted_sum CV_DEFAULT(NULL));\n\n/*\n   Smoothes the input image with gaussian kernel and then down-samples it.\n   dst_width = floor(src_width/2)[+1],\n   dst_height = floor(src_height/2)[+1]\n*/\nCVAPI(void)  cvPyrDown( const CvArr* src, CvArr* dst,\n                        int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/*\n   Up-samples image and smoothes the result with gaussian kernel.\n   dst_width = src_width*2,\n   dst_height = src_height*2\n*/\nCVAPI(void)  cvPyrUp( const CvArr* src, CvArr* dst,\n                      int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/* Builds pyramid for an image */\nCVAPI(CvMat**) cvCreatePyramid( const CvArr* img, int extra_layers, double rate,\n                                const CvSize* layer_sizes CV_DEFAULT(0),\n                                CvArr* bufarr CV_DEFAULT(0),\n                                int calc CV_DEFAULT(1),\n                                int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/* Releases pyramid */\nCVAPI(void)  cvReleasePyramid( CvMat*** pyramid, int extra_layers );\n\n\n/* Filters image using meanshift algorithm */\nCVAPI(void) cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst,\n    double sp, double sr, int max_level CV_DEFAULT(1),\n    CvTermCriteria termcrit CV_DEFAULT(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1)));\n\n/* Segments image using seed \"markers\" */\nCVAPI(void) cvWatershed( const CvArr* image, CvArr* markers );\n\n/* Calculates an image derivative using generalized Sobel\n   (aperture_size = 1,3,5,7) or Scharr (aperture_size = -1) operator.\n   Scharr can be used only for the first dx or dy derivative */\nCVAPI(void) cvSobel( const CvArr* src, CvArr* dst,\n                    int xorder, int yorder,\n                    int aperture_size CV_DEFAULT(3));\n\n/* Calculates the image Laplacian: (d2/dx + d2/dy)I */\nCVAPI(void) cvLaplace( const CvArr* src, CvArr* dst,\n                      int aperture_size CV_DEFAULT(3) );\n\n/* Converts input array pixels from one color space to another */\nCVAPI(void)  cvCvtColor( const CvArr* src, CvArr* dst, int code );\n\n\n/* Resizes image (input array is resized to fit the destination array) */\nCVAPI(void)  cvResize( const CvArr* src, CvArr* dst,\n                       int interpolation CV_DEFAULT( CV_INTER_LINEAR ));\n\n/* Warps image with affine transform */\nCVAPI(void)  cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix,\n                           int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                           CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/* Computes affine transform matrix for mapping src[i] to dst[i] (i=0,1,2) */\nCVAPI(CvMat*) cvGetAffineTransform( const CvPoint2D32f * src,\n                                    const CvPoint2D32f * dst,\n                                    CvMat * map_matrix );\n\n/* Computes rotation_matrix matrix */\nCVAPI(CvMat*)  cv2DRotationMatrix( CvPoint2D32f center, double angle,\n                                   double scale, CvMat* map_matrix );\n\n/* Warps image with perspective (projective) transform */\nCVAPI(void)  cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,\n                                int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                                CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/* Computes perspective transform matrix for mapping src[i] to dst[i] (i=0,1,2,3) */\nCVAPI(CvMat*) cvGetPerspectiveTransform( const CvPoint2D32f* src,\n                                         const CvPoint2D32f* dst,\n                                         CvMat* map_matrix );\n\n/* Performs generic geometric transformation using the specified coordinate maps */\nCVAPI(void)  cvRemap( const CvArr* src, CvArr* dst,\n                      const CvArr* mapx, const CvArr* mapy,\n                      int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                      CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/* Converts mapx & mapy from floating-point to integer formats for cvRemap */\nCVAPI(void)  cvConvertMaps( const CvArr* mapx, const CvArr* mapy,\n                            CvArr* mapxy, CvArr* mapalpha );\n\n/* Performs forward or inverse log-polar image transform */\nCVAPI(void)  cvLogPolar( const CvArr* src, CvArr* dst,\n                         CvPoint2D32f center, double M,\n                         int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));\n\n/* Performs forward or inverse linear-polar image transform */\nCVAPI(void)  cvLinearPolar( const CvArr* src, CvArr* dst,\n                         CvPoint2D32f center, double maxRadius,\n                         int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));\n\n/* Transforms the input image to compensate lens distortion */\nCVAPI(void) cvUndistort2( const CvArr* src, CvArr* dst,\n                          const CvMat* camera_matrix,\n                          const CvMat* distortion_coeffs,\n                          const CvMat* new_camera_matrix CV_DEFAULT(0) );\n\n/* Computes transformation map from intrinsic camera parameters\n   that can used by cvRemap */\nCVAPI(void) cvInitUndistortMap( const CvMat* camera_matrix,\n                                const CvMat* distortion_coeffs,\n                                CvArr* mapx, CvArr* mapy );\n\n/* Computes undistortion+rectification map for a head of stereo camera */\nCVAPI(void) cvInitUndistortRectifyMap( const CvMat* camera_matrix,\n                                       const CvMat* dist_coeffs,\n                                       const CvMat *R, const CvMat* new_camera_matrix,\n                                       CvArr* mapx, CvArr* mapy );\n\n/* Computes the original (undistorted) feature coordinates\n   from the observed (distorted) coordinates */\nCVAPI(void) cvUndistortPoints( const CvMat* src, CvMat* dst,\n                               const CvMat* camera_matrix,\n                               const CvMat* dist_coeffs,\n                               const CvMat* R CV_DEFAULT(0),\n                               const CvMat* P CV_DEFAULT(0));\n\n/* creates structuring element used for morphological operations */\nCVAPI(IplConvKernel*)  cvCreateStructuringElementEx(\n            int cols, int  rows, int  anchor_x, int  anchor_y,\n            int shape, int* values CV_DEFAULT(NULL) );\n\n/* releases structuring element */\nCVAPI(void)  cvReleaseStructuringElement( IplConvKernel** element );\n\n/* erodes input image (applies minimum filter) one or more times.\n   If element pointer is NULL, 3x3 rectangular element is used */\nCVAPI(void)  cvErode( const CvArr* src, CvArr* dst,\n                      IplConvKernel* element CV_DEFAULT(NULL),\n                      int iterations CV_DEFAULT(1) );\n\n/* dilates input image (applies maximum filter) one or more times.\n   If element pointer is NULL, 3x3 rectangular element is used */\nCVAPI(void)  cvDilate( const CvArr* src, CvArr* dst,\n                       IplConvKernel* element CV_DEFAULT(NULL),\n                       int iterations CV_DEFAULT(1) );\n\n/* Performs complex morphological transformation */\nCVAPI(void)  cvMorphologyEx( const CvArr* src, CvArr* dst,\n                             CvArr* temp, IplConvKernel* element,\n                             int operation, int iterations CV_DEFAULT(1) );\n\n/* Calculates all spatial and central moments up to the 3rd order */\nCVAPI(void) cvMoments( const CvArr* arr, CvMoments* moments, int binary CV_DEFAULT(0));\n\n/* Retrieve particular spatial, central or normalized central moments */\nCVAPI(double)  cvGetSpatialMoment( CvMoments* moments, int x_order, int y_order );\nCVAPI(double)  cvGetCentralMoment( CvMoments* moments, int x_order, int y_order );\nCVAPI(double)  cvGetNormalizedCentralMoment( CvMoments* moments,\n                                             int x_order, int y_order );\n\n/* Calculates 7 Hu's invariants from precalculated spatial and central moments */\nCVAPI(void) cvGetHuMoments( CvMoments*  moments, CvHuMoments*  hu_moments );\n\n/*********************************** data sampling **************************************/\n\n/* Fetches pixels that belong to the specified line segment and stores them to the buffer.\n   Returns the number of retrieved points. */\nCVAPI(int)  cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* buffer,\n                          int connectivity CV_DEFAULT(8));\n\n/* Retrieves the rectangular image region with specified center from the input array.\n dst(x,y) <- src(x + center.x - dst_width/2, y + center.y - dst_height/2).\n Values of pixels with fractional coordinates are retrieved using bilinear interpolation*/\nCVAPI(void)  cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );\n\n\n/* Retrieves quadrangle from the input array.\n    matrixarr = ( a11  a12 | b1 )   dst(x,y) <- src(A[x y]' + b)\n                ( a21  a22 | b2 )   (bilinear interpolation is used to retrieve pixels\n                                     with fractional coordinates)\n*/\nCVAPI(void)  cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,\n                                    const CvMat* map_matrix );\n\n/* Measures similarity between template and overlapped windows in the source image\n   and fills the resultant image with the measurements */\nCVAPI(void)  cvMatchTemplate( const CvArr* image, const CvArr* templ,\n                              CvArr* result, int method );\n\n/* Computes earth mover distance between\n   two weighted point sets (called signatures) */\nCVAPI(float)  cvCalcEMD2( const CvArr* signature1,\n                          const CvArr* signature2,\n                          int distance_type,\n                          CvDistanceFunction distance_func CV_DEFAULT(NULL),\n                          const CvArr* cost_matrix CV_DEFAULT(NULL),\n                          CvArr* flow CV_DEFAULT(NULL),\n                          float* lower_bound CV_DEFAULT(NULL),\n                          void* userdata CV_DEFAULT(NULL));\n\n/****************************************************************************************\\\n*                              Contours retrieving                                       *\n\\****************************************************************************************/\n\n/* Retrieves outer and optionally inner boundaries of white (non-zero) connected\n   components in the black (zero) background */\nCVAPI(int)  cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,\n                            int header_size CV_DEFAULT(sizeof(CvContour)),\n                            int mode CV_DEFAULT(CV_RETR_LIST),\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/* Initializes contour retrieving process.\n   Calls cvStartFindContours.\n   Calls cvFindNextContour until null pointer is returned\n   or some other condition becomes true.\n   Calls cvEndFindContours at the end. */\nCVAPI(CvContourScanner)  cvStartFindContours( CvArr* image, CvMemStorage* storage,\n                            int header_size CV_DEFAULT(sizeof(CvContour)),\n                            int mode CV_DEFAULT(CV_RETR_LIST),\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/* Retrieves next contour */\nCVAPI(CvSeq*)  cvFindNextContour( CvContourScanner scanner );\n\n\n/* Substitutes the last retrieved contour with the new one\n   (if the substitutor is null, the last retrieved contour is removed from the tree) */\nCVAPI(void)   cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour );\n\n\n/* Releases contour scanner and returns pointer to the first outer contour */\nCVAPI(CvSeq*)  cvEndFindContours( CvContourScanner* scanner );\n\n/* Approximates a single Freeman chain or a tree of chains to polygonal curves */\nCVAPI(CvSeq*) cvApproxChains( CvSeq* src_seq, CvMemStorage* storage,\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            double parameter CV_DEFAULT(0),\n                            int  minimal_perimeter CV_DEFAULT(0),\n                            int  recursive CV_DEFAULT(0));\n\n/* Initializes Freeman chain reader.\n   The reader is used to iteratively get coordinates of all the chain points.\n   If the Freeman codes should be read as is, a simple sequence reader should be used */\nCVAPI(void) cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader );\n\n/* Retrieves the next chain point */\nCVAPI(CvPoint) cvReadChainPoint( CvChainPtReader* reader );\n\n\n/****************************************************************************************\\\n*                            Contour Processing and Shape Analysis                       *\n\\****************************************************************************************/\n\n/* Approximates a single polygonal curve (contour) or\n   a tree of polygonal curves (contours) */\nCVAPI(CvSeq*)  cvApproxPoly( const void* src_seq,\n                             int header_size, CvMemStorage* storage,\n                             int method, double eps,\n                             int recursive CV_DEFAULT(0));\n\n/* Calculates perimeter of a contour or length of a part of contour */\nCVAPI(double)  cvArcLength( const void* curve,\n                            CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),\n                            int is_closed CV_DEFAULT(-1));\n\nCV_INLINE double cvContourPerimeter( const void* contour )\n{\n    return cvArcLength( contour, CV_WHOLE_SEQ, 1 );\n}\n\n\n/* Calculates contour bounding rectangle (update=1) or\n   just retrieves pre-calculated rectangle (update=0) */\nCVAPI(CvRect)  cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );\n\n/* Calculates area of a contour or contour segment */\nCVAPI(double)  cvContourArea( const CvArr* contour,\n                              CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),\n                              int oriented CV_DEFAULT(0));\n\n/* Finds minimum area rotated rectangle bounding a set of points */\nCVAPI(CvBox2D)  cvMinAreaRect2( const CvArr* points,\n                                CvMemStorage* storage CV_DEFAULT(NULL));\n\n/* Finds minimum enclosing circle for a set of points */\nCVAPI(int)  cvMinEnclosingCircle( const CvArr* points,\n                                  CvPoint2D32f* center, float* radius );\n\n/* Compares two contours by matching their moments */\nCVAPI(double)  cvMatchShapes( const void* object1, const void* object2,\n                              int method, double parameter CV_DEFAULT(0));\n\n/* Calculates exact convex hull of 2d point set */\nCVAPI(CvSeq*) cvConvexHull2( const CvArr* input,\n                             void* hull_storage CV_DEFAULT(NULL),\n                             int orientation CV_DEFAULT(CV_CLOCKWISE),\n                             int return_points CV_DEFAULT(0));\n\n/* Checks whether the contour is convex or not (returns 1 if convex, 0 if not) */\nCVAPI(int)  cvCheckContourConvexity( const CvArr* contour );\n\n\n/* Finds convexity defects for the contour */\nCVAPI(CvSeq*)  cvConvexityDefects( const CvArr* contour, const CvArr* convexhull,\n                                   CvMemStorage* storage CV_DEFAULT(NULL));\n\n/* Fits ellipse into a set of 2d points */\nCVAPI(CvBox2D) cvFitEllipse2( const CvArr* points );\n\n/* Finds minimum rectangle containing two given rectangles */\nCVAPI(CvRect)  cvMaxRect( const CvRect* rect1, const CvRect* rect2 );\n\n/* Finds coordinates of the box vertices */\nCVAPI(void) cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] );\n\n/* Initializes sequence header for a matrix (column or row vector) of points -\n   a wrapper for cvMakeSeqHeaderForArray (it does not initialize bounding rectangle!!!) */\nCVAPI(CvSeq*) cvPointSeqFromMat( int seq_kind, const CvArr* mat,\n                                 CvContour* contour_header,\n                                 CvSeqBlock* block );\n\n/* Checks whether the point is inside polygon, outside, on an edge (at a vertex).\n   Returns positive, negative or zero value, correspondingly.\n   Optionally, measures a signed distance between\n   the point and the nearest polygon edge (measure_dist=1) */\nCVAPI(double) cvPointPolygonTest( const CvArr* contour,\n                                  CvPoint2D32f pt, int measure_dist );\n\n/****************************************************************************************\\\n*                                  Histogram functions                                   *\n\\****************************************************************************************/\n\n/* Creates new histogram */\nCVAPI(CvHistogram*)  cvCreateHist( int dims, int* sizes, int type,\n                                   float** ranges CV_DEFAULT(NULL),\n                                   int uniform CV_DEFAULT(1));\n\n/* Assignes histogram bin ranges */\nCVAPI(void)  cvSetHistBinRanges( CvHistogram* hist, float** ranges,\n                                int uniform CV_DEFAULT(1));\n\n/* Creates histogram header for array */\nCVAPI(CvHistogram*)  cvMakeHistHeaderForArray(\n                            int  dims, int* sizes, CvHistogram* hist,\n                            float* data, float** ranges CV_DEFAULT(NULL),\n                            int uniform CV_DEFAULT(1));\n\n/* Releases histogram */\nCVAPI(void)  cvReleaseHist( CvHistogram** hist );\n\n/* Clears all the histogram bins */\nCVAPI(void)  cvClearHist( CvHistogram* hist );\n\n/* Finds indices and values of minimum and maximum histogram bins */\nCVAPI(void)  cvGetMinMaxHistValue( const CvHistogram* hist,\n                                   float* min_value, float* max_value,\n                                   int* min_idx CV_DEFAULT(NULL),\n                                   int* max_idx CV_DEFAULT(NULL));\n\n\n/* Normalizes histogram by dividing all bins by sum of the bins, multiplied by <factor>.\n   After that sum of histogram bins is equal to <factor> */\nCVAPI(void)  cvNormalizeHist( CvHistogram* hist, double factor );\n\n\n/* Clear all histogram bins that are below the threshold */\nCVAPI(void)  cvThreshHist( CvHistogram* hist, double threshold );\n\n\n/* Compares two histogram */\nCVAPI(double)  cvCompareHist( const CvHistogram* hist1,\n                              const CvHistogram* hist2,\n                              int method);\n\n/* Copies one histogram to another. Destination histogram is created if\n   the destination pointer is NULL */\nCVAPI(void)  cvCopyHist( const CvHistogram* src, CvHistogram** dst );\n\n\n/* Calculates bayesian probabilistic histograms\n   (each or src and dst is an array of <number> histograms */\nCVAPI(void)  cvCalcBayesianProb( CvHistogram** src, int number,\n                                CvHistogram** dst);\n\n/* Calculates array histogram */\nCVAPI(void)  cvCalcArrHist( CvArr** arr, CvHistogram* hist,\n                            int accumulate CV_DEFAULT(0),\n                            const CvArr* mask CV_DEFAULT(NULL) );\n\nCV_INLINE  void  cvCalcHist( IplImage** image, CvHistogram* hist,\n                             int accumulate CV_DEFAULT(0),\n                             const CvArr* mask CV_DEFAULT(NULL) )\n{\n    cvCalcArrHist( (CvArr**)image, hist, accumulate, mask );\n}\n\n/* Calculates back project */\nCVAPI(void)  cvCalcArrBackProject( CvArr** image, CvArr* dst,\n                                   const CvHistogram* hist );\n#define  cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist)\n\n\n/* Does some sort of template matching but compares histograms of\n   template and each window location */\nCVAPI(void)  cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range,\n                                        CvHistogram* hist, int method,\n                                        double factor );\n#define  cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) \\\n     cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor )\n\n\n/* calculates probabilistic density (divides one histogram by another) */\nCVAPI(void)  cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2,\n                                CvHistogram* dst_hist, double scale CV_DEFAULT(255) );\n\n/* equalizes histogram of 8-bit single-channel image */\nCVAPI(void)  cvEqualizeHist( const CvArr* src, CvArr* dst );\n\n\n/* Applies distance transform to binary image */\nCVAPI(void)  cvDistTransform( const CvArr* src, CvArr* dst,\n                              int distance_type CV_DEFAULT(CV_DIST_L2),\n                              int mask_size CV_DEFAULT(3),\n                              const float* mask CV_DEFAULT(NULL),\n                              CvArr* labels CV_DEFAULT(NULL),\n                              int labelType CV_DEFAULT(CV_DIST_LABEL_CCOMP));\n\n\n/* Applies fixed-level threshold to grayscale image.\n   This is a basic operation applied before retrieving contours */\nCVAPI(double)  cvThreshold( const CvArr*  src, CvArr*  dst,\n                            double  threshold, double  max_value,\n                            int threshold_type );\n\n/* Applies adaptive threshold to grayscale image.\n   The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and\n   CV_ADAPTIVE_THRESH_GAUSSIAN_C are:\n   neighborhood size (3, 5, 7 etc.),\n   and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...) */\nCVAPI(void)  cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,\n                                  int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),\n                                  int threshold_type CV_DEFAULT(CV_THRESH_BINARY),\n                                  int block_size CV_DEFAULT(3),\n                                  double param1 CV_DEFAULT(5));\n\n/* Fills the connected component until the color difference gets large enough */\nCVAPI(void)  cvFloodFill( CvArr* image, CvPoint seed_point,\n                          CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)),\n                          CvScalar up_diff CV_DEFAULT(cvScalarAll(0)),\n                          CvConnectedComp* comp CV_DEFAULT(NULL),\n                          int flags CV_DEFAULT(4),\n                          CvArr* mask CV_DEFAULT(NULL));\n\n/****************************************************************************************\\\n*                                  Feature detection                                     *\n\\****************************************************************************************/\n\n/* Runs canny edge detector */\nCVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1,\n                      double threshold2, int  aperture_size CV_DEFAULT(3) );\n\n/* Calculates constraint image for corner detection\n   Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy.\n   Applying threshold to the result gives coordinates of corners */\nCVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners,\n                               int aperture_size CV_DEFAULT(3) );\n\n/* Calculates eigen values and vectors of 2x2\n   gradient covariation matrix at every image pixel */\nCVAPI(void)  cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,\n                                       int block_size, int aperture_size CV_DEFAULT(3) );\n\n/* Calculates minimal eigenvalue for 2x2 gradient covariation matrix at\n   every image pixel */\nCVAPI(void)  cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval,\n                                  int block_size, int aperture_size CV_DEFAULT(3) );\n\n/* Harris corner detector:\n   Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel */\nCVAPI(void)  cvCornerHarris( const CvArr* image, CvArr* harris_response,\n                             int block_size, int aperture_size CV_DEFAULT(3),\n                             double k CV_DEFAULT(0.04) );\n\n/* Adjust corner position using some sort of gradient search */\nCVAPI(void)  cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,\n                                 int count, CvSize win, CvSize zero_zone,\n                                 CvTermCriteria  criteria );\n\n/* Finds a sparse set of points within the selected region\n   that seem to be easy to track */\nCVAPI(void)  cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image,\n                                    CvArr* temp_image, CvPoint2D32f* corners,\n                                    int* corner_count, double  quality_level,\n                                    double  min_distance,\n                                    const CvArr* mask CV_DEFAULT(NULL),\n                                    int block_size CV_DEFAULT(3),\n                                    int use_harris CV_DEFAULT(0),\n                                    double k CV_DEFAULT(0.04) );\n\n/* Finds lines on binary image using one of several methods.\n   line_storage is either memory storage or 1 x <max number of lines> CvMat, its\n   number of columns is changed by the function.\n   method is one of CV_HOUGH_*;\n   rho, theta and threshold are used for each of those methods;\n   param1 ~ line length, param2 ~ line gap - for probabilistic,\n   param1 ~ srn, param2 ~ stn - for multi-scale */\nCVAPI(CvSeq*)  cvHoughLines2( CvArr* image, void* line_storage, int method,\n                              double rho, double theta, int threshold,\n                              double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0));\n\n/* Finds circles in the image */\nCVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage,\n                              int method, double dp, double min_dist,\n                              double param1 CV_DEFAULT(100),\n                              double param2 CV_DEFAULT(100),\n                              int min_radius CV_DEFAULT(0),\n                              int max_radius CV_DEFAULT(0));\n\n/* Fits a line into set of 2d or 3d points in a robust way (M-estimator technique) */\nCVAPI(void)  cvFitLine( const CvArr* points, int dist_type, double param,\n                        double reps, double aeps, float* line );\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/imgproc/types_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_TYPES_C_H__\n#define __OPENCV_IMGPROC_TYPES_C_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Connected component structure */\ntypedef struct CvConnectedComp\n{\n    double area;    /* area of the connected component  */\n    CvScalar value; /* average color of the connected component */\n    CvRect rect;    /* ROI of the component  */\n    CvSeq* contour; /* optional component boundary\n                      (the contour might have child contours corresponding to the holes)*/\n}\nCvConnectedComp;\n\n/* Image smooth methods */\nenum\n{\n    CV_BLUR_NO_SCALE =0,\n    CV_BLUR  =1,\n    CV_GAUSSIAN  =2,\n    CV_MEDIAN =3,\n    CV_BILATERAL =4\n};\n\n/* Filters used in pyramid decomposition */\nenum\n{\n    CV_GAUSSIAN_5x5 = 7\n};\n\n/* Special filters */\nenum\n{\n    CV_SCHARR =-1,\n    CV_MAX_SOBEL_KSIZE =7\n};\n\n/* Constants for color conversion */\nenum\n{\n    CV_BGR2BGRA    =0,\n    CV_RGB2RGBA    =CV_BGR2BGRA,\n\n    CV_BGRA2BGR    =1,\n    CV_RGBA2RGB    =CV_BGRA2BGR,\n\n    CV_BGR2RGBA    =2,\n    CV_RGB2BGRA    =CV_BGR2RGBA,\n\n    CV_RGBA2BGR    =3,\n    CV_BGRA2RGB    =CV_RGBA2BGR,\n\n    CV_BGR2RGB     =4,\n    CV_RGB2BGR     =CV_BGR2RGB,\n\n    CV_BGRA2RGBA   =5,\n    CV_RGBA2BGRA   =CV_BGRA2RGBA,\n\n    CV_BGR2GRAY    =6,\n    CV_RGB2GRAY    =7,\n    CV_GRAY2BGR    =8,\n    CV_GRAY2RGB    =CV_GRAY2BGR,\n    CV_GRAY2BGRA   =9,\n    CV_GRAY2RGBA   =CV_GRAY2BGRA,\n    CV_BGRA2GRAY   =10,\n    CV_RGBA2GRAY   =11,\n\n    CV_BGR2BGR565  =12,\n    CV_RGB2BGR565  =13,\n    CV_BGR5652BGR  =14,\n    CV_BGR5652RGB  =15,\n    CV_BGRA2BGR565 =16,\n    CV_RGBA2BGR565 =17,\n    CV_BGR5652BGRA =18,\n    CV_BGR5652RGBA =19,\n\n    CV_GRAY2BGR565 =20,\n    CV_BGR5652GRAY =21,\n\n    CV_BGR2BGR555  =22,\n    CV_RGB2BGR555  =23,\n    CV_BGR5552BGR  =24,\n    CV_BGR5552RGB  =25,\n    CV_BGRA2BGR555 =26,\n    CV_RGBA2BGR555 =27,\n    CV_BGR5552BGRA =28,\n    CV_BGR5552RGBA =29,\n\n    CV_GRAY2BGR555 =30,\n    CV_BGR5552GRAY =31,\n\n    CV_BGR2XYZ     =32,\n    CV_RGB2XYZ     =33,\n    CV_XYZ2BGR     =34,\n    CV_XYZ2RGB     =35,\n\n    CV_BGR2YCrCb   =36,\n    CV_RGB2YCrCb   =37,\n    CV_YCrCb2BGR   =38,\n    CV_YCrCb2RGB   =39,\n\n    CV_BGR2HSV     =40,\n    CV_RGB2HSV     =41,\n\n    CV_BGR2Lab     =44,\n    CV_RGB2Lab     =45,\n\n    CV_BayerBG2BGR =46,\n    CV_BayerGB2BGR =47,\n    CV_BayerRG2BGR =48,\n    CV_BayerGR2BGR =49,\n\n    CV_BayerBG2RGB =CV_BayerRG2BGR,\n    CV_BayerGB2RGB =CV_BayerGR2BGR,\n    CV_BayerRG2RGB =CV_BayerBG2BGR,\n    CV_BayerGR2RGB =CV_BayerGB2BGR,\n\n    CV_BGR2Luv     =50,\n    CV_RGB2Luv     =51,\n    CV_BGR2HLS     =52,\n    CV_RGB2HLS     =53,\n\n    CV_HSV2BGR     =54,\n    CV_HSV2RGB     =55,\n\n    CV_Lab2BGR     =56,\n    CV_Lab2RGB     =57,\n    CV_Luv2BGR     =58,\n    CV_Luv2RGB     =59,\n    CV_HLS2BGR     =60,\n    CV_HLS2RGB     =61,\n\n    CV_BayerBG2BGR_VNG =62,\n    CV_BayerGB2BGR_VNG =63,\n    CV_BayerRG2BGR_VNG =64,\n    CV_BayerGR2BGR_VNG =65,\n\n    CV_BayerBG2RGB_VNG =CV_BayerRG2BGR_VNG,\n    CV_BayerGB2RGB_VNG =CV_BayerGR2BGR_VNG,\n    CV_BayerRG2RGB_VNG =CV_BayerBG2BGR_VNG,\n    CV_BayerGR2RGB_VNG =CV_BayerGB2BGR_VNG,\n\n    CV_BGR2HSV_FULL = 66,\n    CV_RGB2HSV_FULL = 67,\n    CV_BGR2HLS_FULL = 68,\n    CV_RGB2HLS_FULL = 69,\n\n    CV_HSV2BGR_FULL = 70,\n    CV_HSV2RGB_FULL = 71,\n    CV_HLS2BGR_FULL = 72,\n    CV_HLS2RGB_FULL = 73,\n\n    CV_LBGR2Lab     = 74,\n    CV_LRGB2Lab     = 75,\n    CV_LBGR2Luv     = 76,\n    CV_LRGB2Luv     = 77,\n\n    CV_Lab2LBGR     = 78,\n    CV_Lab2LRGB     = 79,\n    CV_Luv2LBGR     = 80,\n    CV_Luv2LRGB     = 81,\n\n    CV_BGR2YUV      = 82,\n    CV_RGB2YUV      = 83,\n    CV_YUV2BGR      = 84,\n    CV_YUV2RGB      = 85,\n\n    CV_BayerBG2GRAY = 86,\n    CV_BayerGB2GRAY = 87,\n    CV_BayerRG2GRAY = 88,\n    CV_BayerGR2GRAY = 89,\n\n    //YUV 4:2:0 formats family\n    CV_YUV2RGB_NV12 = 90,\n    CV_YUV2BGR_NV12 = 91,\n    CV_YUV2RGB_NV21 = 92,\n    CV_YUV2BGR_NV21 = 93,\n    CV_YUV420sp2RGB = CV_YUV2RGB_NV21,\n    CV_YUV420sp2BGR = CV_YUV2BGR_NV21,\n\n    CV_YUV2RGBA_NV12 = 94,\n    CV_YUV2BGRA_NV12 = 95,\n    CV_YUV2RGBA_NV21 = 96,\n    CV_YUV2BGRA_NV21 = 97,\n    CV_YUV420sp2RGBA = CV_YUV2RGBA_NV21,\n    CV_YUV420sp2BGRA = CV_YUV2BGRA_NV21,\n\n    CV_YUV2RGB_YV12 = 98,\n    CV_YUV2BGR_YV12 = 99,\n    CV_YUV2RGB_IYUV = 100,\n    CV_YUV2BGR_IYUV = 101,\n    CV_YUV2RGB_I420 = CV_YUV2RGB_IYUV,\n    CV_YUV2BGR_I420 = CV_YUV2BGR_IYUV,\n    CV_YUV420p2RGB = CV_YUV2RGB_YV12,\n    CV_YUV420p2BGR = CV_YUV2BGR_YV12,\n\n    CV_YUV2RGBA_YV12 = 102,\n    CV_YUV2BGRA_YV12 = 103,\n    CV_YUV2RGBA_IYUV = 104,\n    CV_YUV2BGRA_IYUV = 105,\n    CV_YUV2RGBA_I420 = CV_YUV2RGBA_IYUV,\n    CV_YUV2BGRA_I420 = CV_YUV2BGRA_IYUV,\n    CV_YUV420p2RGBA = CV_YUV2RGBA_YV12,\n    CV_YUV420p2BGRA = CV_YUV2BGRA_YV12,\n\n    CV_YUV2GRAY_420 = 106,\n    CV_YUV2GRAY_NV21 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_NV12 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_YV12 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_IYUV = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_I420 = CV_YUV2GRAY_420,\n    CV_YUV420sp2GRAY = CV_YUV2GRAY_420,\n    CV_YUV420p2GRAY = CV_YUV2GRAY_420,\n\n    //YUV 4:2:2 formats family\n    CV_YUV2RGB_UYVY = 107,\n    CV_YUV2BGR_UYVY = 108,\n    //CV_YUV2RGB_VYUY = 109,\n    //CV_YUV2BGR_VYUY = 110,\n    CV_YUV2RGB_Y422 = CV_YUV2RGB_UYVY,\n    CV_YUV2BGR_Y422 = CV_YUV2BGR_UYVY,\n    CV_YUV2RGB_UYNV = CV_YUV2RGB_UYVY,\n    CV_YUV2BGR_UYNV = CV_YUV2BGR_UYVY,\n\n    CV_YUV2RGBA_UYVY = 111,\n    CV_YUV2BGRA_UYVY = 112,\n    //CV_YUV2RGBA_VYUY = 113,\n    //CV_YUV2BGRA_VYUY = 114,\n    CV_YUV2RGBA_Y422 = CV_YUV2RGBA_UYVY,\n    CV_YUV2BGRA_Y422 = CV_YUV2BGRA_UYVY,\n    CV_YUV2RGBA_UYNV = CV_YUV2RGBA_UYVY,\n    CV_YUV2BGRA_UYNV = CV_YUV2BGRA_UYVY,\n\n    CV_YUV2RGB_YUY2 = 115,\n    CV_YUV2BGR_YUY2 = 116,\n    CV_YUV2RGB_YVYU = 117,\n    CV_YUV2BGR_YVYU = 118,\n    CV_YUV2RGB_YUYV = CV_YUV2RGB_YUY2,\n    CV_YUV2BGR_YUYV = CV_YUV2BGR_YUY2,\n    CV_YUV2RGB_YUNV = CV_YUV2RGB_YUY2,\n    CV_YUV2BGR_YUNV = CV_YUV2BGR_YUY2,\n\n    CV_YUV2RGBA_YUY2 = 119,\n    CV_YUV2BGRA_YUY2 = 120,\n    CV_YUV2RGBA_YVYU = 121,\n    CV_YUV2BGRA_YVYU = 122,\n    CV_YUV2RGBA_YUYV = CV_YUV2RGBA_YUY2,\n    CV_YUV2BGRA_YUYV = CV_YUV2BGRA_YUY2,\n    CV_YUV2RGBA_YUNV = CV_YUV2RGBA_YUY2,\n    CV_YUV2BGRA_YUNV = CV_YUV2BGRA_YUY2,\n\n    CV_YUV2GRAY_UYVY = 123,\n    CV_YUV2GRAY_YUY2 = 124,\n    //CV_YUV2GRAY_VYUY = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_Y422 = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_UYNV = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_YVYU = CV_YUV2GRAY_YUY2,\n    CV_YUV2GRAY_YUYV = CV_YUV2GRAY_YUY2,\n    CV_YUV2GRAY_YUNV = CV_YUV2GRAY_YUY2,\n\n    // alpha premultiplication\n    CV_RGBA2mRGBA = 125,\n    CV_mRGBA2RGBA = 126,\n\n    CV_RGB2YUV_I420 = 127,\n    CV_BGR2YUV_I420 = 128,\n    CV_RGB2YUV_IYUV = CV_RGB2YUV_I420,\n    CV_BGR2YUV_IYUV = CV_BGR2YUV_I420,\n\n    CV_RGBA2YUV_I420 = 129,\n    CV_BGRA2YUV_I420 = 130,\n    CV_RGBA2YUV_IYUV = CV_RGBA2YUV_I420,\n    CV_BGRA2YUV_IYUV = CV_BGRA2YUV_I420,\n    CV_RGB2YUV_YV12  = 131,\n    CV_BGR2YUV_YV12  = 132,\n    CV_RGBA2YUV_YV12 = 133,\n    CV_BGRA2YUV_YV12 = 134,\n\n    CV_COLORCVT_MAX  = 135\n};\n\n\n/* Sub-pixel interpolation methods */\nenum\n{\n    CV_INTER_NN        =0,\n    CV_INTER_LINEAR    =1,\n    CV_INTER_CUBIC     =2,\n    CV_INTER_AREA      =3,\n    CV_INTER_LANCZOS4  =4\n};\n\n/* ... and other image warping flags */\nenum\n{\n    CV_WARP_FILL_OUTLIERS =8,\n    CV_WARP_INVERSE_MAP  =16\n};\n\n/* Shapes of a structuring element for morphological operations */\nenum\n{\n    CV_SHAPE_RECT      =0,\n    CV_SHAPE_CROSS     =1,\n    CV_SHAPE_ELLIPSE   =2,\n    CV_SHAPE_CUSTOM    =100\n};\n\n/* Morphological operations */\nenum\n{\n    CV_MOP_ERODE        =0,\n    CV_MOP_DILATE       =1,\n    CV_MOP_OPEN         =2,\n    CV_MOP_CLOSE        =3,\n    CV_MOP_GRADIENT     =4,\n    CV_MOP_TOPHAT       =5,\n    CV_MOP_BLACKHAT     =6\n};\n\n/* Spatial and central moments */\ntypedef struct CvMoments\n{\n    double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */\n    double  mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */\n    double  inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */\n}\nCvMoments;\n\n/* Hu invariants */\ntypedef struct CvHuMoments\n{\n    double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /* Hu invariants */\n}\nCvHuMoments;\n\n/* Template matching methods */\nenum\n{\n    CV_TM_SQDIFF        =0,\n    CV_TM_SQDIFF_NORMED =1,\n    CV_TM_CCORR         =2,\n    CV_TM_CCORR_NORMED  =3,\n    CV_TM_CCOEFF        =4,\n    CV_TM_CCOEFF_NORMED =5\n};\n\ntypedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param );\n\n/* Contour retrieval modes */\nenum\n{\n    CV_RETR_EXTERNAL=0,\n    CV_RETR_LIST=1,\n    CV_RETR_CCOMP=2,\n    CV_RETR_TREE=3,\n    CV_RETR_FLOODFILL=4\n};\n\n/* Contour approximation methods */\nenum\n{\n    CV_CHAIN_CODE=0,\n    CV_CHAIN_APPROX_NONE=1,\n    CV_CHAIN_APPROX_SIMPLE=2,\n    CV_CHAIN_APPROX_TC89_L1=3,\n    CV_CHAIN_APPROX_TC89_KCOS=4,\n    CV_LINK_RUNS=5\n};\n\n/*\nInternal structure that is used for sequental retrieving contours from the image.\nIt supports both hierarchical and plane variants of Suzuki algorithm.\n*/\ntypedef struct _CvContourScanner* CvContourScanner;\n\n/* Freeman chain reader state */\ntypedef struct CvChainPtReader\n{\n    CV_SEQ_READER_FIELDS()\n    char      code;\n    CvPoint   pt;\n    schar     deltas[8][2];\n}\nCvChainPtReader;\n\n/* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */\n#define  CV_INIT_3X3_DELTAS( deltas, step, nch )            \\\n    ((deltas)[0] =  (nch),  (deltas)[1] = -(step) + (nch),  \\\n     (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch),  \\\n     (deltas)[4] = -(nch),  (deltas)[5] =  (step) - (nch),  \\\n     (deltas)[6] =  (step), (deltas)[7] =  (step) + (nch))\n\n\n/****************************************************************************************\\\n*                              Planar subdivisions                                       *\n\\****************************************************************************************/\n\ntypedef size_t CvSubdiv2DEdge;\n\n#define CV_QUADEDGE2D_FIELDS()     \\\n    int flags;                     \\\n    struct CvSubdiv2DPoint* pt[4]; \\\n    CvSubdiv2DEdge  next[4];\n\n#define CV_SUBDIV2D_POINT_FIELDS()\\\n    int            flags;      \\\n    CvSubdiv2DEdge first;      \\\n    CvPoint2D32f   pt;         \\\n    int id;\n\n#define CV_SUBDIV2D_VIRTUAL_POINT_FLAG (1 << 30)\n\ntypedef struct CvQuadEdge2D\n{\n    CV_QUADEDGE2D_FIELDS()\n}\nCvQuadEdge2D;\n\ntypedef struct CvSubdiv2DPoint\n{\n    CV_SUBDIV2D_POINT_FIELDS()\n}\nCvSubdiv2DPoint;\n\n#define CV_SUBDIV2D_FIELDS()    \\\n    CV_GRAPH_FIELDS()           \\\n    int  quad_edges;            \\\n    int  is_geometry_valid;     \\\n    CvSubdiv2DEdge recent_edge; \\\n    CvPoint2D32f  topleft;      \\\n    CvPoint2D32f  bottomright;\n\ntypedef struct CvSubdiv2D\n{\n    CV_SUBDIV2D_FIELDS()\n}\nCvSubdiv2D;\n\n\ntypedef enum CvSubdiv2DPointLocation\n{\n    CV_PTLOC_ERROR = -2,\n    CV_PTLOC_OUTSIDE_RECT = -1,\n    CV_PTLOC_INSIDE = 0,\n    CV_PTLOC_VERTEX = 1,\n    CV_PTLOC_ON_EDGE = 2\n}\nCvSubdiv2DPointLocation;\n\ntypedef enum CvNextEdgeType\n{\n    CV_NEXT_AROUND_ORG   = 0x00,\n    CV_NEXT_AROUND_DST   = 0x22,\n    CV_PREV_AROUND_ORG   = 0x11,\n    CV_PREV_AROUND_DST   = 0x33,\n    CV_NEXT_AROUND_LEFT  = 0x13,\n    CV_NEXT_AROUND_RIGHT = 0x31,\n    CV_PREV_AROUND_LEFT  = 0x20,\n    CV_PREV_AROUND_RIGHT = 0x02\n}\nCvNextEdgeType;\n\n/* get the next edge with the same origin point (counterwise) */\n#define  CV_SUBDIV2D_NEXT_EDGE( edge )  (((CvQuadEdge2D*)((edge) & ~3))->next[(edge)&3])\n\n\n/* Contour approximation algorithms */\nenum\n{\n    CV_POLY_APPROX_DP = 0\n};\n\n/* Shape matching methods */\nenum\n{\n    CV_CONTOURS_MATCH_I1  =1,\n    CV_CONTOURS_MATCH_I2  =2,\n    CV_CONTOURS_MATCH_I3  =3\n};\n\n/* Shape orientation */\nenum\n{\n    CV_CLOCKWISE         =1,\n    CV_COUNTER_CLOCKWISE =2\n};\n\n\n/* Convexity defect */\ntypedef struct CvConvexityDefect\n{\n    CvPoint* start; /* point of the contour where the defect begins */\n    CvPoint* end; /* point of the contour where the defect ends */\n    CvPoint* depth_point; /* the farthest from the convex hull point within the defect */\n    float depth; /* distance between the farthest point and the convex hull */\n} CvConvexityDefect;\n\n\n/* Histogram comparison methods */\nenum\n{\n    CV_COMP_CORREL        =0,\n    CV_COMP_CHISQR        =1,\n    CV_COMP_INTERSECT     =2,\n    CV_COMP_BHATTACHARYYA =3,\n    CV_COMP_HELLINGER     =CV_COMP_BHATTACHARYYA\n};\n\n/* Mask size for distance transform */\nenum\n{\n    CV_DIST_MASK_3   =3,\n    CV_DIST_MASK_5   =5,\n    CV_DIST_MASK_PRECISE =0\n};\n\n/* Content of output label array: connected components or pixels */\nenum\n{\n  CV_DIST_LABEL_CCOMP = 0,\n  CV_DIST_LABEL_PIXEL = 1\n};\n\n/* Distance types for Distance Transform and M-estimators */\nenum\n{\n    CV_DIST_USER    =-1,  /* User defined distance */\n    CV_DIST_L1      =1,   /* distance = |x1-x2| + |y1-y2| */\n    CV_DIST_L2      =2,   /* the simple euclidean distance */\n    CV_DIST_C       =3,   /* distance = max(|x1-x2|,|y1-y2|) */\n    CV_DIST_L12     =4,   /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */\n    CV_DIST_FAIR    =5,   /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */\n    CV_DIST_WELSCH  =6,   /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */\n    CV_DIST_HUBER   =7    /* distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */\n};\n\n\n/* Threshold types */\nenum\n{\n    CV_THRESH_BINARY      =0,  /* value = value > threshold ? max_value : 0       */\n    CV_THRESH_BINARY_INV  =1,  /* value = value > threshold ? 0 : max_value       */\n    CV_THRESH_TRUNC       =2,  /* value = value > threshold ? threshold : value   */\n    CV_THRESH_TOZERO      =3,  /* value = value > threshold ? value : 0           */\n    CV_THRESH_TOZERO_INV  =4,  /* value = value > threshold ? 0 : value           */\n    CV_THRESH_MASK        =7,\n    CV_THRESH_OTSU        =8  /* use Otsu algorithm to choose the optimal threshold value;\n                                 combine the flag with one of the above CV_THRESH_* values */\n};\n\n/* Adaptive threshold methods */\nenum\n{\n    CV_ADAPTIVE_THRESH_MEAN_C  =0,\n    CV_ADAPTIVE_THRESH_GAUSSIAN_C  =1\n};\n\n/* FloodFill flags */\nenum\n{\n    CV_FLOODFILL_FIXED_RANGE =(1 << 16),\n    CV_FLOODFILL_MASK_ONLY   =(1 << 17)\n};\n\n\n/* Canny edge detector flags */\nenum\n{\n    CV_CANNY_L2_GRADIENT  =(1 << 31)\n};\n\n/* Variants of a Hough transform */\nenum\n{\n    CV_HOUGH_STANDARD =0,\n    CV_HOUGH_PROBABILISTIC =1,\n    CV_HOUGH_MULTI_SCALE =2,\n    CV_HOUGH_GRADIENT =3\n};\n\n\n/* Fast search data structures  */\nstruct CvFeatureTree;\nstruct CvLSH;\nstruct CvLSHOperations;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/legacy/blobtrack.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n\n#ifndef __OPENCV_VIDEOSURVEILLANCE_H__\n#define __OPENCV_VIDEOSURVEILLANCE_H__\n\n/* Turn off the functionality until cvaux/src/Makefile.am gets updated: */\n//#if _MSC_VER >= 1200\n\n#include \"opencv2/core/core_c.h\"\n#include <stdio.h>\n\n#if (defined _MSC_VER && _MSC_VER >= 1200) || defined __BORLANDC__\n#define cv_stricmp stricmp\n#define cv_strnicmp strnicmp\n#if defined WINCE\n#define strdup _strdup\n#define stricmp _stricmp\n#endif\n#elif defined __GNUC__ || defined __sun\n#define cv_stricmp strcasecmp\n#define cv_strnicmp strncasecmp\n#else\n#error Do not know how to make case-insensitive string comparison on this platform\n#endif\n\n//struct DefParam;\nstruct CvDefParam\n{\n    struct CvDefParam*    next;\n    char*               pName;\n    char*               pComment;\n    double*             pDouble;\n    double              Double;\n    float*              pFloat;\n    float               Float;\n    int*                pInt;\n    int                 Int;\n    char**              pStr;\n    char*               Str;\n};\n\nclass CV_EXPORTS CvVSModule\n{\nprivate: /* Internal data: */\n    CvDefParam*   m_pParamList;\n    char*       m_pModuleTypeName;\n    char*       m_pModuleName;\n    char*       m_pNickName;\nprotected:\n    int         m_Wnd;\npublic: /* Constructor and destructor: */\n    CvVSModule();\n    virtual ~CvVSModule();\nprivate: /* Internal functions: */\n    void    FreeParam(CvDefParam** pp);\n    CvDefParam* NewParam(const char* name);\n    CvDefParam* GetParamPtr(int index);\n    CvDefParam* GetParamPtr(const char* name);\nprotected: /* INTERNAL INTERFACE */\n    int  IsParam(const char* name);\n    void AddParam(const char* name, double* pAddr);\n    void AddParam(const char* name, float* pAddr);\n    void AddParam(const char* name, int* pAddr);\n    void AddParam(const char* name, const char** pAddr);\n    void AddParam(const char* name);\n    void CommentParam(const char* name, const char* pComment);\n    void SetTypeName(const char* name);\n    void SetModuleName(const char* name);\n    void DelParam(const char* name);\n\npublic: /* EXTERNAL INTERFACE */\n    const char* GetParamName(int index);\n    const char* GetParamComment(const char* name);\n    double GetParam(const char* name);\n    const char* GetParamStr(const char* name);\n    void   SetParam(const char* name, double val);\n    void   SetParamStr(const char* name, const char* str);\n    void TransferParamsFromChild(CvVSModule* pM, const char* prefix = NULL);\n    void TransferParamsToChild(CvVSModule* pM, char* prefix = NULL);\n    virtual void ParamUpdate();\n    const char*   GetTypeName();\n    int     IsModuleTypeName(const char* name);\n    char*   GetModuleName();\n    int     IsModuleName(const char* name);\n    void SetNickName(const char* pStr);\n    const char* GetNickName();\n    virtual void SaveState(CvFileStorage*);\n    virtual void LoadState(CvFileStorage*, CvFileNode*);\n\n    virtual void Release() = 0;\n};/* CvVMModule */\n\nCV_EXPORTS void cvWriteStruct(CvFileStorage* fs, const char* name, void* addr, const char* desc, int num=1);\nCV_EXPORTS void cvReadStructByName(CvFileStorage* fs, CvFileNode* node, const char* name, void* addr, const char* desc);\n\n/* FOREGROUND DETECTOR INTERFACE */\nclass CV_EXPORTS CvFGDetector : public CvVSModule\n{\npublic:\n    CvFGDetector();\n    virtual IplImage* GetMask() = 0;\n    /* Process current image: */\n    virtual void    Process(IplImage* pImg) = 0;\n    /* Release foreground detector: */\n    virtual void    Release() = 0;\n};\n\nCV_EXPORTS void cvReleaseFGDetector(CvFGDetector** ppT );\nCV_EXPORTS CvFGDetector* cvCreateFGDetectorBase(int type, void *param);\n\n\n/* BLOB STRUCTURE*/\nstruct CvBlob\n{\n    float   x,y; /* blob position   */\n    float   w,h; /* blob sizes      */\n    int     ID;  /* blob ID         */\n};\n\ninline CvBlob cvBlob(float x,float y, float w, float h)\n{\n    CvBlob B = {x,y,w,h,0};\n    return B;\n}\n#define CV_BLOB_MINW 5\n#define CV_BLOB_MINH 5\n#define CV_BLOB_ID(pB) (((CvBlob*)(pB))->ID)\n#define CV_BLOB_CENTER(pB) cvPoint2D32f(((CvBlob*)(pB))->x,((CvBlob*)(pB))->y)\n#define CV_BLOB_X(pB) (((CvBlob*)(pB))->x)\n#define CV_BLOB_Y(pB) (((CvBlob*)(pB))->y)\n#define CV_BLOB_WX(pB) (((CvBlob*)(pB))->w)\n#define CV_BLOB_WY(pB) (((CvBlob*)(pB))->h)\n#define CV_BLOB_RX(pB) (0.5f*CV_BLOB_WX(pB))\n#define CV_BLOB_RY(pB) (0.5f*CV_BLOB_WY(pB))\n#define CV_BLOB_RECT(pB) cvRect(cvRound(((CvBlob*)(pB))->x-CV_BLOB_RX(pB)),cvRound(((CvBlob*)(pB))->y-CV_BLOB_RY(pB)),cvRound(CV_BLOB_WX(pB)),cvRound(CV_BLOB_WY(pB)))\n/* END BLOB STRUCTURE*/\n\n\n/* simple BLOBLIST */\nclass CV_EXPORTS CvBlobSeq\n{\npublic:\n    CvBlobSeq(int BlobSize = sizeof(CvBlob))\n    {\n        m_pMem = cvCreateMemStorage();\n        m_pSeq = cvCreateSeq(0,sizeof(CvSeq),BlobSize,m_pMem);\n        strcpy(m_pElemFormat,\"ffffi\");\n    }\n    virtual ~CvBlobSeq()\n    {\n        cvReleaseMemStorage(&m_pMem);\n    };\n    virtual CvBlob* GetBlob(int BlobIndex)\n    {\n        return (CvBlob*)cvGetSeqElem(m_pSeq,BlobIndex);\n    };\n    virtual CvBlob* GetBlobByID(int BlobID)\n    {\n        int i;\n        for(i=0; i<m_pSeq->total; ++i)\n            if(BlobID == CV_BLOB_ID(GetBlob(i)))\n                return GetBlob(i);\n        return NULL;\n    };\n    virtual void DelBlob(int BlobIndex)\n    {\n        cvSeqRemove(m_pSeq,BlobIndex);\n    };\n    virtual void DelBlobByID(int BlobID)\n    {\n        int i;\n        for(i=0; i<m_pSeq->total; ++i)\n        {\n            if(BlobID == CV_BLOB_ID(GetBlob(i)))\n            {\n                DelBlob(i);\n                return;\n            }\n        }\n    };\n    virtual void Clear()\n    {\n        cvClearSeq(m_pSeq);\n    };\n    virtual void AddBlob(CvBlob* pB)\n    {\n        cvSeqPush(m_pSeq,pB);\n    };\n    virtual int GetBlobNum()\n    {\n        return m_pSeq->total;\n    };\n    virtual void Write(CvFileStorage* fs, const char* name)\n    {\n        const char*  attr[] = {\"dt\",m_pElemFormat,NULL};\n        if(fs)\n        {\n            cvWrite(fs,name,m_pSeq,cvAttrList(attr,NULL));\n        }\n    }\n    virtual void Load(CvFileStorage* fs, CvFileNode* node)\n    {\n        if(fs==NULL) return;\n        CvSeq* pSeq = (CvSeq*)cvRead(fs, node);\n        if(pSeq)\n        {\n            int i;\n            cvClearSeq(m_pSeq);\n            for(i=0;i<pSeq->total;++i)\n            {\n                void* pB = cvGetSeqElem( pSeq, i );\n                cvSeqPush( m_pSeq, pB );\n            }\n        }\n    }\n    void AddFormat(const char* str){strcat(m_pElemFormat,str);}\nprotected:\n    CvMemStorage*   m_pMem;\n    CvSeq*          m_pSeq;\n    char            m_pElemFormat[1024];\n};\n/* simple BLOBLIST */\n\n\n/* simple TRACKLIST */\nstruct CvBlobTrack\n{\n    int         TrackID;\n    int         StartFrame;\n    CvBlobSeq*  pBlobSeq;\n};\n\nclass CV_EXPORTS CvBlobTrackSeq\n{\npublic:\n    CvBlobTrackSeq(int TrackSize = sizeof(CvBlobTrack));\n    virtual ~CvBlobTrackSeq();\n    virtual CvBlobTrack* GetBlobTrack(int TrackIndex);\n    virtual CvBlobTrack* GetBlobTrackByID(int TrackID);\n    virtual void DelBlobTrack(int TrackIndex);\n    virtual void DelBlobTrackByID(int TrackID);\n    virtual void Clear();\n    virtual void AddBlobTrack(int TrackID, int StartFrame = 0);\n    virtual int GetBlobTrackNum();\nprotected:\n    CvMemStorage*   m_pMem;\n    CvSeq*          m_pSeq;\n};\n\n/* simple TRACKLIST */\n\n\n/* BLOB DETECTOR INTERFACE */\nclass CV_EXPORTS CvBlobDetector: public CvVSModule\n{\npublic:\n    CvBlobDetector(){SetTypeName(\"BlobDetector\");};\n    /* Try to detect new blob entrance based on foreground mask. */\n    /* pFGMask - image of foreground mask */\n    /* pNewBlob - pointer to CvBlob structure which will be filled if new blob entrance detected */\n    /* pOldBlobList - pointer to blob list which already exist on image */\n    virtual int DetectNewBlob(IplImage* pImg, IplImage* pImgFG, CvBlobSeq* pNewBlobList, CvBlobSeq* pOldBlobList) = 0;\n    /* release blob detector */\n    virtual void Release()=0;\n};\n\n/* Release any blob detector: */\nCV_EXPORTS void cvReleaseBlobDetector(CvBlobDetector** ppBD);\n\n/* Declarations of constructors of implemented modules: */\nCV_EXPORTS CvBlobDetector* cvCreateBlobDetectorSimple();\nCV_EXPORTS CvBlobDetector* cvCreateBlobDetectorCC();\n\nstruct CV_EXPORTS CvDetectedBlob : public CvBlob\n{\n    float response;\n};\n\nCV_INLINE CvDetectedBlob cvDetectedBlob( float x, float y, float w, float h, int ID = 0, float response = 0.0F )\n{\n    CvDetectedBlob b;\n    b.x = x; b.y = y; b.w = w; b.h = h; b.ID = ID; b.response = response;\n    return b;\n}\n\n\nclass CV_EXPORTS CvObjectDetector\n{\npublic:\n    CvObjectDetector( const char* /*detector_file_name*/ = 0 );\n    ~CvObjectDetector();\n\n    /*\n     * Release the current detector and load new detector from file\n     * (if detector_file_name is not 0)\n     * Return true on success:\n     */\n    bool Load( const char* /*detector_file_name*/ = 0 );\n\n    /* Return min detector window size: */\n    CvSize GetMinWindowSize() const;\n\n    /* Return max border: */\n    int GetMaxBorderSize() const;\n\n    /*\n     * Detect the object on the image and push the detected\n     * blobs into <detected_blob_seq> which must be the sequence of <CvDetectedBlob>s\n     */\n    void Detect( const CvArr* /*img*/, /* out */ CvBlobSeq* /*detected_blob_seq*/ = 0 );\n\nprotected:\n    class CvObjectDetectorImpl* impl;\n};\n\n\nCV_INLINE CvRect cvRectIntersection( const CvRect r1, const CvRect r2 )\n{\n    CvRect r = cvRect( MAX(r1.x, r2.x), MAX(r1.y, r2.y), 0, 0 );\n\n    r.width  = MIN(r1.x + r1.width, r2.x + r2.width) - r.x;\n    r.height = MIN(r1.y + r1.height, r2.y + r2.height) - r.y;\n\n    return r;\n}\n\n\n/*\n * CvImageDrawer\n *\n * Draw on an image the specified ROIs from the source image and\n * given blobs as ellipses or rectangles:\n */\n\nstruct CvDrawShape\n{\n    enum {RECT, ELLIPSE} shape;\n    CvScalar color;\n};\n\n/*extern const CvDrawShape icv_shape[] =\n{\n    { CvDrawShape::ELLIPSE, CV_RGB(255,0,0) },\n    { CvDrawShape::ELLIPSE, CV_RGB(0,255,0) },\n    { CvDrawShape::ELLIPSE, CV_RGB(0,0,255) },\n    { CvDrawShape::ELLIPSE, CV_RGB(255,255,0) },\n    { CvDrawShape::ELLIPSE, CV_RGB(0,255,255) },\n    { CvDrawShape::ELLIPSE, CV_RGB(255,0,255) }\n};*/\n\nclass CV_EXPORTS CvImageDrawer\n{\npublic:\n    CvImageDrawer() : m_image(0) {}\n    ~CvImageDrawer() { cvReleaseImage( &m_image ); }\n    void SetShapes( const CvDrawShape* shapes, int num );\n    /* <blob_seq> must be the sequence of <CvDetectedBlob>s */\n    IplImage* Draw( const CvArr* src, CvBlobSeq* blob_seq = 0, const CvSeq* roi_seq = 0 );\n    IplImage* GetImage() { return m_image; }\nprotected:\n    //static const int MAX_SHAPES = sizeof(icv_shape) / sizeof(icv_shape[0]);;\n\n    IplImage* m_image;\n    CvDrawShape m_shape[16];\n};\n\n\n\n/* Trajectory generation module: */\nclass CV_EXPORTS CvBlobTrackGen: public CvVSModule\n{\npublic:\n    CvBlobTrackGen(){SetTypeName(\"BlobTrackGen\");};\n    virtual void    SetFileName(char* pFileName) = 0;\n    virtual void    AddBlob(CvBlob* pBlob) = 0;\n    virtual void    Process(IplImage* pImg = NULL, IplImage* pFG = NULL) = 0;\n    virtual void    Release() = 0;\n};\n\ninline void cvReleaseBlobTrackGen(CvBlobTrackGen** pBTGen)\n{\n    if(*pBTGen)(*pBTGen)->Release();\n    *pBTGen = 0;\n}\n\n/* Declarations of constructors of implemented modules: */\nCV_EXPORTS CvBlobTrackGen* cvCreateModuleBlobTrackGen1();\nCV_EXPORTS CvBlobTrackGen* cvCreateModuleBlobTrackGenYML();\n\n\n\n/* BLOB TRACKER INTERFACE */\nclass CV_EXPORTS CvBlobTracker: public CvVSModule\n{\npublic:\n    CvBlobTracker();\n\n    /* Add new blob to track it and assign to this blob personal ID */\n    /* pBlob - pointer to structure with blob parameters (ID is ignored)*/\n    /* pImg - current image */\n    /* pImgFG - current foreground mask */\n    /* Return pointer to new added blob: */\n    virtual CvBlob* AddBlob(CvBlob* pBlob, IplImage* pImg, IplImage* pImgFG = NULL ) = 0;\n\n    /* Return number of currently tracked blobs: */\n    virtual int     GetBlobNum() = 0;\n\n    /* Return pointer to specified by index blob: */\n    virtual CvBlob* GetBlob(int BlobIndex) = 0;\n\n    /* Delete blob by its index: */\n    virtual void    DelBlob(int BlobIndex) = 0;\n\n    /* Process current image and track all existed blobs: */\n    virtual void    Process(IplImage* pImg, IplImage* pImgFG = NULL) = 0;\n\n    /* Release blob tracker: */\n    virtual void    Release() = 0;\n\n\n    /* Process one blob (for multi hypothesis tracing): */\n    virtual void ProcessBlob(int BlobIndex, CvBlob* pBlob, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL);\n\n    /* Get confidence/wieght/probability (0-1) for blob: */\n    virtual double  GetConfidence(int /*BlobIndex*/, CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL);\n\n    virtual double GetConfidenceList(CvBlobSeq* pBlobList, IplImage* pImg, IplImage* pImgFG = NULL);\n\n    virtual void UpdateBlob(int /*BlobIndex*/, CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL);\n\n    /* Update all blob models: */\n    virtual void Update(IplImage* pImg, IplImage* pImgFG = NULL);\n\n    /* Return pointer to blob by its unique ID: */\n    virtual int     GetBlobIndexByID(int BlobID);\n\n    /* Return pointer to blob by its unique ID: */\n    virtual CvBlob* GetBlobByID(int BlobID);\n\n    /* Delete blob by its ID: */\n    virtual void    DelBlobByID(int BlobID);\n\n    /* Set new parameters for specified (by index) blob: */\n    virtual void    SetBlob(int /*BlobIndex*/, CvBlob* /*pBlob*/);\n\n    /* Set new parameters for specified (by ID) blob: */\n    virtual void    SetBlobByID(int BlobID, CvBlob* pBlob);\n\n    /*  ===============  MULTI HYPOTHESIS INTERFACE ==================  */\n\n    /* Return number of position hyposetis of currently tracked blob: */\n    virtual int     GetBlobHypNum(int /*BlobIdx*/);\n\n    /* Return pointer to specified blob hypothesis by index blob: */\n    virtual CvBlob* GetBlobHyp(int BlobIndex, int /*hypothesis*/);\n\n    /* Set new parameters for specified (by index) blob hyp\n     * (can be called several times for each hyp ):\n     */\n    virtual void    SetBlobHyp(int /*BlobIndex*/, CvBlob* /*pBlob*/);\n};\n\nCV_EXPORTS void cvReleaseBlobTracker(CvBlobTracker**ppT );\n/* BLOB TRACKER INTERFACE */\n\n/*BLOB TRACKER ONE INTERFACE */\nclass CV_EXPORTS CvBlobTrackerOne : public CvVSModule\n{\npublic:\n    virtual void Init(CvBlob* pBlobInit, IplImage* pImg, IplImage* pImgFG = NULL) = 0;\n    virtual CvBlob* Process(CvBlob* pBlobPrev, IplImage* pImg, IplImage* pImgFG = NULL) = 0;\n    virtual void Release() =  0;\n\n    /* Non-required methods: */\n    virtual void SkipProcess(CvBlob* /*pBlobPrev*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){};\n    virtual void Update(CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){};\n    virtual void SetCollision(int /*CollisionFlag*/){}; /* call in case of blob collision situation*/\n    virtual double GetConfidence(CvBlob* /*pBlob*/, IplImage* /*pImg*/,\n                                 IplImage* /*pImgFG*/ = NULL, IplImage* /*pImgUnusedReg*/ = NULL)\n    {\n        return 1;\n    };\n};\ninline void cvReleaseBlobTrackerOne(CvBlobTrackerOne **ppT )\n{\n    ppT[0]->Release();\n    ppT[0] = 0;\n}\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerList(CvBlobTrackerOne* (*create)());\n/*BLOB TRACKER ONE INTERFACE */\n\n/* Declarations of constructors of implemented modules: */\n\n/* Some declarations for specific MeanShift tracker: */\n#define PROFILE_EPANECHNIKOV    0\n#define PROFILE_DOG             1\nstruct CvBlobTrackerParamMS\n{\n    int     noOfSigBits;\n    int     appearance_profile;\n    int     meanshift_profile;\n    float   sigma;\n};\n\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS1(CvBlobTrackerParamMS* param);\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS2(CvBlobTrackerParamMS* param);\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS1ByList();\n\n/* Some declarations for specific Likelihood tracker: */\nstruct CvBlobTrackerParamLH\n{\n    int     HistType; /* see Prob.h */\n    int     ScaleAfter;\n};\n\n/* Without scale optimization: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerLHR(CvBlobTrackerParamLH* /*param*/ = NULL);\n\n/* With scale optimization: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerLHRS(CvBlobTrackerParamLH* /*param*/ = NULL);\n\n/* Simple blob tracker based on connected component tracking: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerCC();\n\n/* Connected component tracking and mean-shift particle filter collion-resolver: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerCCMSPF();\n\n/* Blob tracker that integrates meanshift and connected components: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSFG();\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSFGS();\n\n/* Meanshift without connected-components */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS();\n\n/* Particle filtering via Bhattacharya coefficient, which        */\n/* is roughly the dot-product of two probability densities.      */\n/* See: Real-Time Tracking of Non-Rigid Objects using Mean Shift */\n/*      Comanicius, Ramesh, Meer, 2000, 8p                       */\n/*      http://citeseer.ist.psu.edu/321441.html                  */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSPF();\n\n/* =========== tracker integrators trackers =============*/\n\n/* Integrator based on Particle Filtering method: */\n//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIPF();\n\n/* Rule based integrator: */\n//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIRB();\n\n/* Integrator based on data fusion using particle filtering: */\n//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIPFDF();\n\n\n\n\n/* Trajectory postprocessing module: */\nclass CV_EXPORTS CvBlobTrackPostProc: public CvVSModule\n{\npublic:\n    CvBlobTrackPostProc(){SetTypeName(\"BlobTrackPostProc\");};\n    virtual void    AddBlob(CvBlob* pBlob) = 0;\n    virtual void    Process() = 0;\n    virtual int     GetBlobNum() = 0;\n    virtual CvBlob* GetBlob(int index) = 0;\n    virtual void    Release() = 0;\n\n    /* Additional functionality: */\n    virtual CvBlob* GetBlobByID(int BlobID)\n    {\n        int i;\n        for(i=GetBlobNum();i>0;i--)\n        {\n            CvBlob* pB=GetBlob(i-1);\n            if(pB->ID==BlobID) return pB;\n        }\n        return NULL;\n    };\n};\n\ninline void cvReleaseBlobTrackPostProc(CvBlobTrackPostProc** pBTPP)\n{\n    if(pBTPP == NULL) return;\n    if(*pBTPP)(*pBTPP)->Release();\n    *pBTPP = 0;\n}\n\n/* Trajectory generation module: */\nclass CV_EXPORTS CvBlobTrackPostProcOne: public CvVSModule\n{\npublic:\n    CvBlobTrackPostProcOne(){SetTypeName(\"BlobTrackPostOne\");};\n    virtual CvBlob* Process(CvBlob* pBlob) = 0;\n    virtual void    Release() = 0;\n};\n\n/* Create blob tracking post processing module based on simle module: */\nCV_EXPORTS CvBlobTrackPostProc* cvCreateBlobTrackPostProcList(CvBlobTrackPostProcOne* (*create)());\n\n\n/* Declarations of constructors of implemented modules: */\nCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcKalman();\nCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverRect();\nCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverExp();\n\n\n/* PREDICTORS */\n/* blob PREDICTOR */\nclass CvBlobTrackPredictor: public CvVSModule\n{\npublic:\n    CvBlobTrackPredictor(){SetTypeName(\"BlobTrackPredictor\");};\n    virtual CvBlob* Predict() = 0;\n    virtual void    Update(CvBlob* pBlob) = 0;\n    virtual void    Release() = 0;\n};\nCV_EXPORTS CvBlobTrackPredictor* cvCreateModuleBlobTrackPredictKalman();\n\n\n\n/* Trajectory analyser module: */\nclass CV_EXPORTS CvBlobTrackAnalysis: public CvVSModule\n{\npublic:\n    CvBlobTrackAnalysis(){SetTypeName(\"BlobTrackAnalysis\");};\n    virtual void    AddBlob(CvBlob* pBlob) = 0;\n    virtual void    Process(IplImage* pImg, IplImage* pFG) = 0;\n    virtual float   GetState(int BlobID) = 0;\n    /* return 0 if trajectory is normal\n       return >0 if trajectory abnormal */\n    virtual const char*   GetStateDesc(int /*BlobID*/){return NULL;};\n    virtual void    SetFileName(char* /*DataBaseName*/){};\n    virtual void    Release() = 0;\n};\n\n\ninline void cvReleaseBlobTrackAnalysis(CvBlobTrackAnalysis** pBTPP)\n{\n    if(pBTPP == NULL) return;\n    if(*pBTPP)(*pBTPP)->Release();\n    *pBTPP = 0;\n}\n\n/* Feature-vector generation module: */\nclass CV_EXPORTS CvBlobTrackFVGen : public CvVSModule\n{\npublic:\n    CvBlobTrackFVGen(){SetTypeName(\"BlobTrackFVGen\");};\n    virtual void    AddBlob(CvBlob* pBlob) = 0;\n    virtual void    Process(IplImage* pImg, IplImage* pFG) = 0;\n    virtual void    Release() = 0;\n    virtual int     GetFVSize() = 0;\n    virtual int     GetFVNum() = 0;\n    virtual float*  GetFV(int index, int* pFVID) = 0; /* Returns pointer to FV, if return 0 then FV not created */\n    virtual float*  GetFVVar(){return NULL;}; /* Returns pointer to array of variation of values of FV, if returns 0 then FVVar does not exist. */\n    virtual float*  GetFVMin() = 0; /* Returns pointer to array of minimal values of FV, if returns 0 then FVrange does not exist */\n    virtual float*  GetFVMax() = 0; /* Returns pointer to array of maximal values of FV, if returns 0 then FVrange does not exist */\n};\n\n\n/* Trajectory Analyser module: */\nclass CV_EXPORTS CvBlobTrackAnalysisOne\n{\npublic:\n    virtual ~CvBlobTrackAnalysisOne() {};\n    virtual int     Process(CvBlob* pBlob, IplImage* pImg, IplImage* pFG) = 0;\n    /* return 0 if trajectory is normal\n       return >0 if trajectory abnormal */\n    virtual void    Release() = 0;\n};\n\n/* Create blob tracking post processing module based on simle module: */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateBlobTrackAnalysisList(CvBlobTrackAnalysisOne* (*create)());\n\n/* Declarations of constructors of implemented modules: */\n\n/* Based on histogram analysis of 2D FV (x,y): */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistP();\n\n/* Based on histogram analysis of 4D FV (x,y,vx,vy): */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPV();\n\n/* Based on histogram analysis of 5D FV (x,y,vx,vy,state): */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPVS();\n\n/* Based on histogram analysis of 4D FV (startpos,stoppos): */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistSS();\n\n\n\n/* Based on SVM classifier analysis of 2D FV (x,y): */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMP();\n\n/* Based on SVM classifier analysis of 4D FV (x,y,vx,vy): */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMPV();\n\n/* Based on SVM classifier analysis of 5D FV (x,y,vx,vy,state): */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMPVS();\n\n/* Based on SVM classifier analysis of 4D FV (startpos,stoppos): */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMSS();\n\n/* Track analysis based on distance between tracks: */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisTrackDist();\n\n/* Analyzer based on reation Road and height map: */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysis3DRoadMap();\n\n/* Analyzer that makes OR decision using set of analyzers: */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisIOR();\n\n/* Estimator of human height: */\nclass CV_EXPORTS CvBlobTrackAnalysisHeight: public CvBlobTrackAnalysis\n{\npublic:\n    virtual double  GetHeight(CvBlob* pB) = 0;\n};\n//CV_EXPORTS CvBlobTrackAnalysisHeight* cvCreateModuleBlobTrackAnalysisHeightScale();\n\n\n\n/* AUTO BLOB TRACKER INTERFACE -- pipeline of 3 modules: */\nclass CV_EXPORTS CvBlobTrackerAuto: public CvVSModule\n{\npublic:\n    CvBlobTrackerAuto(){SetTypeName(\"BlobTrackerAuto\");};\n    virtual void        Process(IplImage* pImg, IplImage* pMask = NULL) = 0;\n    virtual CvBlob*     GetBlob(int index) = 0;\n    virtual CvBlob*     GetBlobByID(int ID) = 0;\n    virtual int         GetBlobNum() = 0;\n    virtual IplImage*   GetFGMask(){return NULL;};\n    virtual float       GetState(int BlobID) = 0;\n    virtual const char*       GetStateDesc(int BlobID) = 0;\n    /* return 0 if trajectory is normal;\n     * return >0 if trajectory abnormal. */\n    virtual void    Release() = 0;\n};\ninline void cvReleaseBlobTrackerAuto(CvBlobTrackerAuto** ppT)\n{\n    ppT[0]->Release();\n    ppT[0] = 0;\n}\n/* END AUTO BLOB TRACKER INTERFACE */\n\n\n/* Constructor functions and data for specific BlobTRackerAuto modules: */\n\n/* Parameters of blobtracker auto ver1: */\nstruct CvBlobTrackerAutoParam1\n{\n    int                     FGTrainFrames; /* Number of frames needed for FG (foreground) detector to train.        */\n\n    CvFGDetector*           pFG;           /* FGDetector module. If this field is NULL the Process FG mask is used. */\n\n    CvBlobDetector*         pBD;           /* Selected blob detector module. \t\t\t\t\t    */\n                                           /* If this field is NULL default blobdetector module will be created.    */\n\n    CvBlobTracker*          pBT;           /* Selected blob tracking module.\t\t\t\t\t    */\n                                           /* If this field is NULL default blobtracker module will be created.     */\n\n    CvBlobTrackGen*         pBTGen;        /* Selected blob trajectory generator.\t\t\t\t    */\n                                           /* If this field is NULL no generator is used.                           */\n\n    CvBlobTrackPostProc*    pBTPP;         /* Selected blob trajectory postprocessing module.\t\t\t    */\n                                           /* If this field is NULL no postprocessing is done.                      */\n\n    int                     UsePPData;\n\n    CvBlobTrackAnalysis*    pBTA;          /* Selected blob trajectory analysis module.                             */\n                                           /* If this field is NULL no track analysis is done.                      */\n};\n\n/* Create blob tracker auto ver1: */\nCV_EXPORTS CvBlobTrackerAuto* cvCreateBlobTrackerAuto1(CvBlobTrackerAutoParam1* param = NULL);\n\n/* Simple loader for many auto trackers by its type : */\ninline CvBlobTrackerAuto* cvCreateBlobTrackerAuto(int type, void* param)\n{\n    if(type == 0) return cvCreateBlobTrackerAuto1((CvBlobTrackerAutoParam1*)param);\n    return 0;\n}\n\n\n\nstruct CvTracksTimePos\n{\n    int len1,len2;\n    int beg1,beg2;\n    int end1,end2;\n    int comLen; //common length for two tracks\n    int shift1,shift2;\n};\n\n/*CV_EXPORTS int cvCompareTracks( CvBlobTrackSeq *groundTruth,\n                   CvBlobTrackSeq *result,\n                   FILE *file);*/\n\n\n/* Constructor functions:  */\n\nCV_EXPORTS void cvCreateTracks_One(CvBlobTrackSeq *TS);\nCV_EXPORTS void cvCreateTracks_Same(CvBlobTrackSeq *TS1, CvBlobTrackSeq *TS2);\nCV_EXPORTS void cvCreateTracks_AreaErr(CvBlobTrackSeq *TS1, CvBlobTrackSeq *TS2, int addW, int addH);\n\n\n/* HIST API */\nclass CV_EXPORTS CvProb\n{\npublic:\n    virtual ~CvProb() {};\n\n    /* Calculate probability value: */\n    virtual double Value(int* /*comp*/, int /*x*/ = 0, int /*y*/ = 0){return -1;};\n\n    /* Update histograpp Pnew = (1-W)*Pold + W*Padd*/\n    /* W weight of new added prob */\n    /* comps - matrix of new fetature vectors used to update prob */\n    virtual void AddFeature(float W, int* comps, int x =0, int y = 0) = 0;\n    virtual void Scale(float factor = 0, int x = -1, int y = -1) = 0;\n    virtual void Release() = 0;\n};\ninline void cvReleaseProb(CvProb** ppProb){ppProb[0]->Release();ppProb[0]=NULL;}\n/* HIST API */\n\n/* Some Prob: */\nCV_EXPORTS CvProb* cvCreateProbS(int dim, CvSize size, int sample_num);\nCV_EXPORTS CvProb* cvCreateProbMG(int dim, CvSize size, int sample_num);\nCV_EXPORTS CvProb* cvCreateProbMG2(int dim, CvSize size, int sample_num);\nCV_EXPORTS CvProb* cvCreateProbHist(int dim, CvSize size);\n\n#define CV_BT_HIST_TYPE_S     0\n#define CV_BT_HIST_TYPE_MG    1\n#define CV_BT_HIST_TYPE_MG2   2\n#define CV_BT_HIST_TYPE_H     3\ninline CvProb* cvCreateProb(int type, int dim, CvSize size = cvSize(1,1), void* /*param*/ = NULL)\n{\n    if(type == CV_BT_HIST_TYPE_S) return cvCreateProbS(dim, size, -1);\n    if(type == CV_BT_HIST_TYPE_MG) return cvCreateProbMG(dim, size, -1);\n    if(type == CV_BT_HIST_TYPE_MG2) return cvCreateProbMG2(dim, size, -1);\n    if(type == CV_BT_HIST_TYPE_H) return cvCreateProbHist(dim, size);\n    return NULL;\n}\n\n\n\n/* Noise type definitions: */\n#define CV_NOISE_NONE               0\n#define CV_NOISE_GAUSSIAN           1\n#define CV_NOISE_UNIFORM            2\n#define CV_NOISE_SPECKLE            3\n#define CV_NOISE_SALT_AND_PEPPER    4\n\n/* Add some noise to image: */\n/* pImg - (input) image without noise */\n/* pImg - (output) image with noise */\n/* noise_type - type of added noise */\n/*  CV_NOISE_GAUSSIAN - pImg += n , n - is gaussian noise with Ampl standart deviation */\n/*  CV_NOISE_UNIFORM - pImg += n , n - is uniform noise with Ampl standart deviation */\n/*  CV_NOISE_SPECKLE - pImg += n*pImg , n - is gaussian noise with Ampl standart deviation */\n/*  CV_NOISE_SALT_AND_PAPPER - pImg = pImg with blacked and whited pixels,\n            Ampl is density of brocken pixels (0-there are not broken pixels, 1 - all pixels are broken)*/\n/* Ampl - \"amplitude\" of noise */\n//CV_EXPORTS void cvAddNoise(IplImage* pImg, int noise_type, double Ampl, CvRNG* rnd_state = NULL);\n\n/*================== GENERATOR OF TEST VIDEO SEQUENCE ===================== */\ntypedef void CvTestSeq;\n\n/* pConfigfile - Name of file (yml or xml) with description of test sequence */\n/* videos - array of names of test videos described in \"pConfigfile\" file */\n/* numvideos - size of \"videos\" array */\nCV_EXPORTS CvTestSeq* cvCreateTestSeq(char* pConfigfile, char** videos, int numvideo, float Scale = 1, int noise_type = CV_NOISE_NONE, double noise_ampl = 0);\nCV_EXPORTS void cvReleaseTestSeq(CvTestSeq** ppTestSeq);\n\n/* Generate next frame from test video seq and return pointer to it: */\nCV_EXPORTS IplImage* cvTestSeqQueryFrame(CvTestSeq* pTestSeq);\n\n/* Return pointer to current foreground mask: */\nCV_EXPORTS IplImage* cvTestSeqGetFGMask(CvTestSeq* pTestSeq);\n\n/* Return pointer to current image: */\nCV_EXPORTS IplImage* cvTestSeqGetImage(CvTestSeq* pTestSeq);\n\n/* Return frame size of result test video: */\nCV_EXPORTS CvSize cvTestSeqGetImageSize(CvTestSeq* pTestSeq);\n\n/* Return number of frames result test video: */\nCV_EXPORTS int cvTestSeqFrameNum(CvTestSeq* pTestSeq);\n\n/* Return number of existing objects.\n * This is general number of any objects.\n * For example number of trajectories may be equal or less than returned value:\n */\nCV_EXPORTS int cvTestSeqGetObjectNum(CvTestSeq* pTestSeq);\n\n/* Return 0 if there is not position for current defined on current frame */\n/* Return 1 if there is object position and pPos was filled */\nCV_EXPORTS int cvTestSeqGetObjectPos(CvTestSeq* pTestSeq, int ObjIndex, CvPoint2D32f* pPos);\nCV_EXPORTS int cvTestSeqGetObjectSize(CvTestSeq* pTestSeq, int ObjIndex, CvPoint2D32f* pSize);\n\n/* Add noise to final image: */\nCV_EXPORTS void cvTestSeqAddNoise(CvTestSeq* pTestSeq, int noise_type = CV_NOISE_NONE, double noise_ampl = 0);\n\n/* Add Intensity variation: */\nCV_EXPORTS void cvTestSeqAddIntensityVariation(CvTestSeq* pTestSeq, float DI_per_frame, float MinI, float MaxI);\nCV_EXPORTS void cvTestSeqSetFrame(CvTestSeq* pTestSeq, int n);\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/legacy/compat.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright( C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort(including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n/*\n   A few macros and definitions for backward compatibility\n   with the previous versions of OpenCV. They are obsolete and\n   are likely to be removed in future. To check whether your code\n   uses any of these, define CV_NO_BACKWARD_COMPATIBILITY before\n   including cv.h.\n*/\n\n#ifndef __OPENCV_COMPAT_HPP__\n#define __OPENCV_COMPAT_HPP__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/imgproc/types_c.h\"\n\n#include <math.h>\n#include <string.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef int CvMatType;\ntypedef int CvDisMaskType;\ntypedef CvMat CvMatArray;\n\ntypedef int CvThreshType;\ntypedef int CvAdaptiveThreshMethod;\ntypedef int CvCompareMethod;\ntypedef int CvFontFace;\ntypedef int CvPolyApproxMethod;\ntypedef int CvContoursMatchMethod;\ntypedef int CvContourTreesMatchMethod;\ntypedef int CvCoeffType;\ntypedef int CvRodriguesType;\ntypedef int CvElementShape;\ntypedef int CvMorphOp;\ntypedef int CvTemplMatchMethod;\n\ntypedef CvPoint2D64f CvPoint2D64d;\ntypedef CvPoint3D64f CvPoint3D64d;\n\nenum\n{\n    CV_MAT32F      = CV_32FC1,\n    CV_MAT3x1_32F  = CV_32FC1,\n    CV_MAT4x1_32F  = CV_32FC1,\n    CV_MAT3x3_32F  = CV_32FC1,\n    CV_MAT4x4_32F  = CV_32FC1,\n\n    CV_MAT64D      = CV_64FC1,\n    CV_MAT3x1_64D  = CV_64FC1,\n    CV_MAT4x1_64D  = CV_64FC1,\n    CV_MAT3x3_64D  = CV_64FC1,\n    CV_MAT4x4_64D  = CV_64FC1\n};\n\nenum\n{\n    IPL_GAUSSIAN_5x5 = 7\n};\n\ntypedef CvBox2D  CvBox2D32f;\n\n/* allocation/deallocation macros */\n#define cvCreateImageData   cvCreateData\n#define cvReleaseImageData  cvReleaseData\n#define cvSetImageData      cvSetData\n#define cvGetImageRawData   cvGetRawData\n\n#define cvmAlloc            cvCreateData\n#define cvmFree             cvReleaseData\n#define cvmAllocArray       cvCreateData\n#define cvmFreeArray        cvReleaseData\n\n#define cvIntegralImage     cvIntegral\n#define cvMatchContours     cvMatchShapes\n\nCV_EXPORTS CvMat cvMatArray( int rows, int cols, int type,\n                            int count, void* data CV_DEFAULT(0));\n\n#define cvUpdateMHIByTime  cvUpdateMotionHistory\n\n#define cvAccMask cvAcc\n#define cvSquareAccMask cvSquareAcc\n#define cvMultiplyAccMask cvMultiplyAcc\n#define cvRunningAvgMask(imgY, imgU, mask, alpha) cvRunningAvg(imgY, imgU, alpha, mask)\n\n#define cvSetHistThresh  cvSetHistBinRanges\n#define cvCalcHistMask(img, mask, hist, doNotClear) cvCalcHist(img, hist, doNotClear, mask)\n\nCV_EXPORTS double cvMean( const CvArr* image, const CvArr* mask CV_DEFAULT(0));\nCV_EXPORTS double cvSumPixels( const CvArr* image );\nCV_EXPORTS void  cvMean_StdDev( const CvArr* image, double* mean, double* sdv,\n                                const CvArr* mask CV_DEFAULT(0));\n\nCV_EXPORTS void cvmPerspectiveProject( const CvMat* mat, const CvArr* src, CvArr* dst );\nCV_EXPORTS void cvFillImage( CvArr* mat, double color );\n\n#define cvCvtPixToPlane cvSplit\n#define cvCvtPlaneToPix cvMerge\n\ntypedef struct CvRandState\n{\n    CvRNG     state;    /* RNG state (the current seed and carry)*/\n    int       disttype; /* distribution type */\n    CvScalar  param[2]; /* parameters of RNG */\n} CvRandState;\n\n/* Changes RNG range while preserving RNG state */\nCV_EXPORTS void  cvRandSetRange( CvRandState* state, double param1,\n                                 double param2, int index CV_DEFAULT(-1));\n\nCV_EXPORTS void  cvRandInit( CvRandState* state, double param1,\n                             double param2, int seed,\n                             int disttype CV_DEFAULT(CV_RAND_UNI));\n\n/* Fills array with random numbers */\nCV_EXPORTS void cvRand( CvRandState* state, CvArr* arr );\n\n#define cvRandNext( _state ) cvRandInt( &(_state)->state )\n\nCV_EXPORTS void cvbRand( CvRandState* state, float* dst, int len );\n\nCV_EXPORTS void  cvbCartToPolar( const float* y, const float* x,\n                                 float* magnitude, float* angle, int len );\nCV_EXPORTS void  cvbFastArctan( const float* y, const float* x, float* angle, int len );\nCV_EXPORTS void  cvbSqrt( const float* x, float* y, int len );\nCV_EXPORTS void  cvbInvSqrt( const float* x, float* y, int len );\nCV_EXPORTS void  cvbReciprocal( const float* x, float* y, int len );\nCV_EXPORTS void  cvbFastExp( const float* x, double* y, int len );\nCV_EXPORTS void  cvbFastLog( const double* x, float* y, int len );\n\nCV_EXPORTS CvRect  cvContourBoundingRect( void* point_set, int update CV_DEFAULT(0));\n\nCV_EXPORTS double cvPseudoInverse( const CvArr* src, CvArr* dst );\n#define cvPseudoInv cvPseudoInverse\n\n#define cvContourMoments( contour, moments ) cvMoments( contour, moments, 0 )\n\n#define cvGetPtrAt              cvPtr2D\n#define cvGetAt                 cvGet2D\n#define cvSetAt(arr,val,y,x)    cvSet2D((arr),(y),(x),(val))\n\n#define cvMeanMask  cvMean\n#define cvMean_StdDevMask(img,mask,mean,sdv) cvMean_StdDev(img,mean,sdv,mask)\n\n#define cvNormMask(imgA,imgB,mask,normType) cvNorm(imgA,imgB,normType,mask)\n\n#define cvMinMaxLocMask(img, mask, min_val, max_val, min_loc, max_loc) \\\n        cvMinMaxLoc(img, min_val, max_val, min_loc, max_loc, mask)\n\n#define cvRemoveMemoryManager  cvSetMemoryManager\n\n#define cvmSetZero( mat )               cvSetZero( mat )\n#define cvmSetIdentity( mat )           cvSetIdentity( mat )\n#define cvmAdd( src1, src2, dst )       cvAdd( src1, src2, dst, 0 )\n#define cvmSub( src1, src2, dst )       cvSub( src1, src2, dst, 0 )\n#define cvmCopy( src, dst )             cvCopy( src, dst, 0 )\n#define cvmMul( src1, src2, dst )       cvMatMulAdd( src1, src2, 0, dst )\n#define cvmTranspose( src, dst )        cvT( src, dst )\n#define cvmInvert( src, dst )           cvInv( src, dst )\n#define cvmMahalanobis(vec1, vec2, mat) cvMahalanobis( vec1, vec2, mat )\n#define cvmDotProduct( vec1, vec2 )     cvDotProduct( vec1, vec2 )\n#define cvmCrossProduct(vec1, vec2,dst) cvCrossProduct( vec1, vec2, dst )\n#define cvmTrace( mat )                 (cvTrace( mat )).val[0]\n#define cvmMulTransposed( src, dst, order ) cvMulTransposed( src, dst, order )\n#define cvmEigenVV( mat, evec, eval, eps)   cvEigenVV( mat, evec, eval, eps )\n#define cvmDet( mat )                   cvDet( mat )\n#define cvmScale( src, dst, scale )     cvScale( src, dst, scale )\n\n#define cvCopyImage( src, dst )         cvCopy( src, dst, 0 )\n#define cvReleaseMatHeader              cvReleaseMat\n\n/* Calculates exact convex hull of 2d point set */\nCV_EXPORTS void cvConvexHull( CvPoint* points, int num_points,\n                             CvRect* bound_rect,\n                             int orientation, int* hull, int* hullsize );\n\n\nCV_EXPORTS void cvMinAreaRect( CvPoint* points, int n,\n                              int left, int bottom,\n                              int right, int top,\n                              CvPoint2D32f* anchor,\n                              CvPoint2D32f* vect1,\n                              CvPoint2D32f* vect2 );\n\ntypedef int CvDisType;\ntypedef int CvChainApproxMethod;\ntypedef int CvContourRetrievalMode;\n\nCV_EXPORTS  void  cvFitLine3D( CvPoint3D32f* points, int count, int dist,\n                    void *param, float reps, float aeps, float* line );\n\n/* Fits a line into set of 2d points in a robust way (M-estimator technique) */\nCV_EXPORTS  void  cvFitLine2D( CvPoint2D32f* points, int count, int dist,\n                    void *param, float reps, float aeps, float* line );\n\nCV_EXPORTS  void  cvFitEllipse( const CvPoint2D32f* points, int count, CvBox2D* box );\n\n/* Projects 2d points to one of standard coordinate planes\n   (i.e. removes one of coordinates) */\nCV_EXPORTS  void  cvProject3D( CvPoint3D32f* points3D, int count,\n                              CvPoint2D32f* points2D,\n                              int xIndx CV_DEFAULT(0),\n                              int yIndx CV_DEFAULT(1));\n\n/* Retrieves value of the particular bin\n   of x-dimensional (x=1,2,3,...) histogram */\n#define cvQueryHistValue_1D( hist, idx0 ) \\\n    ((float)cvGetReal1D( (hist)->bins, (idx0)))\n#define cvQueryHistValue_2D( hist, idx0, idx1 ) \\\n    ((float)cvGetReal2D( (hist)->bins, (idx0), (idx1)))\n#define cvQueryHistValue_3D( hist, idx0, idx1, idx2 ) \\\n    ((float)cvGetReal3D( (hist)->bins, (idx0), (idx1), (idx2)))\n#define cvQueryHistValue_nD( hist, idx ) \\\n    ((float)cvGetRealND( (hist)->bins, (idx)))\n\n/* Returns pointer to the particular bin of x-dimesional histogram.\n   For sparse histogram the bin is created if it didn't exist before */\n#define cvGetHistValue_1D( hist, idx0 ) \\\n    ((float*)cvPtr1D( (hist)->bins, (idx0), 0))\n#define cvGetHistValue_2D( hist, idx0, idx1 ) \\\n    ((float*)cvPtr2D( (hist)->bins, (idx0), (idx1), 0))\n#define cvGetHistValue_3D( hist, idx0, idx1, idx2 ) \\\n    ((float*)cvPtr3D( (hist)->bins, (idx0), (idx1), (idx2), 0))\n#define cvGetHistValue_nD( hist, idx ) \\\n    ((float*)cvPtrND( (hist)->bins, (idx), 0))\n\n\n#define CV_IS_SET_ELEM_EXISTS CV_IS_SET_ELEM\n\n\nCV_EXPORTS  int  cvHoughLines( CvArr* image, double rho,\n                              double theta, int threshold,\n                              float* lines, int linesNumber );\n\nCV_EXPORTS  int  cvHoughLinesP( CvArr* image, double rho,\n                               double theta, int threshold,\n                               int lineLength, int lineGap,\n                               int* lines, int linesNumber );\n\n\nCV_EXPORTS  int  cvHoughLinesSDiv( CvArr* image, double rho, int srn,\n                                  double theta, int stn, int threshold,\n                                  float* lines, int linesNumber );\n\nCV_EXPORTS  float  cvCalcEMD( const float* signature1, int size1,\n                             const float* signature2, int size2,\n                             int dims, int dist_type CV_DEFAULT(CV_DIST_L2),\n                             CvDistanceFunction dist_func CV_DEFAULT(0),\n                             float* lower_bound CV_DEFAULT(0),\n                             void* user_param CV_DEFAULT(0));\n\nCV_EXPORTS  void  cvKMeans( int num_clusters, float** samples,\n                           int num_samples, int vec_size,\n                           CvTermCriteria termcrit, int* cluster_idx );\n\nCV_EXPORTS void  cvStartScanGraph( CvGraph* graph, CvGraphScanner* scanner,\n                                  CvGraphVtx* vtx CV_DEFAULT(NULL),\n                                  int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS));\n\nCV_EXPORTS  void  cvEndScanGraph( CvGraphScanner* scanner );\n\n\n/* old drawing functions */\nCV_EXPORTS void  cvLineAA( CvArr* img, CvPoint pt1, CvPoint pt2,\n                            double color, int scale CV_DEFAULT(0));\n\nCV_EXPORTS void  cvCircleAA( CvArr* img, CvPoint center, int radius,\n                            double color, int scale CV_DEFAULT(0) );\n\nCV_EXPORTS void  cvEllipseAA( CvArr* img, CvPoint center, CvSize axes,\n                              double angle, double start_angle,\n                              double end_angle, double color,\n                              int scale CV_DEFAULT(0) );\n\nCV_EXPORTS void  cvPolyLineAA( CvArr* img, CvPoint** pts, int* npts, int contours,\n                              int is_closed, double color, int scale CV_DEFAULT(0) );\n\n/****************************************************************************************\\\n*                                   Pixel Access Macros                                  *\n\\****************************************************************************************/\n\ntypedef struct _CvPixelPosition8u\n{\n    uchar*  currline;      /* pointer to the start of the current pixel line   */\n    uchar*  topline;       /* pointer to the start of the top pixel line       */\n    uchar*  bottomline;    /* pointer to the start of the first line           */\n                                    /* which is below the image                         */\n    int     x;                      /* current x coordinate ( in pixels )               */\n    int     width;                  /* width of the image  ( in pixels )                */\n    int     height;                 /* height of the image  ( in pixels )               */\n    int     step;                   /* distance between lines ( in elements of single   */\n                                    /* plane )                                          */\n    int     step_arr[3];            /* array: ( 0, -step, step ). It is used for        */\n                                    /* vertical moving                                  */\n} CvPixelPosition8u;\n\n/* this structure differs from the above only in data type */\ntypedef struct _CvPixelPosition8s\n{\n    schar*  currline;\n    schar*  topline;\n    schar*  bottomline;\n    int     x;\n    int     width;\n    int     height;\n    int     step;\n    int     step_arr[3];\n} CvPixelPosition8s;\n\n/* this structure differs from the CvPixelPosition8u only in data type */\ntypedef struct _CvPixelPosition32f\n{\n    float*  currline;\n    float*  topline;\n    float*  bottomline;\n    int     x;\n    int     width;\n    int     height;\n    int     step;\n    int     step_arr[3];\n} CvPixelPosition32f;\n\n\n/* Initialize one of the CvPixelPosition structures.   */\n/*  pos    - initialized structure                     */\n/*  origin - pointer to the left-top corner of the ROI */\n/*  step   - width of the whole image in bytes         */\n/*  roi    - width & height of the ROI                 */\n/*  x, y   - initial position                          */\n#define CV_INIT_PIXEL_POS(pos, origin, _step, roi, _x, _y, orientation)    \\\n    (                                                                        \\\n    (pos).step = (_step)/sizeof((pos).currline[0]) * (orientation ? -1 : 1), \\\n    (pos).width = (roi).width,                                               \\\n    (pos).height = (roi).height,                                             \\\n    (pos).bottomline = (origin) + (pos).step*(pos).height,                   \\\n    (pos).topline = (origin) - (pos).step,                                   \\\n    (pos).step_arr[0] = 0,                                                   \\\n    (pos).step_arr[1] = -(pos).step,                                         \\\n    (pos).step_arr[2] = (pos).step,                                          \\\n    (pos).x = (_x),                                                          \\\n    (pos).currline = (origin) + (pos).step*(_y) )\n\n\n/* Move to specified point ( absolute shift ) */\n/*  pos    - position structure               */\n/*  x, y   - coordinates of the new position  */\n/*  cs     - number of the image channels     */\n#define CV_MOVE_TO( pos, _x, _y, cs )                                                   \\\n((pos).currline = (_y) >= 0 && (_y) < (pos).height ? (pos).topline + ((_y)+1)*(pos).step : 0, \\\n (pos).x = (_x) >= 0 && (_x) < (pos).width ? (_x) : 0, (pos).currline + (_x) * (cs) )\n\n/* Get current coordinates                    */\n/*  pos    - position structure               */\n/*  x, y   - coordinates of the new position  */\n/*  cs     - number of the image channels     */\n#define CV_GET_CURRENT( pos, cs )  ((pos).currline + (pos).x * (cs))\n\n/* Move by one pixel relatively to current position */\n/*  pos    - position structure                     */\n/*  cs     - number of the image channels           */\n\n/* left */\n#define CV_MOVE_LEFT( pos, cs ) \\\n ( --(pos).x >= 0 ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* right */\n#define CV_MOVE_RIGHT( pos, cs ) \\\n ( ++(pos).x < (pos).width ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* up */\n#define CV_MOVE_UP( pos, cs ) \\\n (((pos).currline -= (pos).step) != (pos).topline ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* down */\n#define CV_MOVE_DOWN( pos, cs ) \\\n (((pos).currline += (pos).step) != (pos).bottomline ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* left up */\n#define CV_MOVE_LU( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_UP(pos, cs))\n\n/* right up */\n#define CV_MOVE_RU( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_UP(pos, cs))\n\n/* left down */\n#define CV_MOVE_LD( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_DOWN(pos, cs))\n\n/* right down */\n#define CV_MOVE_RD( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_DOWN(pos, cs))\n\n\n\n/* Move by one pixel relatively to current position with wrapping when the position     */\n/* achieves image boundary                                                              */\n/*  pos    - position structure                                                         */\n/*  cs     - number of the image channels                                               */\n\n/* left */\n#define CV_MOVE_LEFT_WRAP( pos, cs ) \\\n ((pos).currline + ( --(pos).x >= 0 ? (pos).x : ((pos).x = (pos).width-1))*(cs))\n\n/* right */\n#define CV_MOVE_RIGHT_WRAP( pos, cs ) \\\n ((pos).currline + ( ++(pos).x < (pos).width ? (pos).x : ((pos).x = 0))*(cs) )\n\n/* up */\n#define CV_MOVE_UP_WRAP( pos, cs ) \\\n    ((((pos).currline -= (pos).step) != (pos).topline ? \\\n    (pos).currline : ((pos).currline = (pos).bottomline - (pos).step)) + (pos).x*(cs) )\n\n/* down */\n#define CV_MOVE_DOWN_WRAP( pos, cs ) \\\n    ((((pos).currline += (pos).step) != (pos).bottomline ? \\\n    (pos).currline : ((pos).currline = (pos).topline + (pos).step)) + (pos).x*(cs) )\n\n/* left up */\n#define CV_MOVE_LU_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs))\n/* right up */\n#define CV_MOVE_RU_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs))\n/* left down */\n#define CV_MOVE_LD_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs))\n/* right down */\n#define CV_MOVE_RD_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs))\n\n/* Numeric constants which used for moving in arbitrary direction  */\nenum\n{\n    CV_SHIFT_NONE = 2,\n    CV_SHIFT_LEFT = 1,\n    CV_SHIFT_RIGHT = 3,\n    CV_SHIFT_UP = 6,\n    CV_SHIFT_DOWN = 10,\n    CV_SHIFT_LU = 5,\n    CV_SHIFT_RU = 7,\n    CV_SHIFT_LD = 9,\n    CV_SHIFT_RD = 11\n};\n\n/* Move by one pixel in specified direction                                     */\n/*  pos    - position structure                                                 */\n/*  shift  - direction ( it's value must be one of the CV_SHIFT_Ö constants ) */\n/*  cs     - number of the image channels                                       */\n#define CV_MOVE_PARAM( pos, shift, cs )                                             \\\n    ( (pos).currline += (pos).step_arr[(shift)>>2], (pos).x += ((shift)&3)-2,       \\\n    ((pos).currline != (pos).topline && (pos).currline != (pos).bottomline &&       \\\n    (pos).x >= 0 && (pos).x < (pos).width) ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* Move by one pixel in specified direction with wrapping when the               */\n/* position achieves image boundary                                              */\n/*  pos    - position structure                                                  */\n/*  shift  - direction ( it's value must be one of the CV_SHIFT_Ö constants )  */\n/*  cs     - number of the image channels                                        */\n#define CV_MOVE_PARAM_WRAP( pos, shift, cs )                                        \\\n    ( (pos).currline += (pos).step_arr[(shift)>>2],                                 \\\n    (pos).currline = ((pos).currline == (pos).topline ?                             \\\n    (pos).bottomline - (pos).step :                                                 \\\n    (pos).currline == (pos).bottomline ?                                            \\\n    (pos).topline + (pos).step : (pos).currline),                                   \\\n                                                                                    \\\n    (pos).x += ((shift)&3)-2,                                                       \\\n    (pos).x = ((pos).x < 0 ? (pos).width-1 : (pos).x >= (pos).width ? 0 : (pos).x), \\\n                                                                                    \\\n    (pos).currline + (pos).x*(cs) )\n\n\ntypedef float*   CvVect32f;\ntypedef float*   CvMatr32f;\ntypedef double*  CvVect64d;\ntypedef double*  CvMatr64d;\n\nCV_EXPORTS void cvUnDistortOnce( const CvArr* src, CvArr* dst,\n                                const float* intrinsic_matrix,\n                                const float* distortion_coeffs,\n                                int interpolate );\n\n/* the two functions below have quite hackerish implementations, use with care\n   (or, which is better, switch to cvUndistortInitMap and cvRemap instead */\nCV_EXPORTS void cvUnDistortInit( const CvArr* src,\n                                CvArr* undistortion_map,\n                                const float* A, const float* k,\n                                int interpolate );\n\nCV_EXPORTS void  cvUnDistort( const CvArr* src, CvArr* dst,\n                             const CvArr* undistortion_map,\n                             int interpolate );\n\n/* Find fundamental matrix */\nCV_EXPORTS void  cvFindFundamentalMatrix( int* points1, int* points2,\n    int numpoints, int method, float* matrix );\n\n\nCV_EXPORTS int cvFindChessBoardCornerGuesses( const void* arr, void* thresharr,\n                               CvMemStorage* storage,\n                               CvSize pattern_size, CvPoint2D32f * corners,\n                               int *corner_count );\n\n/* Calibrates camera using multiple views of calibration pattern */\nCV_EXPORTS void cvCalibrateCamera( int image_count, int* _point_counts,\n    CvSize image_size, CvPoint2D32f* _image_points, CvPoint3D32f* _object_points,\n    float* _distortion_coeffs, float* _camera_matrix, float* _translation_vectors,\n    float* _rotation_matrices, int flags );\n\n\nCV_EXPORTS void cvCalibrateCamera_64d( int image_count, int* _point_counts,\n    CvSize image_size, CvPoint2D64f* _image_points, CvPoint3D64f* _object_points,\n    double* _distortion_coeffs, double* _camera_matrix, double* _translation_vectors,\n    double* _rotation_matrices, int flags );\n\n\n/* Find 3d position of object given intrinsic camera parameters,\n   3d model of the object and projection of the object into view plane */\nCV_EXPORTS void cvFindExtrinsicCameraParams( int point_count,\n    CvSize image_size, CvPoint2D32f* _image_points,\n    CvPoint3D32f* _object_points, float* focal_length,\n    CvPoint2D32f principal_point, float* _distortion_coeffs,\n    float* _rotation_vector, float* _translation_vector );\n\n/* Variant of the previous function that takes double-precision parameters */\nCV_EXPORTS void cvFindExtrinsicCameraParams_64d( int point_count,\n    CvSize image_size, CvPoint2D64f* _image_points,\n    CvPoint3D64f* _object_points, double* focal_length,\n    CvPoint2D64f principal_point, double* _distortion_coeffs,\n    double* _rotation_vector, double* _translation_vector );\n\n/* Rodrigues transform */\nenum\n{\n    CV_RODRIGUES_M2V = 0,\n    CV_RODRIGUES_V2M = 1\n};\n\n/* Converts rotation_matrix matrix to rotation_matrix vector or vice versa */\nCV_EXPORTS void  cvRodrigues( CvMat* rotation_matrix, CvMat* rotation_vector,\n                              CvMat* jacobian, int conv_type );\n\n/* Does reprojection of 3d object points to the view plane */\nCV_EXPORTS void  cvProjectPoints( int point_count, CvPoint3D64f* _object_points,\n    double* _rotation_vector, double*  _translation_vector,\n    double* focal_length, CvPoint2D64f principal_point,\n    double* _distortion, CvPoint2D64f* _image_points,\n    double* _deriv_points_rotation_matrix,\n    double* _deriv_points_translation_vect,\n    double* _deriv_points_focal,\n    double* _deriv_points_principal_point,\n    double* _deriv_points_distortion_coeffs );\n\n\n/* Simpler version of the previous function */\nCV_EXPORTS void  cvProjectPointsSimple( int point_count, CvPoint3D64f* _object_points,\n    double* _rotation_matrix, double*  _translation_vector,\n    double* _camera_matrix, double* _distortion, CvPoint2D64f* _image_points );\n\n\n#define cvMake2DPoints cvConvertPointsHomogeneous\n#define cvMake3DPoints cvConvertPointsHomogeneous\n\n#define cvWarpPerspectiveQMatrix cvGetPerspectiveTransform\n\n#define cvConvertPointsHomogenious cvConvertPointsHomogeneous\n\n\n//////////////////////////////////// feature extractors: obsolete API //////////////////////////////////\n\ntypedef struct CvSURFPoint\n{\n    CvPoint2D32f pt;\n\n    int          laplacian;\n    int          size;\n    float        dir;\n    float        hessian;\n\n} CvSURFPoint;\n\nCV_INLINE CvSURFPoint cvSURFPoint( CvPoint2D32f pt, int laplacian,\n                                  int size, float dir CV_DEFAULT(0),\n                                  float hessian CV_DEFAULT(0))\n{\n    CvSURFPoint kp;\n\n    kp.pt        = pt;\n    kp.laplacian = laplacian;\n    kp.size      = size;\n    kp.dir       = dir;\n    kp.hessian   = hessian;\n\n    return kp;\n}\n\ntypedef struct CvSURFParams\n{\n    int    extended;\n    int    upright;\n    double hessianThreshold;\n\n    int    nOctaves;\n    int    nOctaveLayers;\n\n} CvSURFParams;\n\nCVAPI(CvSURFParams) cvSURFParams( double hessianThreshold, int extended CV_DEFAULT(0) );\n\n// If useProvidedKeyPts!=0, keypoints are not detected, but descriptors are computed\n//  at the locations provided in keypoints (a CvSeq of CvSURFPoint).\nCVAPI(void) cvExtractSURF( const CvArr* img, const CvArr* mask,\n                          CvSeq** keypoints, CvSeq** descriptors,\n                          CvMemStorage* storage, CvSURFParams params,\n                             int useProvidedKeyPts CV_DEFAULT(0)  );\n\n/*!\n Maximal Stable Regions Parameters\n */\ntypedef struct CvMSERParams\n{\n    //! delta, in the code, it compares (size_{i}-size_{i-delta})/size_{i-delta}\n    int delta;\n    //! prune the area which bigger than maxArea\n    int maxArea;\n    //! prune the area which smaller than minArea\n    int minArea;\n    //! prune the area have simliar size to its children\n    float maxVariation;\n    //! trace back to cut off mser with diversity < min_diversity\n    float minDiversity;\n\n    /////// the next few params for MSER of color image\n\n    //! for color image, the evolution steps\n    int maxEvolution;\n    //! the area threshold to cause re-initialize\n    double areaThreshold;\n    //! ignore too small margin\n    double minMargin;\n    //! the aperture size for edge blur\n    int edgeBlurSize;\n} CvMSERParams;\n\nCVAPI(CvMSERParams) cvMSERParams( int delta CV_DEFAULT(5), int min_area CV_DEFAULT(60),\n                                 int max_area CV_DEFAULT(14400), float max_variation CV_DEFAULT(.25f),\n                                 float min_diversity CV_DEFAULT(.2f), int max_evolution CV_DEFAULT(200),\n                                 double area_threshold CV_DEFAULT(1.01),\n                                 double min_margin CV_DEFAULT(.003),\n                                 int edge_blur_size CV_DEFAULT(5) );\n\n// Extracts the contours of Maximally Stable Extremal Regions\nCVAPI(void) cvExtractMSER( CvArr* _img, CvArr* _mask, CvSeq** contours, CvMemStorage* storage, CvMSERParams params );\n\n\ntypedef struct CvStarKeypoint\n{\n    CvPoint pt;\n    int size;\n    float response;\n} CvStarKeypoint;\n\nCV_INLINE CvStarKeypoint cvStarKeypoint(CvPoint pt, int size, float response)\n{\n    CvStarKeypoint kpt;\n    kpt.pt = pt;\n    kpt.size = size;\n    kpt.response = response;\n    return kpt;\n}\n\ntypedef struct CvStarDetectorParams\n{\n    int maxSize;\n    int responseThreshold;\n    int lineThresholdProjected;\n    int lineThresholdBinarized;\n    int suppressNonmaxSize;\n} CvStarDetectorParams;\n\nCV_INLINE CvStarDetectorParams cvStarDetectorParams(\n                                                    int maxSize CV_DEFAULT(45),\n                                                    int responseThreshold CV_DEFAULT(30),\n                                                    int lineThresholdProjected CV_DEFAULT(10),\n                                                    int lineThresholdBinarized CV_DEFAULT(8),\n                                                    int suppressNonmaxSize CV_DEFAULT(5))\n{\n    CvStarDetectorParams params;\n    params.maxSize = maxSize;\n    params.responseThreshold = responseThreshold;\n    params.lineThresholdProjected = lineThresholdProjected;\n    params.lineThresholdBinarized = lineThresholdBinarized;\n    params.suppressNonmaxSize = suppressNonmaxSize;\n\n    return params;\n}\n\nCVAPI(CvSeq*) cvGetStarKeypoints( const CvArr* img, CvMemStorage* storage,\n                                 CvStarDetectorParams params CV_DEFAULT(cvStarDetectorParams()));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/legacy/legacy.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_LEGACY_HPP__\n#define __OPENCV_LEGACY_HPP__\n\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/imgproc/imgproc_c.h\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/calib3d/calib3d.hpp\"\n#include \"opencv2/ml/ml.hpp\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nCVAPI(CvSeq*) cvSegmentImage( const CvArr* srcarr, CvArr* dstarr,\n                                    double canny_threshold,\n                                    double ffill_threshold,\n                                    CvMemStorage* storage );\n\n/****************************************************************************************\\\n*                                  Eigen objects                                         *\n\\****************************************************************************************/\n\ntypedef int (CV_CDECL * CvCallback)(int index, void* buffer, void* user_data);\ntypedef union\n{\n    CvCallback callback;\n    void* data;\n}\nCvInput;\n\n#define CV_EIGOBJ_NO_CALLBACK     0\n#define CV_EIGOBJ_INPUT_CALLBACK  1\n#define CV_EIGOBJ_OUTPUT_CALLBACK 2\n#define CV_EIGOBJ_BOTH_CALLBACK   3\n\n/* Calculates covariation matrix of a set of arrays */\nCVAPI(void)  cvCalcCovarMatrixEx( int nObjects, void* input, int ioFlags,\n                                  int ioBufSize, uchar* buffer, void* userData,\n                                  IplImage* avg, float* covarMatrix );\n\n/* Calculates eigen values and vectors of covariation matrix of a set of\n   arrays */\nCVAPI(void)  cvCalcEigenObjects( int nObjects, void* input, void* output,\n                                 int ioFlags, int ioBufSize, void* userData,\n                                 CvTermCriteria* calcLimit, IplImage* avg,\n                                 float* eigVals );\n\n/* Calculates dot product (obj - avg) * eigObj (i.e. projects image to eigen vector) */\nCVAPI(double)  cvCalcDecompCoeff( IplImage* obj, IplImage* eigObj, IplImage* avg );\n\n/* Projects image to eigen space (finds all decomposion coefficients */\nCVAPI(void)  cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput,\n                                 int ioFlags, void* userData, IplImage* avg,\n                                 float* coeffs );\n\n/* Projects original objects used to calculate eigen space basis to that space */\nCVAPI(void)  cvEigenProjection( void* eigInput, int nEigObjs, int ioFlags,\n                                void* userData, float* coeffs, IplImage* avg,\n                                IplImage* proj );\n\n/****************************************************************************************\\\n*                                       1D/2D HMM                                        *\n\\****************************************************************************************/\n\ntypedef struct CvImgObsInfo\n{\n    int obs_x;\n    int obs_y;\n    int obs_size;\n    float* obs;//consequtive observations\n\n    int* state;/* arr of pairs superstate/state to which observation belong */\n    int* mix;  /* number of mixture to which observation belong */\n\n} CvImgObsInfo;/*struct for 1 image*/\n\ntypedef CvImgObsInfo Cv1DObsInfo;\n\ntypedef struct CvEHMMState\n{\n    int num_mix;        /*number of mixtures in this state*/\n    float* mu;          /*mean vectors corresponding to each mixture*/\n    float* inv_var;     /* square root of inversed variances corresp. to each mixture*/\n    float* log_var_val; /* sum of 0.5 (LN2PI + ln(variance[i]) ) for i=1,n */\n    float* weight;      /*array of mixture weights. Summ of all weights in state is 1. */\n\n} CvEHMMState;\n\ntypedef struct CvEHMM\n{\n    int level; /* 0 - lowest(i.e its states are real states), ..... */\n    int num_states; /* number of HMM states */\n    float*  transP;/*transition probab. matrices for states */\n    float** obsProb; /* if level == 0 - array of brob matrices corresponding to hmm\n                        if level == 1 - martix of matrices */\n    union\n    {\n        CvEHMMState* state; /* if level == 0 points to real states array,\n                               if not - points to embedded hmms */\n        struct CvEHMM* ehmm; /* pointer to an embedded model or NULL, if it is a leaf */\n    } u;\n\n} CvEHMM;\n\n/*CVAPI(int)  icvCreate1DHMM( CvEHMM** this_hmm,\n                                   int state_number, int* num_mix, int obs_size );\n\nCVAPI(int)  icvRelease1DHMM( CvEHMM** phmm );\n\nCVAPI(int)  icvUniform1DSegm( Cv1DObsInfo* obs_info, CvEHMM* hmm );\n\nCVAPI(int)  icvInit1DMixSegm( Cv1DObsInfo** obs_info_array, int num_img, CvEHMM* hmm);\n\nCVAPI(int)  icvEstimate1DHMMStateParams( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm);\n\nCVAPI(int)  icvEstimate1DObsProb( CvImgObsInfo* obs_info, CvEHMM* hmm );\n\nCVAPI(int)  icvEstimate1DTransProb( Cv1DObsInfo** obs_info_array,\n                                           int num_seq,\n                                           CvEHMM* hmm );\n\nCVAPI(float)  icvViterbi( Cv1DObsInfo* obs_info, CvEHMM* hmm);\n\nCVAPI(int)  icv1DMixSegmL2( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );*/\n\n/*********************************** Embedded HMMs *************************************/\n\n/* Creates 2D HMM */\nCVAPI(CvEHMM*)  cvCreate2DHMM( int* stateNumber, int* numMix, int obsSize );\n\n/* Releases HMM */\nCVAPI(void)  cvRelease2DHMM( CvEHMM** hmm );\n\n#define CV_COUNT_OBS(roi, win, delta, numObs )                                       \\\n{                                                                                    \\\n   (numObs)->width  =((roi)->width  -(win)->width  +(delta)->width)/(delta)->width;  \\\n   (numObs)->height =((roi)->height -(win)->height +(delta)->height)/(delta)->height;\\\n}\n\n/* Creates storage for observation vectors */\nCVAPI(CvImgObsInfo*)  cvCreateObsInfo( CvSize numObs, int obsSize );\n\n/* Releases storage for observation vectors */\nCVAPI(void)  cvReleaseObsInfo( CvImgObsInfo** obs_info );\n\n\n/* The function takes an image on input and and returns the sequnce of observations\n   to be used with an embedded HMM; Each observation is top-left block of DCT\n   coefficient matrix */\nCVAPI(void)  cvImgToObs_DCT( const CvArr* arr, float* obs, CvSize dctSize,\n                             CvSize obsSize, CvSize delta );\n\n\n/* Uniformly segments all observation vectors extracted from image */\nCVAPI(void)  cvUniformImgSegm( CvImgObsInfo* obs_info, CvEHMM* ehmm );\n\n/* Does mixture segmentation of the states of embedded HMM */\nCVAPI(void)  cvInitMixSegm( CvImgObsInfo** obs_info_array,\n                            int num_img, CvEHMM* hmm );\n\n/* Function calculates means, variances, weights of every Gaussian mixture\n   of every low-level state of embedded HMM */\nCVAPI(void)  cvEstimateHMMStateParams( CvImgObsInfo** obs_info_array,\n                                       int num_img, CvEHMM* hmm );\n\n/* Function computes transition probability matrices of embedded HMM\n   given observations segmentation */\nCVAPI(void)  cvEstimateTransProb( CvImgObsInfo** obs_info_array,\n                                  int num_img, CvEHMM* hmm );\n\n/* Function computes probabilities of appearing observations at any state\n   (i.e. computes P(obs|state) for every pair(obs,state)) */\nCVAPI(void)  cvEstimateObsProb( CvImgObsInfo* obs_info,\n                                CvEHMM* hmm );\n\n/* Runs Viterbi algorithm for embedded HMM */\nCVAPI(float)  cvEViterbi( CvImgObsInfo* obs_info, CvEHMM* hmm );\n\n\n/* Function clusters observation vectors from several images\n   given observations segmentation.\n   Euclidean distance used for clustering vectors.\n   Centers of clusters are given means of every mixture */\nCVAPI(void)  cvMixSegmL2( CvImgObsInfo** obs_info_array,\n                          int num_img, CvEHMM* hmm );\n\n/****************************************************************************************\\\n*               A few functions from old stereo gesture recognition demosions            *\n\\****************************************************************************************/\n\n/* Creates hand mask image given several points on the hand */\nCVAPI(void)  cvCreateHandMask( CvSeq* hand_points,\n                                   IplImage *img_mask, CvRect *roi);\n\n/* Finds hand region in range image data */\nCVAPI(void)  cvFindHandRegion (CvPoint3D32f* points, int count,\n                                CvSeq* indexs,\n                                float* line, CvSize2D32f size, int flag,\n                                CvPoint3D32f* center,\n                                CvMemStorage* storage, CvSeq **numbers);\n\n/* Finds hand region in range image data (advanced version) */\nCVAPI(void)  cvFindHandRegionA( CvPoint3D32f* points, int count,\n                                CvSeq* indexs,\n                                float* line, CvSize2D32f size, int jc,\n                                CvPoint3D32f* center,\n                                CvMemStorage* storage, CvSeq **numbers);\n\n/* Calculates the cooficients of the homography matrix */\nCVAPI(void)  cvCalcImageHomography( float* line, CvPoint3D32f* center,\n                                    float* intrinsic, float* homography );\n\n/****************************************************************************************\\\n*                           More operations on sequences                                 *\n\\****************************************************************************************/\n\n/*****************************************************************************************/\n\n#define CV_CURRENT_INT( reader ) (*((int *)(reader).ptr))\n#define CV_PREV_INT( reader ) (*((int *)(reader).prev_elem))\n\n#define  CV_GRAPH_WEIGHTED_VERTEX_FIELDS() CV_GRAPH_VERTEX_FIELDS()\\\n    float weight;\n\n#define  CV_GRAPH_WEIGHTED_EDGE_FIELDS() CV_GRAPH_EDGE_FIELDS()\n\ntypedef struct CvGraphWeightedVtx\n{\n    CV_GRAPH_WEIGHTED_VERTEX_FIELDS()\n} CvGraphWeightedVtx;\n\ntypedef struct CvGraphWeightedEdge\n{\n    CV_GRAPH_WEIGHTED_EDGE_FIELDS()\n} CvGraphWeightedEdge;\n\ntypedef enum CvGraphWeightType\n{\n    CV_NOT_WEIGHTED,\n    CV_WEIGHTED_VTX,\n    CV_WEIGHTED_EDGE,\n    CV_WEIGHTED_ALL\n} CvGraphWeightType;\n\n\n/* Calculates histogram of a contour */\nCVAPI(void)  cvCalcPGH( const CvSeq* contour, CvHistogram* hist );\n\n#define CV_DOMINANT_IPAN 1\n\n/* Finds high-curvature points of the contour */\nCVAPI(CvSeq*) cvFindDominantPoints( CvSeq* contour, CvMemStorage* storage,\n                                   int method CV_DEFAULT(CV_DOMINANT_IPAN),\n                                   double parameter1 CV_DEFAULT(0),\n                                   double parameter2 CV_DEFAULT(0),\n                                   double parameter3 CV_DEFAULT(0),\n                                   double parameter4 CV_DEFAULT(0));\n\n/*****************************************************************************************/\n\n\n/*******************************Stereo correspondence*************************************/\n\ntypedef struct CvCliqueFinder\n{\n    CvGraph* graph;\n    int**    adj_matr;\n    int N; //graph size\n\n    // stacks, counters etc/\n    int k; //stack size\n    int* current_comp;\n    int** All;\n\n    int* ne;\n    int* ce;\n    int* fixp; //node with minimal disconnections\n    int* nod;\n    int* s; //for selected candidate\n    int status;\n    int best_score;\n    int weighted;\n    int weighted_edges;\n    float best_weight;\n    float* edge_weights;\n    float* vertex_weights;\n    float* cur_weight;\n    float* cand_weight;\n\n} CvCliqueFinder;\n\n#define CLIQUE_TIME_OFF 2\n#define CLIQUE_FOUND 1\n#define CLIQUE_END   0\n\n/*CVAPI(void) cvStartFindCliques( CvGraph* graph, CvCliqueFinder* finder, int reverse,\n                                   int weighted CV_DEFAULT(0),  int weighted_edges CV_DEFAULT(0));\nCVAPI(int) cvFindNextMaximalClique( CvCliqueFinder* finder, int* clock_rest CV_DEFAULT(0) );\nCVAPI(void) cvEndFindCliques( CvCliqueFinder* finder );\n\nCVAPI(void) cvBronKerbosch( CvGraph* graph );*/\n\n\n/*F///////////////////////////////////////////////////////////////////////////////////////\n//\n//    Name:    cvSubgraphWeight\n//    Purpose: finds weight of subgraph in a graph\n//    Context:\n//    Parameters:\n//      graph - input graph.\n//      subgraph - sequence of pairwise different ints.  These are indices of vertices of subgraph.\n//      weight_type - describes the way we measure weight.\n//            one of the following:\n//            CV_NOT_WEIGHTED - weight of a clique is simply its size\n//            CV_WEIGHTED_VTX - weight of a clique is the sum of weights of its vertices\n//            CV_WEIGHTED_EDGE - the same but edges\n//            CV_WEIGHTED_ALL - the same but both edges and vertices\n//      weight_vtx - optional vector of floats, with size = graph->total.\n//            If weight_type is either CV_WEIGHTED_VTX or CV_WEIGHTED_ALL\n//            weights of vertices must be provided.  If weight_vtx not zero\n//            these weights considered to be here, otherwise function assumes\n//            that vertices of graph are inherited from CvGraphWeightedVtx.\n//      weight_edge - optional matrix of floats, of width and height = graph->total.\n//            If weight_type is either CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL\n//            weights of edges ought to be supplied.  If weight_edge is not zero\n//            function finds them here, otherwise function expects\n//            edges of graph to be inherited from CvGraphWeightedEdge.\n//            If this parameter is not zero structure of the graph is determined from matrix\n//            rather than from CvGraphEdge's.  In particular, elements corresponding to\n//            absent edges should be zero.\n//    Returns:\n//      weight of subgraph.\n//    Notes:\n//F*/\n/*CVAPI(float) cvSubgraphWeight( CvGraph *graph, CvSeq *subgraph,\n                                  CvGraphWeightType weight_type CV_DEFAULT(CV_NOT_WEIGHTED),\n                                  CvVect32f weight_vtx CV_DEFAULT(0),\n                                  CvMatr32f weight_edge CV_DEFAULT(0) );*/\n\n\n/*F///////////////////////////////////////////////////////////////////////////////////////\n//\n//    Name:    cvFindCliqueEx\n//    Purpose: tries to find clique with maximum possible weight in a graph\n//    Context:\n//    Parameters:\n//      graph - input graph.\n//      storage - memory storage to be used by the result.\n//      is_complementary - optional flag showing whether function should seek for clique\n//            in complementary graph.\n//      weight_type - describes our notion about weight.\n//            one of the following:\n//            CV_NOT_WEIGHTED - weight of a clique is simply its size\n//            CV_WEIGHTED_VTX - weight of a clique is the sum of weights of its vertices\n//            CV_WEIGHTED_EDGE - the same but edges\n//            CV_WEIGHTED_ALL - the same but both edges and vertices\n//      weight_vtx - optional vector of floats, with size = graph->total.\n//            If weight_type is either CV_WEIGHTED_VTX or CV_WEIGHTED_ALL\n//            weights of vertices must be provided.  If weight_vtx not zero\n//            these weights considered to be here, otherwise function assumes\n//            that vertices of graph are inherited from CvGraphWeightedVtx.\n//      weight_edge - optional matrix of floats, of width and height = graph->total.\n//            If weight_type is either CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL\n//            weights of edges ought to be supplied.  If weight_edge is not zero\n//            function finds them here, otherwise function expects\n//            edges of graph to be inherited from CvGraphWeightedEdge.\n//            Note that in case of CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL\n//            nonzero is_complementary implies nonzero weight_edge.\n//      start_clique - optional sequence of pairwise different ints.  They are indices of\n//            vertices that shall be present in the output clique.\n//      subgraph_of_ban - optional sequence of (maybe equal) ints.  They are indices of\n//            vertices that shall not be present in the output clique.\n//      clique_weight_ptr - optional output parameter.  Weight of found clique stored here.\n//      num_generations - optional number of generations in evolutionary part of algorithm,\n//            zero forces to return first found clique.\n//      quality - optional parameter determining degree of required quality/speed tradeoff.\n//            Must be in the range from 0 to 9.\n//            0 is fast and dirty, 9 is slow but hopefully yields good clique.\n//    Returns:\n//      sequence of pairwise different ints.\n//      These are indices of vertices that form found clique.\n//    Notes:\n//      in cases of CV_WEIGHTED_EDGE and CV_WEIGHTED_ALL weights should be nonnegative.\n//      start_clique has a priority over subgraph_of_ban.\n//F*/\n/*CVAPI(CvSeq*) cvFindCliqueEx( CvGraph *graph, CvMemStorage *storage,\n                                 int is_complementary CV_DEFAULT(0),\n                                 CvGraphWeightType weight_type CV_DEFAULT(CV_NOT_WEIGHTED),\n                                 CvVect32f weight_vtx CV_DEFAULT(0),\n                                 CvMatr32f weight_edge CV_DEFAULT(0),\n                                 CvSeq *start_clique CV_DEFAULT(0),\n                                 CvSeq *subgraph_of_ban CV_DEFAULT(0),\n                                 float *clique_weight_ptr CV_DEFAULT(0),\n                                 int num_generations CV_DEFAULT(3),\n                                 int quality CV_DEFAULT(2) );*/\n\n\n#define CV_UNDEF_SC_PARAM         12345 //default value of parameters\n\n#define CV_IDP_BIRCHFIELD_PARAM1  25\n#define CV_IDP_BIRCHFIELD_PARAM2  5\n#define CV_IDP_BIRCHFIELD_PARAM3  12\n#define CV_IDP_BIRCHFIELD_PARAM4  15\n#define CV_IDP_BIRCHFIELD_PARAM5  25\n\n\n#define  CV_DISPARITY_BIRCHFIELD  0\n\n\n/*F///////////////////////////////////////////////////////////////////////////\n//\n//    Name:    cvFindStereoCorrespondence\n//    Purpose: find stereo correspondence on stereo-pair\n//    Context:\n//    Parameters:\n//      leftImage - left image of stereo-pair (format 8uC1).\n//      rightImage - right image of stereo-pair (format 8uC1).\n//   mode - mode of correspondence retrieval (now CV_DISPARITY_BIRCHFIELD only)\n//      dispImage - destination disparity image\n//      maxDisparity - maximal disparity\n//      param1, param2, param3, param4, param5 - parameters of algorithm\n//    Returns:\n//    Notes:\n//      Images must be rectified.\n//      All images must have format 8uC1.\n//F*/\nCVAPI(void)\ncvFindStereoCorrespondence(\n                   const  CvArr* leftImage, const  CvArr* rightImage,\n                   int     mode,\n                   CvArr*  dispImage,\n                   int     maxDisparity,\n                   double  param1 CV_DEFAULT(CV_UNDEF_SC_PARAM),\n                   double  param2 CV_DEFAULT(CV_UNDEF_SC_PARAM),\n                   double  param3 CV_DEFAULT(CV_UNDEF_SC_PARAM),\n                   double  param4 CV_DEFAULT(CV_UNDEF_SC_PARAM),\n                   double  param5 CV_DEFAULT(CV_UNDEF_SC_PARAM) );\n\n/*****************************************************************************************/\n/************ Epiline functions *******************/\n\n\n\ntypedef struct CvStereoLineCoeff\n{\n    double Xcoef;\n    double XcoefA;\n    double XcoefB;\n    double XcoefAB;\n\n    double Ycoef;\n    double YcoefA;\n    double YcoefB;\n    double YcoefAB;\n\n    double Zcoef;\n    double ZcoefA;\n    double ZcoefB;\n    double ZcoefAB;\n}CvStereoLineCoeff;\n\n\ntypedef struct CvCamera\n{\n    float   imgSize[2]; /* size of the camera view, used during calibration */\n    float   matrix[9]; /* intinsic camera parameters:  [ fx 0 cx; 0 fy cy; 0 0 1 ] */\n    float   distortion[4]; /* distortion coefficients - two coefficients for radial distortion\n                              and another two for tangential: [ k1 k2 p1 p2 ] */\n    float   rotMatr[9];\n    float   transVect[3]; /* rotation matrix and transition vector relatively\n                             to some reference point in the space. */\n} CvCamera;\n\ntypedef struct CvStereoCamera\n{\n    CvCamera* camera[2]; /* two individual camera parameters */\n    float fundMatr[9]; /* fundamental matrix */\n\n    /* New part for stereo */\n    CvPoint3D32f epipole[2];\n    CvPoint2D32f quad[2][4]; /* coordinates of destination quadrangle after\n                                epipolar geometry rectification */\n    double coeffs[2][3][3];/* coefficients for transformation */\n    CvPoint2D32f border[2][4];\n    CvSize warpSize;\n    CvStereoLineCoeff* lineCoeffs;\n    int needSwapCameras;/* flag set to 1 if need to swap cameras for good reconstruction */\n    float rotMatrix[9];\n    float transVector[3];\n} CvStereoCamera;\n\n\ntypedef struct CvContourOrientation\n{\n    float egvals[2];\n    float egvects[4];\n\n    float max, min; // minimum and maximum projections\n    int imax, imin;\n} CvContourOrientation;\n\n#define CV_CAMERA_TO_WARP 1\n#define CV_WARP_TO_CAMERA 2\n\nCVAPI(int) icvConvertWarpCoordinates(double coeffs[3][3],\n                                CvPoint2D32f* cameraPoint,\n                                CvPoint2D32f* warpPoint,\n                                int direction);\n\nCVAPI(int) icvGetSymPoint3D(  CvPoint3D64f pointCorner,\n                            CvPoint3D64f point1,\n                            CvPoint3D64f point2,\n                            CvPoint3D64f *pointSym2);\n\nCVAPI(void) icvGetPieceLength3D(CvPoint3D64f point1,CvPoint3D64f point2,double* dist);\n\nCVAPI(int) icvCompute3DPoint(    double alpha,double betta,\n                            CvStereoLineCoeff* coeffs,\n                            CvPoint3D64f* point);\n\nCVAPI(int) icvCreateConvertMatrVect( double*     rotMatr1,\n                                double*     transVect1,\n                                double*     rotMatr2,\n                                double*     transVect2,\n                                double*     convRotMatr,\n                                double*     convTransVect);\n\nCVAPI(int) icvConvertPointSystem(CvPoint3D64f  M2,\n                            CvPoint3D64f* M1,\n                            double*     rotMatr,\n                            double*     transVect\n                            );\n\nCVAPI(int) icvComputeCoeffForStereo(  CvStereoCamera* stereoCamera);\n\nCVAPI(int) icvGetCrossPieceVector(CvPoint2D32f p1_start,CvPoint2D32f p1_end,CvPoint2D32f v2_start,CvPoint2D32f v2_end,CvPoint2D32f *cross);\nCVAPI(int) icvGetCrossLineDirect(CvPoint2D32f p1,CvPoint2D32f p2,float a,float b,float c,CvPoint2D32f* cross);\nCVAPI(float) icvDefinePointPosition(CvPoint2D32f point1,CvPoint2D32f point2,CvPoint2D32f point);\nCVAPI(int) icvStereoCalibration( int numImages,\n                            int* nums,\n                            CvSize imageSize,\n                            CvPoint2D32f* imagePoints1,\n                            CvPoint2D32f* imagePoints2,\n                            CvPoint3D32f* objectPoints,\n                            CvStereoCamera* stereoparams\n                           );\n\n\nCVAPI(int) icvComputeRestStereoParams(CvStereoCamera *stereoparams);\n\nCVAPI(void) cvComputePerspectiveMap( const double coeffs[3][3], CvArr* rectMapX, CvArr* rectMapY );\n\nCVAPI(int) icvComCoeffForLine(   CvPoint2D64f point1,\n                            CvPoint2D64f point2,\n                            CvPoint2D64f point3,\n                            CvPoint2D64f point4,\n                            double*    camMatr1,\n                            double*    rotMatr1,\n                            double*    transVect1,\n                            double*    camMatr2,\n                            double*    rotMatr2,\n                            double*    transVect2,\n                            CvStereoLineCoeff*    coeffs,\n                            int* needSwapCameras);\n\nCVAPI(int) icvGetDirectionForPoint(  CvPoint2D64f point,\n                                double* camMatr,\n                                CvPoint3D64f* direct);\n\nCVAPI(int) icvGetCrossLines(CvPoint3D64f point11,CvPoint3D64f point12,\n                       CvPoint3D64f point21,CvPoint3D64f point22,\n                       CvPoint3D64f* midPoint);\n\nCVAPI(int) icvComputeStereoLineCoeffs(   CvPoint3D64f pointA,\n                                    CvPoint3D64f pointB,\n                                    CvPoint3D64f pointCam1,\n                                    double gamma,\n                                    CvStereoLineCoeff*    coeffs);\n\n/*CVAPI(int) icvComputeFundMatrEpipoles ( double* camMatr1,\n                                    double*     rotMatr1,\n                                    double*     transVect1,\n                                    double*     camMatr2,\n                                    double*     rotMatr2,\n                                    double*     transVect2,\n                                    CvPoint2D64f* epipole1,\n                                    CvPoint2D64f* epipole2,\n                                    double*     fundMatr);*/\n\nCVAPI(int) icvGetAngleLine( CvPoint2D64f startPoint, CvSize imageSize,CvPoint2D64f *point1,CvPoint2D64f *point2);\n\nCVAPI(void) icvGetCoefForPiece(   CvPoint2D64f p_start,CvPoint2D64f p_end,\n                        double *a,double *b,double *c,\n                        int* result);\n\n/*CVAPI(void) icvGetCommonArea( CvSize imageSize,\n                    CvPoint2D64f epipole1,CvPoint2D64f epipole2,\n                    double* fundMatr,\n                    double* coeff11,double* coeff12,\n                    double* coeff21,double* coeff22,\n                    int* result);*/\n\nCVAPI(void) icvComputeeInfiniteProject1(double*    rotMatr,\n                                     double*    camMatr1,\n                                     double*    camMatr2,\n                                     CvPoint2D32f point1,\n                                     CvPoint2D32f *point2);\n\nCVAPI(void) icvComputeeInfiniteProject2(double*    rotMatr,\n                                     double*    camMatr1,\n                                     double*    camMatr2,\n                                     CvPoint2D32f* point1,\n                                     CvPoint2D32f point2);\n\nCVAPI(void) icvGetCrossDirectDirect(  double* direct1,double* direct2,\n                            CvPoint2D64f *cross,int* result);\n\nCVAPI(void) icvGetCrossPieceDirect(   CvPoint2D64f p_start,CvPoint2D64f p_end,\n                            double a,double b,double c,\n                            CvPoint2D64f *cross,int* result);\n\nCVAPI(void) icvGetCrossPiecePiece( CvPoint2D64f p1_start,CvPoint2D64f p1_end,\n                            CvPoint2D64f p2_start,CvPoint2D64f p2_end,\n                            CvPoint2D64f* cross,\n                            int* result);\n\nCVAPI(void) icvGetPieceLength(CvPoint2D64f point1,CvPoint2D64f point2,double* dist);\n\nCVAPI(void) icvGetCrossRectDirect(    CvSize imageSize,\n                            double a,double b,double c,\n                            CvPoint2D64f *start,CvPoint2D64f *end,\n                            int* result);\n\nCVAPI(void) icvProjectPointToImage(   CvPoint3D64f point,\n                            double* camMatr,double* rotMatr,double* transVect,\n                            CvPoint2D64f* projPoint);\n\nCVAPI(void) icvGetQuadsTransform( CvSize        imageSize,\n                        double*     camMatr1,\n                        double*     rotMatr1,\n                        double*     transVect1,\n                        double*     camMatr2,\n                        double*     rotMatr2,\n                        double*     transVect2,\n                        CvSize*       warpSize,\n                        double quad1[4][2],\n                        double quad2[4][2],\n                        double*     fundMatr,\n                        CvPoint3D64f* epipole1,\n                        CvPoint3D64f* epipole2\n                        );\n\nCVAPI(void) icvGetQuadsTransformStruct(  CvStereoCamera* stereoCamera);\n\nCVAPI(void) icvComputeStereoParamsForCameras(CvStereoCamera* stereoCamera);\n\nCVAPI(void) icvGetCutPiece(   double* areaLineCoef1,double* areaLineCoef2,\n                    CvPoint2D64f epipole,\n                    CvSize imageSize,\n                    CvPoint2D64f* point11,CvPoint2D64f* point12,\n                    CvPoint2D64f* point21,CvPoint2D64f* point22,\n                    int* result);\n\nCVAPI(void) icvGetMiddleAnglePoint(   CvPoint2D64f basePoint,\n                            CvPoint2D64f point1,CvPoint2D64f point2,\n                            CvPoint2D64f* midPoint);\n\nCVAPI(void) icvGetNormalDirect(double* direct,CvPoint2D64f point,double* normDirect);\n\nCVAPI(double) icvGetVect(CvPoint2D64f basePoint,CvPoint2D64f point1,CvPoint2D64f point2);\n\nCVAPI(void) icvProjectPointToDirect(  CvPoint2D64f point,double* lineCoeff,\n                            CvPoint2D64f* projectPoint);\n\nCVAPI(void) icvGetDistanceFromPointToDirect( CvPoint2D64f point,double* lineCoef,double*dist);\n\nCVAPI(IplImage*) icvCreateIsometricImage( IplImage* src, IplImage* dst,\n                              int desired_depth, int desired_num_channels );\n\nCVAPI(void) cvDeInterlace( const CvArr* frame, CvArr* fieldEven, CvArr* fieldOdd );\n\n/*CVAPI(int) icvSelectBestRt(           int           numImages,\n                                    int*          numPoints,\n                                    CvSize        imageSize,\n                                    CvPoint2D32f* imagePoints1,\n                                    CvPoint2D32f* imagePoints2,\n                                    CvPoint3D32f* objectPoints,\n\n                                    CvMatr32f     cameraMatrix1,\n                                    CvVect32f     distortion1,\n                                    CvMatr32f     rotMatrs1,\n                                    CvVect32f     transVects1,\n\n                                    CvMatr32f     cameraMatrix2,\n                                    CvVect32f     distortion2,\n                                    CvMatr32f     rotMatrs2,\n                                    CvVect32f     transVects2,\n\n                                    CvMatr32f     bestRotMatr,\n                                    CvVect32f     bestTransVect\n                                    );*/\n\n\n/****************************************************************************************\\\n*                                     Contour Tree                                       *\n\\****************************************************************************************/\n\n/* Contour tree header */\ntypedef struct CvContourTree\n{\n    CV_SEQUENCE_FIELDS()\n    CvPoint p1;            /* the first point of the binary tree root segment */\n    CvPoint p2;            /* the last point of the binary tree root segment */\n} CvContourTree;\n\n/* Builds hierarhical representation of a contour */\nCVAPI(CvContourTree*)  cvCreateContourTree( const CvSeq* contour,\n                                            CvMemStorage* storage,\n                                            double threshold );\n\n/* Reconstruct (completelly or partially) contour a from contour tree */\nCVAPI(CvSeq*)  cvContourFromContourTree( const CvContourTree* tree,\n                                         CvMemStorage* storage,\n                                         CvTermCriteria criteria );\n\n/* Compares two contour trees */\nenum { CV_CONTOUR_TREES_MATCH_I1 = 1 };\n\nCVAPI(double)  cvMatchContourTrees( const CvContourTree* tree1,\n                                    const CvContourTree* tree2,\n                                    int method, double threshold );\n\n/****************************************************************************************\\\n*                                   Contour Morphing                                     *\n\\****************************************************************************************/\n\n/* finds correspondence between two contours */\nCvSeq* cvCalcContoursCorrespondence( const CvSeq* contour1,\n                                     const CvSeq* contour2,\n                                     CvMemStorage* storage);\n\n/* morphs contours using the pre-calculated correspondence:\n   alpha=0 ~ contour1, alpha=1 ~ contour2 */\nCvSeq* cvMorphContours( const CvSeq* contour1, const CvSeq* contour2,\n                        CvSeq* corr, double alpha,\n                        CvMemStorage* storage );\n\n\n/****************************************************************************************\\\n*                                   Active Contours                                      *\n\\****************************************************************************************/\n\n#define  CV_VALUE  1\n#define  CV_ARRAY  2\n/* Updates active contour in order to minimize its cummulative\n   (internal and external) energy. */\nCVAPI(void)  cvSnakeImage( const IplImage* image, CvPoint* points,\n                           int  length, float* alpha,\n                           float* beta, float* gamma,\n                           int coeff_usage, CvSize  win,\n                           CvTermCriteria criteria, int calc_gradient CV_DEFAULT(1));\n\n/****************************************************************************************\\\n*                                    Texture Descriptors                                 *\n\\****************************************************************************************/\n\n#define CV_GLCM_OPTIMIZATION_NONE                   -2\n#define CV_GLCM_OPTIMIZATION_LUT                    -1\n#define CV_GLCM_OPTIMIZATION_HISTOGRAM              0\n\n#define CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST    10\n#define CV_GLCMDESC_OPTIMIZATION_ALLOWTRIPLENEST    11\n#define CV_GLCMDESC_OPTIMIZATION_HISTOGRAM          4\n\n#define CV_GLCMDESC_ENTROPY                         0\n#define CV_GLCMDESC_ENERGY                          1\n#define CV_GLCMDESC_HOMOGENITY                      2\n#define CV_GLCMDESC_CONTRAST                        3\n#define CV_GLCMDESC_CLUSTERTENDENCY                 4\n#define CV_GLCMDESC_CLUSTERSHADE                    5\n#define CV_GLCMDESC_CORRELATION                     6\n#define CV_GLCMDESC_CORRELATIONINFO1                7\n#define CV_GLCMDESC_CORRELATIONINFO2                8\n#define CV_GLCMDESC_MAXIMUMPROBABILITY              9\n\n#define CV_GLCM_ALL                                 0\n#define CV_GLCM_GLCM                                1\n#define CV_GLCM_DESC                                2\n\ntypedef struct CvGLCM CvGLCM;\n\nCVAPI(CvGLCM*) cvCreateGLCM( const IplImage* srcImage,\n                                int stepMagnitude,\n                                const int* stepDirections CV_DEFAULT(0),\n                                int numStepDirections CV_DEFAULT(0),\n                                int optimizationType CV_DEFAULT(CV_GLCM_OPTIMIZATION_NONE));\n\nCVAPI(void) cvReleaseGLCM( CvGLCM** GLCM, int flag CV_DEFAULT(CV_GLCM_ALL));\n\nCVAPI(void) cvCreateGLCMDescriptors( CvGLCM* destGLCM,\n                                        int descriptorOptimizationType\n                                        CV_DEFAULT(CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST));\n\nCVAPI(double) cvGetGLCMDescriptor( CvGLCM* GLCM, int step, int descriptor );\n\nCVAPI(void) cvGetGLCMDescriptorStatistics( CvGLCM* GLCM, int descriptor,\n                                              double* average, double* standardDeviation );\n\nCVAPI(IplImage*) cvCreateGLCMImage( CvGLCM* GLCM, int step );\n\n/****************************************************************************************\\\n*                                  Face eyes&mouth tracking                              *\n\\****************************************************************************************/\n\n\ntypedef struct CvFaceTracker CvFaceTracker;\n\n#define CV_NUM_FACE_ELEMENTS    3\nenum CV_FACE_ELEMENTS\n{\n    CV_FACE_MOUTH = 0,\n    CV_FACE_LEFT_EYE = 1,\n    CV_FACE_RIGHT_EYE = 2\n};\n\nCVAPI(CvFaceTracker*) cvInitFaceTracker(CvFaceTracker* pFaceTracking, const IplImage* imgGray,\n                                                CvRect* pRects, int nRects);\nCVAPI(int) cvTrackFace( CvFaceTracker* pFaceTracker, IplImage* imgGray,\n                              CvRect* pRects, int nRects,\n                              CvPoint* ptRotate, double* dbAngleRotate);\nCVAPI(void) cvReleaseFaceTracker(CvFaceTracker** ppFaceTracker);\n\n\ntypedef struct CvFace\n{\n    CvRect MouthRect;\n    CvRect LeftEyeRect;\n    CvRect RightEyeRect;\n} CvFaceData;\n\nCvSeq * cvFindFace(IplImage * Image,CvMemStorage* storage);\nCvSeq * cvPostBoostingFindFace(IplImage * Image,CvMemStorage* storage);\n\n\n/****************************************************************************************\\\n*                                         3D Tracker                                     *\n\\****************************************************************************************/\n\ntypedef unsigned char CvBool;\n\ntypedef struct Cv3dTracker2dTrackedObject\n{\n    int id;\n    CvPoint2D32f p; // pgruebele: So we do not loose precision, this needs to be float\n} Cv3dTracker2dTrackedObject;\n\nCV_INLINE Cv3dTracker2dTrackedObject cv3dTracker2dTrackedObject(int id, CvPoint2D32f p)\n{\n    Cv3dTracker2dTrackedObject r;\n    r.id = id;\n    r.p = p;\n    return r;\n}\n\ntypedef struct Cv3dTrackerTrackedObject\n{\n    int id;\n    CvPoint3D32f p;             // location of the tracked object\n} Cv3dTrackerTrackedObject;\n\nCV_INLINE Cv3dTrackerTrackedObject cv3dTrackerTrackedObject(int id, CvPoint3D32f p)\n{\n    Cv3dTrackerTrackedObject r;\n    r.id = id;\n    r.p = p;\n    return r;\n}\n\ntypedef struct Cv3dTrackerCameraInfo\n{\n    CvBool valid;\n    float mat[4][4];              /* maps camera coordinates to world coordinates */\n    CvPoint2D32f principal_point; /* copied from intrinsics so this structure */\n                                  /* has all the info we need */\n} Cv3dTrackerCameraInfo;\n\ntypedef struct Cv3dTrackerCameraIntrinsics\n{\n    CvPoint2D32f principal_point;\n    float focal_length[2];\n    float distortion[4];\n} Cv3dTrackerCameraIntrinsics;\n\nCVAPI(CvBool) cv3dTrackerCalibrateCameras(int num_cameras,\n                     const Cv3dTrackerCameraIntrinsics camera_intrinsics[], /* size is num_cameras */\n                     CvSize etalon_size,\n                     float square_size,\n                     IplImage *samples[],                                   /* size is num_cameras */\n                     Cv3dTrackerCameraInfo camera_info[]);                  /* size is num_cameras */\n\nCVAPI(int)  cv3dTrackerLocateObjects(int num_cameras, int num_objects,\n                   const Cv3dTrackerCameraInfo camera_info[],        /* size is num_cameras */\n                   const Cv3dTracker2dTrackedObject tracking_info[], /* size is num_objects*num_cameras */\n                   Cv3dTrackerTrackedObject tracked_objects[]);      /* size is num_objects */\n/****************************************************************************************\n tracking_info is a rectangular array; one row per camera, num_objects elements per row.\n The id field of any unused slots must be -1. Ids need not be ordered or consecutive. On\n completion, the return value is the number of objects located; i.e., the number of objects\n visible by more than one camera. The id field of any unused slots in tracked objects is\n set to -1.\n****************************************************************************************/\n\n\n/****************************************************************************************\\\n*                           Skeletons and Linear-Contour Models                          *\n\\****************************************************************************************/\n\ntypedef enum CvLeeParameters\n{\n    CV_LEE_INT = 0,\n    CV_LEE_FLOAT = 1,\n    CV_LEE_DOUBLE = 2,\n    CV_LEE_AUTO = -1,\n    CV_LEE_ERODE = 0,\n    CV_LEE_ZOOM = 1,\n    CV_LEE_NON = 2\n} CvLeeParameters;\n\n#define CV_NEXT_VORONOISITE2D( SITE ) ((SITE)->edge[0]->site[((SITE)->edge[0]->site[0] == (SITE))])\n#define CV_PREV_VORONOISITE2D( SITE ) ((SITE)->edge[1]->site[((SITE)->edge[1]->site[0] == (SITE))])\n#define CV_FIRST_VORONOIEDGE2D( SITE ) ((SITE)->edge[0])\n#define CV_LAST_VORONOIEDGE2D( SITE ) ((SITE)->edge[1])\n#define CV_NEXT_VORONOIEDGE2D( EDGE, SITE ) ((EDGE)->next[(EDGE)->site[0] != (SITE)])\n#define CV_PREV_VORONOIEDGE2D( EDGE, SITE ) ((EDGE)->next[2 + ((EDGE)->site[0] != (SITE))])\n#define CV_VORONOIEDGE2D_BEGINNODE( EDGE, SITE ) ((EDGE)->node[((EDGE)->site[0] != (SITE))])\n#define CV_VORONOIEDGE2D_ENDNODE( EDGE, SITE ) ((EDGE)->node[((EDGE)->site[0] == (SITE))])\n#define CV_TWIN_VORONOISITE2D( SITE, EDGE ) ( (EDGE)->site[((EDGE)->site[0] == (SITE))])\n\n#define CV_VORONOISITE2D_FIELDS()    \\\n    struct CvVoronoiNode2D *node[2]; \\\n    struct CvVoronoiEdge2D *edge[2];\n\ntypedef struct CvVoronoiSite2D\n{\n    CV_VORONOISITE2D_FIELDS()\n    struct CvVoronoiSite2D *next[2];\n} CvVoronoiSite2D;\n\n#define CV_VORONOIEDGE2D_FIELDS()    \\\n    struct CvVoronoiNode2D *node[2]; \\\n    struct CvVoronoiSite2D *site[2]; \\\n    struct CvVoronoiEdge2D *next[4];\n\ntypedef struct CvVoronoiEdge2D\n{\n    CV_VORONOIEDGE2D_FIELDS()\n} CvVoronoiEdge2D;\n\n#define CV_VORONOINODE2D_FIELDS()       \\\n    CV_SET_ELEM_FIELDS(CvVoronoiNode2D) \\\n    CvPoint2D32f pt;                    \\\n    float radius;\n\ntypedef struct CvVoronoiNode2D\n{\n    CV_VORONOINODE2D_FIELDS()\n} CvVoronoiNode2D;\n\n#define CV_VORONOIDIAGRAM2D_FIELDS() \\\n    CV_GRAPH_FIELDS()                \\\n    CvSet *sites;\n\ntypedef struct CvVoronoiDiagram2D\n{\n    CV_VORONOIDIAGRAM2D_FIELDS()\n} CvVoronoiDiagram2D;\n\n/* Computes Voronoi Diagram for given polygons with holes */\nCVAPI(int)  cvVoronoiDiagramFromContour(CvSeq* ContourSeq,\n                                           CvVoronoiDiagram2D** VoronoiDiagram,\n                                           CvMemStorage* VoronoiStorage,\n                                           CvLeeParameters contour_type CV_DEFAULT(CV_LEE_INT),\n                                           int contour_orientation CV_DEFAULT(-1),\n                                           int attempt_number CV_DEFAULT(10));\n\n/* Computes Voronoi Diagram for domains in given image */\nCVAPI(int)  cvVoronoiDiagramFromImage(IplImage* pImage,\n                                         CvSeq** ContourSeq,\n                                         CvVoronoiDiagram2D** VoronoiDiagram,\n                                         CvMemStorage* VoronoiStorage,\n                                         CvLeeParameters regularization_method CV_DEFAULT(CV_LEE_NON),\n                                         float approx_precision CV_DEFAULT(CV_LEE_AUTO));\n\n/* Deallocates the storage */\nCVAPI(void) cvReleaseVoronoiStorage(CvVoronoiDiagram2D* VoronoiDiagram,\n                                          CvMemStorage** pVoronoiStorage);\n\n/*********************** Linear-Contour Model ****************************/\n\nstruct CvLCMEdge;\nstruct CvLCMNode;\n\ntypedef struct CvLCMEdge\n{\n    CV_GRAPH_EDGE_FIELDS()\n    CvSeq* chain;\n    float width;\n    int index1;\n    int index2;\n} CvLCMEdge;\n\ntypedef struct CvLCMNode\n{\n    CV_GRAPH_VERTEX_FIELDS()\n    CvContour* contour;\n} CvLCMNode;\n\n\n/* Computes hybrid model from Voronoi Diagram */\nCVAPI(CvGraph*) cvLinearContorModelFromVoronoiDiagram(CvVoronoiDiagram2D* VoronoiDiagram,\n                                                         float maxWidth);\n\n/* Releases hybrid model storage */\nCVAPI(int) cvReleaseLinearContorModelStorage(CvGraph** Graph);\n\n\n/* two stereo-related functions */\n\nCVAPI(void) cvInitPerspectiveTransform( CvSize size, const CvPoint2D32f vertex[4], double matrix[3][3],\n                                              CvArr* rectMap );\n\n/*CVAPI(void) cvInitStereoRectification( CvStereoCamera* params,\n                                             CvArr* rectMap1, CvArr* rectMap2,\n                                             int do_undistortion );*/\n\n/*************************** View Morphing Functions ************************/\n\ntypedef struct CvMatrix3\n{\n    float m[3][3];\n} CvMatrix3;\n\n/* The order of the function corresponds to the order they should appear in\n   the view morphing pipeline */\n\n/* Finds ending points of scanlines on left and right images of stereo-pair */\nCVAPI(void)  cvMakeScanlines( const CvMatrix3* matrix, CvSize  img_size,\n                              int*  scanlines1, int*  scanlines2,\n                              int*  lengths1, int*  lengths2,\n                              int*  line_count );\n\n/* Grab pixel values from scanlines and stores them sequentially\n   (some sort of perspective image transform) */\nCVAPI(void)  cvPreWarpImage( int       line_count,\n                             IplImage* img,\n                             uchar*    dst,\n                             int*      dst_nums,\n                             int*      scanlines);\n\n/* Approximate each grabbed scanline by a sequence of runs\n   (lossy run-length compression) */\nCVAPI(void)  cvFindRuns( int    line_count,\n                         uchar* prewarp1,\n                         uchar* prewarp2,\n                         int*   line_lengths1,\n                         int*   line_lengths2,\n                         int*   runs1,\n                         int*   runs2,\n                         int*   num_runs1,\n                         int*   num_runs2);\n\n/* Compares two sets of compressed scanlines */\nCVAPI(void)  cvDynamicCorrespondMulti( int  line_count,\n                                       int* first,\n                                       int* first_runs,\n                                       int* second,\n                                       int* second_runs,\n                                       int* first_corr,\n                                       int* second_corr);\n\n/* Finds scanline ending coordinates for some intermediate \"virtual\" camera position */\nCVAPI(void)  cvMakeAlphaScanlines( int*  scanlines1,\n                                   int*  scanlines2,\n                                   int*  scanlinesA,\n                                   int*  lengths,\n                                   int   line_count,\n                                   float alpha);\n\n/* Blends data of the left and right image scanlines to get\n   pixel values of \"virtual\" image scanlines */\nCVAPI(void)  cvMorphEpilinesMulti( int    line_count,\n                                   uchar* first_pix,\n                                   int*   first_num,\n                                   uchar* second_pix,\n                                   int*   second_num,\n                                   uchar* dst_pix,\n                                   int*   dst_num,\n                                   float  alpha,\n                                   int*   first,\n                                   int*   first_runs,\n                                   int*   second,\n                                   int*   second_runs,\n                                   int*   first_corr,\n                                   int*   second_corr);\n\n/* Does reverse warping of the morphing result to make\n   it fill the destination image rectangle */\nCVAPI(void)  cvPostWarpImage( int       line_count,\n                              uchar*    src,\n                              int*      src_nums,\n                              IplImage* img,\n                              int*      scanlines);\n\n/* Deletes Moire (missed pixels that appear due to discretization) */\nCVAPI(void)  cvDeleteMoire( IplImage*  img );\n\n\ntypedef struct CvConDensation\n{\n    int MP;\n    int DP;\n    float* DynamMatr;       /* Matrix of the linear Dynamics system  */\n    float* State;           /* Vector of State                       */\n    int SamplesNum;         /* Number of the Samples                 */\n    float** flSamples;      /* arr of the Sample Vectors             */\n    float** flNewSamples;   /* temporary array of the Sample Vectors */\n    float* flConfidence;    /* Confidence for each Sample            */\n    float* flCumulative;    /* Cumulative confidence                 */\n    float* Temp;            /* Temporary vector                      */\n    float* RandomSample;    /* RandomVector to update sample set     */\n    struct CvRandState* RandS; /* Array of structures to generate random vectors */\n} CvConDensation;\n\n/* Creates ConDensation filter state */\nCVAPI(CvConDensation*)  cvCreateConDensation( int dynam_params,\n                                             int measure_params,\n                                             int sample_count );\n\n/* Releases ConDensation filter state */\nCVAPI(void)  cvReleaseConDensation( CvConDensation** condens );\n\n/* Updates ConDensation filter by time (predict future state of the system) */\nCVAPI(void)  cvConDensUpdateByTime( CvConDensation* condens);\n\n/* Initializes ConDensation filter samples  */\nCVAPI(void)  cvConDensInitSampleSet( CvConDensation* condens, CvMat* lower_bound, CvMat* upper_bound );\n\nCV_INLINE int iplWidth( const IplImage* img )\n{\n    return !img ? 0 : !img->roi ? img->width : img->roi->width;\n}\n\nCV_INLINE int iplHeight( const IplImage* img )\n{\n    return !img ? 0 : !img->roi ? img->height : img->roi->height;\n}\n\n#ifdef __cplusplus\n}\n#endif\n\n#ifdef __cplusplus\n\n/****************************************************************************************\\\n*                                   Calibration engine                                   *\n\\****************************************************************************************/\n\ntypedef enum CvCalibEtalonType\n{\n    CV_CALIB_ETALON_USER = -1,\n    CV_CALIB_ETALON_CHESSBOARD = 0,\n    CV_CALIB_ETALON_CHECKERBOARD = CV_CALIB_ETALON_CHESSBOARD\n}\nCvCalibEtalonType;\n\nclass CV_EXPORTS CvCalibFilter\n{\npublic:\n    /* Constructor & destructor */\n    CvCalibFilter();\n    virtual ~CvCalibFilter();\n\n    /* Sets etalon type - one for all cameras.\n       etalonParams is used in case of pre-defined etalons (such as chessboard).\n       Number of elements in etalonParams is determined by etalonType.\n       E.g., if etalon type is CV_ETALON_TYPE_CHESSBOARD then:\n         etalonParams[0] is number of squares per one side of etalon\n         etalonParams[1] is number of squares per another side of etalon\n         etalonParams[2] is linear size of squares in the board in arbitrary units.\n       pointCount & points are used in case of\n       CV_CALIB_ETALON_USER (user-defined) etalon. */\n    virtual bool\n        SetEtalon( CvCalibEtalonType etalonType, double* etalonParams,\n                   int pointCount = 0, CvPoint2D32f* points = 0 );\n\n    /* Retrieves etalon parameters/or and points */\n    virtual CvCalibEtalonType\n        GetEtalon( int* paramCount = 0, const double** etalonParams = 0,\n                   int* pointCount = 0, const CvPoint2D32f** etalonPoints = 0 ) const;\n\n    /* Sets number of cameras calibrated simultaneously. It is equal to 1 initially */\n    virtual void SetCameraCount( int cameraCount );\n\n    /* Retrieves number of cameras */\n    int GetCameraCount() const { return cameraCount; }\n\n    /* Starts cameras calibration */\n    virtual bool SetFrames( int totalFrames );\n\n    /* Stops cameras calibration */\n    virtual void Stop( bool calibrate = false );\n\n    /* Retrieves number of cameras */\n    bool IsCalibrated() const { return isCalibrated; }\n\n    /* Feeds another serie of snapshots (one per each camera) to filter.\n       Etalon points on these images are found automatically.\n       If the function can't locate points, it returns false */\n    virtual bool FindEtalon( IplImage** imgs );\n\n    /* The same but takes matrices */\n    virtual bool FindEtalon( CvMat** imgs );\n\n    /* Lower-level function for feeding filter with already found etalon points.\n       Array of point arrays for each camera is passed. */\n    virtual bool Push( const CvPoint2D32f** points = 0 );\n\n    /* Returns total number of accepted frames and, optionally,\n       total number of frames to collect */\n    virtual int GetFrameCount( int* framesTotal = 0 ) const;\n\n    /* Retrieves camera parameters for specified camera.\n       If camera is not calibrated the function returns 0 */\n    virtual const CvCamera* GetCameraParams( int idx = 0 ) const;\n\n    virtual const CvStereoCamera* GetStereoParams() const;\n\n    /* Sets camera parameters for all cameras */\n    virtual bool SetCameraParams( CvCamera* params );\n\n    /* Saves all camera parameters to file */\n    virtual bool SaveCameraParams( const char* filename );\n\n    /* Loads all camera parameters from file */\n    virtual bool LoadCameraParams( const char* filename );\n\n    /* Undistorts images using camera parameters. Some of src pointers can be NULL. */\n    virtual bool Undistort( IplImage** src, IplImage** dst );\n\n    /* Undistorts images using camera parameters. Some of src pointers can be NULL. */\n    virtual bool Undistort( CvMat** src, CvMat** dst );\n\n    /* Returns array of etalon points detected/partally detected\n       on the latest frame for idx-th camera */\n    virtual bool GetLatestPoints( int idx, CvPoint2D32f** pts,\n                                                  int* count, bool* found );\n\n    /* Draw the latest detected/partially detected etalon */\n    virtual void DrawPoints( IplImage** dst );\n\n    /* Draw the latest detected/partially detected etalon */\n    virtual void DrawPoints( CvMat** dst );\n\n    virtual bool Rectify( IplImage** srcarr, IplImage** dstarr );\n    virtual bool Rectify( CvMat** srcarr, CvMat** dstarr );\n\nprotected:\n\n    enum { MAX_CAMERAS = 3 };\n\n    /* etalon data */\n    CvCalibEtalonType  etalonType;\n    int     etalonParamCount;\n    double* etalonParams;\n    int     etalonPointCount;\n    CvPoint2D32f* etalonPoints;\n    CvSize  imgSize;\n    CvMat*  grayImg;\n    CvMat*  tempImg;\n    CvMemStorage* storage;\n\n    /* camera data */\n    int     cameraCount;\n    CvCamera cameraParams[MAX_CAMERAS];\n    CvStereoCamera stereo;\n    CvPoint2D32f* points[MAX_CAMERAS];\n    CvMat*  undistMap[MAX_CAMERAS][2];\n    CvMat*  undistImg;\n    int     latestCounts[MAX_CAMERAS];\n    CvPoint2D32f* latestPoints[MAX_CAMERAS];\n    CvMat*  rectMap[MAX_CAMERAS][2];\n\n    /* Added by Valery */\n    //CvStereoCamera stereoParams;\n\n    int     maxPoints;\n    int     framesTotal;\n    int     framesAccepted;\n    bool    isCalibrated;\n};\n\n#include <iosfwd>\n#include <limits>\n\nclass CV_EXPORTS CvImage\n{\npublic:\n    CvImage() : image(0), refcount(0) {}\n    CvImage( CvSize _size, int _depth, int _channels )\n    {\n        image = cvCreateImage( _size, _depth, _channels );\n        refcount = image ? new int(1) : 0;\n    }\n\n    CvImage( IplImage* img ) : image(img)\n    {\n        refcount = image ? new int(1) : 0;\n    }\n\n    CvImage( const CvImage& img ) : image(img.image), refcount(img.refcount)\n    {\n        if( refcount ) ++(*refcount);\n    }\n\n    CvImage( const char* filename, const char* imgname=0, int color=-1 ) : image(0), refcount(0)\n    { load( filename, imgname, color ); }\n\n    CvImage( CvFileStorage* fs, const char* mapname, const char* imgname ) : image(0), refcount(0)\n    { read( fs, mapname, imgname ); }\n\n    CvImage( CvFileStorage* fs, const char* seqname, int idx ) : image(0), refcount(0)\n    { read( fs, seqname, idx ); }\n\n    ~CvImage()\n    {\n        if( refcount && !(--*refcount) )\n        {\n            cvReleaseImage( &image );\n            delete refcount;\n        }\n    }\n\n    CvImage clone() { return CvImage(image ? cvCloneImage(image) : 0); }\n\n    void create( CvSize _size, int _depth, int _channels )\n    {\n        if( !image || !refcount ||\n           image->width != _size.width || image->height != _size.height ||\n           image->depth != _depth || image->nChannels != _channels )\n            attach( cvCreateImage( _size, _depth, _channels ));\n    }\n\n    void release() { detach(); }\n    void clear() { detach(); }\n\n    void attach( IplImage* img, bool use_refcount=true )\n    {\n        if( refcount && --*refcount == 0 )\n        {\n            cvReleaseImage( &image );\n            delete refcount;\n        }\n        image = img;\n        refcount = use_refcount && image ? new int(1) : 0;\n    }\n\n    void detach()\n    {\n        if( refcount && --*refcount == 0 )\n        {\n            cvReleaseImage( &image );\n            delete refcount;\n        }\n        image = 0;\n        refcount = 0;\n    }\n\n    bool load( const char* filename, const char* imgname=0, int color=-1 );\n    bool read( CvFileStorage* fs, const char* mapname, const char* imgname );\n    bool read( CvFileStorage* fs, const char* seqname, int idx );\n    void save( const char* filename, const char* imgname, const int* params=0 );\n    void write( CvFileStorage* fs, const char* imgname );\n\n    void show( const char* window_name );\n    bool is_valid() { return image != 0; }\n\n    int width() const { return image ? image->width : 0; }\n    int height() const { return image ? image->height : 0; }\n\n    CvSize size() const { return image ? cvSize(image->width, image->height) : cvSize(0,0); }\n\n    CvSize roi_size() const\n    {\n        return !image ? cvSize(0,0) :\n        !image->roi ? cvSize(image->width,image->height) :\n        cvSize(image->roi->width, image->roi->height);\n    }\n\n    CvRect roi() const\n    {\n        return !image ? cvRect(0,0,0,0) :\n        !image->roi ? cvRect(0,0,image->width,image->height) :\n        cvRect(image->roi->xOffset,image->roi->yOffset,\n               image->roi->width,image->roi->height);\n    }\n\n    int coi() const { return !image || !image->roi ? 0 : image->roi->coi; }\n\n    void set_roi(CvRect _roi) { cvSetImageROI(image,_roi); }\n    void reset_roi() { cvResetImageROI(image); }\n    void set_coi(int _coi) { cvSetImageCOI(image,_coi); }\n    int depth() const { return image ? image->depth : 0; }\n    int channels() const { return image ? image->nChannels : 0; }\n    int pix_size() const { return image ? ((image->depth & 255)>>3)*image->nChannels : 0; }\n\n    uchar* data() { return image ? (uchar*)image->imageData : 0; }\n    const uchar* data() const { return image ? (const uchar*)image->imageData : 0; }\n    int step() const { return image ? image->widthStep : 0; }\n    int origin() const { return image ? image->origin : 0; }\n\n    uchar* roi_row(int y)\n    {\n        assert(0<=y);\n        assert(!image ?\n               1 : image->roi ?\n               y<image->roi->height : y<image->height);\n\n        return !image ? 0 :\n        !image->roi ?\n        (uchar*)(image->imageData + y*image->widthStep) :\n        (uchar*)(image->imageData + (y+image->roi->yOffset)*image->widthStep +\n                 image->roi->xOffset*((image->depth & 255)>>3)*image->nChannels);\n    }\n\n    const uchar* roi_row(int y) const\n    {\n        assert(0<=y);\n        assert(!image ?\n               1 : image->roi ?\n               y<image->roi->height : y<image->height);\n\n        return !image ? 0 :\n        !image->roi ?\n        (const uchar*)(image->imageData + y*image->widthStep) :\n        (const uchar*)(image->imageData + (y+image->roi->yOffset)*image->widthStep +\n                       image->roi->xOffset*((image->depth & 255)>>3)*image->nChannels);\n    }\n\n    operator const IplImage* () const { return image; }\n    operator IplImage* () { return image; }\n\n    CvImage& operator = (const CvImage& img)\n    {\n        if( img.refcount )\n            ++*img.refcount;\n        if( refcount && !(--*refcount) )\n            cvReleaseImage( &image );\n        image=img.image;\n        refcount=img.refcount;\n        return *this;\n    }\n\nprotected:\n    IplImage* image;\n    int* refcount;\n};\n\n\nclass CV_EXPORTS CvMatrix\n{\npublic:\n    CvMatrix() : matrix(0) {}\n    CvMatrix( int _rows, int _cols, int _type )\n    { matrix = cvCreateMat( _rows, _cols, _type ); }\n\n    CvMatrix( int _rows, int _cols, int _type, CvMat* hdr,\n             void* _data=0, int _step=CV_AUTOSTEP )\n    { matrix = cvInitMatHeader( hdr, _rows, _cols, _type, _data, _step ); }\n\n    CvMatrix( int rows, int cols, int type, CvMemStorage* storage, bool alloc_data=true );\n\n    CvMatrix( int _rows, int _cols, int _type, void* _data, int _step=CV_AUTOSTEP )\n    { matrix = cvCreateMatHeader( _rows, _cols, _type );\n        cvSetData( matrix, _data, _step ); }\n\n    CvMatrix( CvMat* m )\n    { matrix = m; }\n\n    CvMatrix( const CvMatrix& m )\n    {\n        matrix = m.matrix;\n        addref();\n    }\n\n    CvMatrix( const char* filename, const char* matname=0, int color=-1 ) : matrix(0)\n    {  load( filename, matname, color ); }\n\n    CvMatrix( CvFileStorage* fs, const char* mapname, const char* matname ) : matrix(0)\n    {  read( fs, mapname, matname ); }\n\n    CvMatrix( CvFileStorage* fs, const char* seqname, int idx ) : matrix(0)\n    {  read( fs, seqname, idx ); }\n\n    ~CvMatrix()\n    {\n        release();\n    }\n\n    CvMatrix clone() { return CvMatrix(matrix ? cvCloneMat(matrix) : 0); }\n\n    void set( CvMat* m, bool add_ref )\n    {\n        release();\n        matrix = m;\n        if( add_ref )\n            addref();\n    }\n\n    void create( int _rows, int _cols, int _type )\n    {\n        if( !matrix || !matrix->refcount ||\n           matrix->rows != _rows || matrix->cols != _cols ||\n           CV_MAT_TYPE(matrix->type) != _type )\n            set( cvCreateMat( _rows, _cols, _type ), false );\n    }\n\n    void addref() const\n    {\n        if( matrix )\n        {\n            if( matrix->hdr_refcount )\n                ++matrix->hdr_refcount;\n            else if( matrix->refcount )\n                ++*matrix->refcount;\n        }\n    }\n\n    void release()\n    {\n        if( matrix )\n        {\n            if( matrix->hdr_refcount )\n            {\n                if( --matrix->hdr_refcount == 0 )\n                    cvReleaseMat( &matrix );\n            }\n            else if( matrix->refcount )\n            {\n                if( --*matrix->refcount == 0 )\n                    cvFree( &matrix->refcount );\n            }\n            matrix = 0;\n        }\n    }\n\n    void clear()\n    {\n        release();\n    }\n\n    bool load( const char* filename, const char* matname=0, int color=-1 );\n    bool read( CvFileStorage* fs, const char* mapname, const char* matname );\n    bool read( CvFileStorage* fs, const char* seqname, int idx );\n    void save( const char* filename, const char* matname, const int* params=0 );\n    void write( CvFileStorage* fs, const char* matname );\n\n    void show( const char* window_name );\n\n    bool is_valid() { return matrix != 0; }\n\n    int rows() const { return matrix ? matrix->rows : 0; }\n    int cols() const { return matrix ? matrix->cols : 0; }\n\n    CvSize size() const\n    {\n        return !matrix ? cvSize(0,0) : cvSize(matrix->rows,matrix->cols);\n    }\n\n    int type() const { return matrix ? CV_MAT_TYPE(matrix->type) : 0; }\n    int depth() const { return matrix ? CV_MAT_DEPTH(matrix->type) : 0; }\n    int channels() const { return matrix ? CV_MAT_CN(matrix->type) : 0; }\n    int pix_size() const { return matrix ? CV_ELEM_SIZE(matrix->type) : 0; }\n\n    uchar* data() { return matrix ? matrix->data.ptr : 0; }\n    const uchar* data() const { return matrix ? matrix->data.ptr : 0; }\n    int step() const { return matrix ? matrix->step : 0; }\n\n    void set_data( void* _data, int _step=CV_AUTOSTEP )\n    { cvSetData( matrix, _data, _step ); }\n\n    uchar* row(int i) { return !matrix ? 0 : matrix->data.ptr + i*matrix->step; }\n    const uchar* row(int i) const\n    { return !matrix ? 0 : matrix->data.ptr + i*matrix->step; }\n\n    operator const CvMat* () const { return matrix; }\n    operator CvMat* () { return matrix; }\n\n    CvMatrix& operator = (const CvMatrix& _m)\n    {\n        _m.addref();\n        release();\n        matrix = _m.matrix;\n        return *this;\n    }\n\nprotected:\n    CvMat* matrix;\n};\n\n/****************************************************************************************\\\n *                                       CamShiftTracker                                  *\n \\****************************************************************************************/\n\nclass CV_EXPORTS CvCamShiftTracker\n{\npublic:\n\n    CvCamShiftTracker();\n    virtual ~CvCamShiftTracker();\n\n    /**** Characteristics of the object that are calculated by track_object method *****/\n    float   get_orientation() const // orientation of the object in degrees\n    { return m_box.angle; }\n    float   get_length() const // the larger linear size of the object\n    { return m_box.size.height; }\n    float   get_width() const // the smaller linear size of the object\n    { return m_box.size.width; }\n    CvPoint2D32f get_center() const // center of the object\n    { return m_box.center; }\n    CvRect get_window() const // bounding rectangle for the object\n    { return m_comp.rect; }\n\n    /*********************** Tracking parameters ************************/\n    int     get_threshold() const // thresholding value that applied to back project\n    { return m_threshold; }\n\n    int     get_hist_dims( int* dims = 0 ) const // returns number of histogram dimensions and sets\n    { return m_hist ? cvGetDims( m_hist->bins, dims ) : 0; }\n\n    int     get_min_ch_val( int channel ) const // get the minimum allowed value of the specified channel\n    { return m_min_ch_val[channel]; }\n\n    int     get_max_ch_val( int channel ) const // get the maximum allowed value of the specified channel\n    { return m_max_ch_val[channel]; }\n\n    // set initial object rectangle (must be called before initial calculation of the histogram)\n    bool    set_window( CvRect window)\n    { m_comp.rect = window; return true; }\n\n    bool    set_threshold( int threshold ) // threshold applied to the histogram bins\n    { m_threshold = threshold; return true; }\n\n    bool    set_hist_bin_range( int dim, int min_val, int max_val );\n\n    bool    set_hist_dims( int c_dims, int* dims );// set the histogram parameters\n\n    bool    set_min_ch_val( int channel, int val ) // set the minimum allowed value of the specified channel\n    { m_min_ch_val[channel] = val; return true; }\n    bool    set_max_ch_val( int channel, int val ) // set the maximum allowed value of the specified channel\n    { m_max_ch_val[channel] = val; return true; }\n\n    /************************ The processing methods *********************************/\n    // update object position\n    virtual bool  track_object( const IplImage* cur_frame );\n\n    // update object histogram\n    virtual bool  update_histogram( const IplImage* cur_frame );\n\n    // reset histogram\n    virtual void  reset_histogram();\n\n    /************************ Retrieving internal data *******************************/\n    // get back project image\n    virtual IplImage* get_back_project()\n    { return m_back_project; }\n\n    float query( int* bin ) const\n    { return m_hist ? (float)cvGetRealND(m_hist->bins, bin) : 0.f; }\n\nprotected:\n\n    // internal method for color conversion: fills m_color_planes group\n    virtual void color_transform( const IplImage* img );\n\n    CvHistogram* m_hist;\n\n    CvBox2D    m_box;\n    CvConnectedComp m_comp;\n\n    float      m_hist_ranges_data[CV_MAX_DIM][2];\n    float*     m_hist_ranges[CV_MAX_DIM];\n\n    int        m_min_ch_val[CV_MAX_DIM];\n    int        m_max_ch_val[CV_MAX_DIM];\n    int        m_threshold;\n\n    IplImage*  m_color_planes[CV_MAX_DIM];\n    IplImage*  m_back_project;\n    IplImage*  m_temp;\n    IplImage*  m_mask;\n};\n\n/****************************************************************************************\\\n*                              Expectation - Maximization                                *\n\\****************************************************************************************/\nstruct CV_EXPORTS_W_MAP CvEMParams\n{\n    CvEMParams();\n    CvEMParams( int nclusters, int cov_mat_type=cv::EM::COV_MAT_DIAGONAL,\n                int start_step=cv::EM::START_AUTO_STEP,\n                CvTermCriteria term_crit=cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 100, FLT_EPSILON),\n                const CvMat* probs=0, const CvMat* weights=0, const CvMat* means=0, const CvMat** covs=0 );\n\n    CV_PROP_RW int nclusters;\n    CV_PROP_RW int cov_mat_type;\n    CV_PROP_RW int start_step;\n    const CvMat* probs;\n    const CvMat* weights;\n    const CvMat* means;\n    const CvMat** covs;\n    CV_PROP_RW CvTermCriteria term_crit;\n};\n\n\nclass CV_EXPORTS_W CvEM : public CvStatModel\n{\npublic:\n    // Type of covariation matrices\n    enum { COV_MAT_SPHERICAL=cv::EM::COV_MAT_SPHERICAL,\n           COV_MAT_DIAGONAL =cv::EM::COV_MAT_DIAGONAL,\n           COV_MAT_GENERIC  =cv::EM::COV_MAT_GENERIC };\n\n    // The initial step\n    enum { START_E_STEP=cv::EM::START_E_STEP,\n           START_M_STEP=cv::EM::START_M_STEP,\n           START_AUTO_STEP=cv::EM::START_AUTO_STEP };\n\n    CV_WRAP CvEM();\n    CvEM( const CvMat* samples, const CvMat* sampleIdx=0,\n          CvEMParams params=CvEMParams(), CvMat* labels=0 );\n\n    virtual ~CvEM();\n\n    virtual bool train( const CvMat* samples, const CvMat* sampleIdx=0,\n                        CvEMParams params=CvEMParams(), CvMat* labels=0 );\n\n    virtual float predict( const CvMat* sample, CV_OUT CvMat* probs ) const;\n\n    CV_WRAP CvEM( const cv::Mat& samples, const cv::Mat& sampleIdx=cv::Mat(),\n                  CvEMParams params=CvEMParams() );\n\n    CV_WRAP virtual bool train( const cv::Mat& samples,\n                                const cv::Mat& sampleIdx=cv::Mat(),\n                                CvEMParams params=CvEMParams(),\n                                CV_OUT cv::Mat* labels=0 );\n\n    CV_WRAP virtual float predict( const cv::Mat& sample, CV_OUT cv::Mat* probs=0 ) const;\n    CV_WRAP virtual double calcLikelihood( const cv::Mat &sample ) const;\n\n    CV_WRAP int getNClusters() const;\n    CV_WRAP cv::Mat getMeans() const;\n    CV_WRAP void getCovs(CV_OUT std::vector<cv::Mat>& covs) const;\n    CV_WRAP cv::Mat getWeights() const;\n    CV_WRAP cv::Mat getProbs() const;\n\n    CV_WRAP inline double getLikelihood() const { return emObj.isTrained() ? logLikelihood : DBL_MAX; }\n\n    CV_WRAP virtual void clear();\n\n    int get_nclusters() const;\n    const CvMat* get_means() const;\n    const CvMat** get_covs() const;\n    const CvMat* get_weights() const;\n    const CvMat* get_probs() const;\n\n    inline double get_log_likelihood() const { return getLikelihood(); }\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void write( CvFileStorage* fs, const char* name ) const;\n\nprotected:\n    void set_mat_hdrs();\n\n    cv::EM emObj;\n    cv::Mat probs;\n    double logLikelihood;\n\n    CvMat meansHdr;\n    std::vector<CvMat> covsHdrs;\n    std::vector<CvMat*> covsPtrs;\n    CvMat weightsHdr;\n    CvMat probsHdr;\n};\n\nnamespace cv\n{\n\ntypedef CvEMParams EMParams;\ntypedef CvEM ExpectationMaximization;\n\n/*!\n The Patch Generator class\n */\nclass CV_EXPORTS PatchGenerator\n{\npublic:\n    PatchGenerator();\n    PatchGenerator(double _backgroundMin, double _backgroundMax,\n                   double _noiseRange, bool _randomBlur=true,\n                   double _lambdaMin=0.6, double _lambdaMax=1.5,\n                   double _thetaMin=-CV_PI, double _thetaMax=CV_PI,\n                   double _phiMin=-CV_PI, double _phiMax=CV_PI );\n    void operator()(const Mat& image, Point2f pt, Mat& patch, Size patchSize, RNG& rng) const;\n    void operator()(const Mat& image, const Mat& transform, Mat& patch,\n                    Size patchSize, RNG& rng) const;\n    void warpWholeImage(const Mat& image, Mat& matT, Mat& buf,\n                        CV_OUT Mat& warped, int border, RNG& rng) const;\n    void generateRandomTransform(Point2f srcCenter, Point2f dstCenter,\n                                 CV_OUT Mat& transform, RNG& rng,\n                                 bool inverse=false) const;\n    void setAffineParam(double lambda, double theta, double phi);\n\n    double backgroundMin, backgroundMax;\n    double noiseRange;\n    bool randomBlur;\n    double lambdaMin, lambdaMax;\n    double thetaMin, thetaMax;\n    double phiMin, phiMax;\n};\n\n\nclass CV_EXPORTS LDetector\n{\npublic:\n    LDetector();\n    LDetector(int _radius, int _threshold, int _nOctaves,\n              int _nViews, double _baseFeatureSize, double _clusteringDistance);\n    void operator()(const Mat& image,\n                    CV_OUT vector<KeyPoint>& keypoints,\n                    int maxCount=0, bool scaleCoords=true) const;\n    void operator()(const vector<Mat>& pyr,\n                    CV_OUT vector<KeyPoint>& keypoints,\n                    int maxCount=0, bool scaleCoords=true) const;\n    void getMostStable2D(const Mat& image, CV_OUT vector<KeyPoint>& keypoints,\n                         int maxCount, const PatchGenerator& patchGenerator) const;\n    void setVerbose(bool verbose);\n\n    void read(const FileNode& node);\n    void write(FileStorage& fs, const String& name=String()) const;\n\n    int radius;\n    int threshold;\n    int nOctaves;\n    int nViews;\n    bool verbose;\n\n    double baseFeatureSize;\n    double clusteringDistance;\n};\n\ntypedef LDetector YAPE;\n\nclass CV_EXPORTS FernClassifier\n{\npublic:\n    FernClassifier();\n    FernClassifier(const FileNode& node);\n    FernClassifier(const vector<vector<Point2f> >& points,\n                   const vector<Mat>& refimgs,\n                   const vector<vector<int> >& labels=vector<vector<int> >(),\n                   int _nclasses=0, int _patchSize=PATCH_SIZE,\n                   int _signatureSize=DEFAULT_SIGNATURE_SIZE,\n                   int _nstructs=DEFAULT_STRUCTS,\n                   int _structSize=DEFAULT_STRUCT_SIZE,\n                   int _nviews=DEFAULT_VIEWS,\n                   int _compressionMethod=COMPRESSION_NONE,\n                   const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual ~FernClassifier();\n    virtual void read(const FileNode& n);\n    virtual void write(FileStorage& fs, const String& name=String()) const;\n    virtual void trainFromSingleView(const Mat& image,\n                                     const vector<KeyPoint>& keypoints,\n                                     int _patchSize=PATCH_SIZE,\n                                     int _signatureSize=DEFAULT_SIGNATURE_SIZE,\n                                     int _nstructs=DEFAULT_STRUCTS,\n                                     int _structSize=DEFAULT_STRUCT_SIZE,\n                                     int _nviews=DEFAULT_VIEWS,\n                                     int _compressionMethod=COMPRESSION_NONE,\n                                     const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual void train(const vector<vector<Point2f> >& points,\n                       const vector<Mat>& refimgs,\n                       const vector<vector<int> >& labels=vector<vector<int> >(),\n                       int _nclasses=0, int _patchSize=PATCH_SIZE,\n                       int _signatureSize=DEFAULT_SIGNATURE_SIZE,\n                       int _nstructs=DEFAULT_STRUCTS,\n                       int _structSize=DEFAULT_STRUCT_SIZE,\n                       int _nviews=DEFAULT_VIEWS,\n                       int _compressionMethod=COMPRESSION_NONE,\n                       const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual int operator()(const Mat& img, Point2f kpt, vector<float>& signature) const;\n    virtual int operator()(const Mat& patch, vector<float>& signature) const;\n    virtual void clear();\n    virtual bool empty() const;\n    void setVerbose(bool verbose);\n\n    int getClassCount() const;\n    int getStructCount() const;\n    int getStructSize() const;\n    int getSignatureSize() const;\n    int getCompressionMethod() const;\n    Size getPatchSize() const;\n\n    struct Feature\n    {\n        uchar x1, y1, x2, y2;\n        Feature() : x1(0), y1(0), x2(0), y2(0) {}\n        Feature(int _x1, int _y1, int _x2, int _y2)\n        : x1((uchar)_x1), y1((uchar)_y1), x2((uchar)_x2), y2((uchar)_y2)\n        {}\n        template<typename _Tp> bool operator ()(const Mat_<_Tp>& patch) const\n        { return patch(y1,x1) > patch(y2, x2); }\n    };\n\n    enum\n    {\n        PATCH_SIZE = 31,\n        DEFAULT_STRUCTS = 50,\n        DEFAULT_STRUCT_SIZE = 9,\n        DEFAULT_VIEWS = 5000,\n        DEFAULT_SIGNATURE_SIZE = 176,\n        COMPRESSION_NONE = 0,\n        COMPRESSION_RANDOM_PROJ = 1,\n        COMPRESSION_PCA = 2,\n        DEFAULT_COMPRESSION_METHOD = COMPRESSION_NONE\n    };\n\nprotected:\n    virtual void prepare(int _nclasses, int _patchSize, int _signatureSize,\n                         int _nstructs, int _structSize,\n                         int _nviews, int _compressionMethod);\n    virtual void finalize(RNG& rng);\n    virtual int getLeaf(int fidx, const Mat& patch) const;\n\n    bool verbose;\n    int nstructs;\n    int structSize;\n    int nclasses;\n    int signatureSize;\n    int compressionMethod;\n    int leavesPerStruct;\n    Size patchSize;\n    vector<Feature> features;\n    vector<int> classCounters;\n    vector<float> posteriors;\n};\n\n\n/****************************************************************************************\\\n *                                 Calonder Classifier                                    *\n \\****************************************************************************************/\n\nstruct RTreeNode;\n\nstruct CV_EXPORTS BaseKeypoint\n{\n    int x;\n    int y;\n    IplImage* image;\n\n    BaseKeypoint()\n    : x(0), y(0), image(NULL)\n    {}\n\n    BaseKeypoint(int _x, int _y, IplImage* _image)\n    : x(_x), y(_y), image(_image)\n    {}\n};\n\nclass CV_EXPORTS RandomizedTree\n{\npublic:\n    friend class RTreeClassifier;\n\n    static const uchar PATCH_SIZE = 32;\n    static const int DEFAULT_DEPTH = 9;\n    static const int DEFAULT_VIEWS = 5000;\n    static const size_t DEFAULT_REDUCED_NUM_DIM = 176;\n    static float GET_LOWER_QUANT_PERC() { return .03f; }\n    static float GET_UPPER_QUANT_PERC() { return .92f; }\n\n    RandomizedTree();\n    ~RandomizedTree();\n\n    void train(vector<BaseKeypoint> const& base_set, RNG &rng,\n               int depth, int views, size_t reduced_num_dim, int num_quant_bits);\n    void train(vector<BaseKeypoint> const& base_set, RNG &rng,\n               PatchGenerator &make_patch, int depth, int views, size_t reduced_num_dim,\n               int num_quant_bits);\n\n    // following two funcs are EXPERIMENTAL (do not use unless you know exactly what you do)\n    static void quantizeVector(float *vec, int dim, int N, float bnds[2], int clamp_mode=0);\n    static void quantizeVector(float *src, int dim, int N, float bnds[2], uchar *dst);\n\n    // patch_data must be a 32x32 array (no row padding)\n    float* getPosterior(uchar* patch_data);\n    const float* getPosterior(uchar* patch_data) const;\n    uchar* getPosterior2(uchar* patch_data);\n    const uchar* getPosterior2(uchar* patch_data) const;\n\n    void read(const char* file_name, int num_quant_bits);\n    void read(std::istream &is, int num_quant_bits);\n    void write(const char* file_name) const;\n    void write(std::ostream &os) const;\n\n    int classes() { return classes_; }\n    int depth() { return depth_; }\n\n    //void setKeepFloatPosteriors(bool b) { keep_float_posteriors_ = b; }\n    void discardFloatPosteriors() { freePosteriors(1); }\n\n    inline void applyQuantization(int num_quant_bits) { makePosteriors2(num_quant_bits); }\n\n    // debug\n    void savePosteriors(std::string url, bool append=false);\n    void savePosteriors2(std::string url, bool append=false);\n\nprivate:\n    int classes_;\n    int depth_;\n    int num_leaves_;\n    vector<RTreeNode> nodes_;\n    float **posteriors_;        // 16-bytes aligned posteriors\n    uchar **posteriors2_;     // 16-bytes aligned posteriors\n    vector<int> leaf_counts_;\n\n    void createNodes(int num_nodes, RNG &rng);\n    void allocPosteriorsAligned(int num_leaves, int num_classes);\n    void freePosteriors(int which);    // which: 1=posteriors_, 2=posteriors2_, 3=both\n    void init(int classes, int depth, RNG &rng);\n    void addExample(int class_id, uchar* patch_data);\n    void finalize(size_t reduced_num_dim, int num_quant_bits);\n    int getIndex(uchar* patch_data) const;\n    inline float* getPosteriorByIndex(int index);\n    inline const float* getPosteriorByIndex(int index) const;\n    inline uchar* getPosteriorByIndex2(int index);\n    inline const uchar* getPosteriorByIndex2(int index) const;\n    //void makeRandomMeasMatrix(float *cs_phi, PHI_DISTR_TYPE dt, size_t reduced_num_dim);\n    void convertPosteriorsToChar();\n    void makePosteriors2(int num_quant_bits);\n    void compressLeaves(size_t reduced_num_dim);\n    void estimateQuantPercForPosteriors(float perc[2]);\n};\n\n\ninline uchar* getData(IplImage* image)\n{\n    return reinterpret_cast<uchar*>(image->imageData);\n}\n\ninline float* RandomizedTree::getPosteriorByIndex(int index)\n{\n    return const_cast<float*>(const_cast<const RandomizedTree*>(this)->getPosteriorByIndex(index));\n}\n\ninline const float* RandomizedTree::getPosteriorByIndex(int index) const\n{\n    return posteriors_[index];\n}\n\ninline uchar* RandomizedTree::getPosteriorByIndex2(int index)\n{\n    return const_cast<uchar*>(const_cast<const RandomizedTree*>(this)->getPosteriorByIndex2(index));\n}\n\ninline const uchar* RandomizedTree::getPosteriorByIndex2(int index) const\n{\n    return posteriors2_[index];\n}\n\nstruct CV_EXPORTS RTreeNode\n{\n    short offset1, offset2;\n\n    RTreeNode() {}\n    RTreeNode(uchar x1, uchar y1, uchar x2, uchar y2)\n    : offset1(y1*RandomizedTree::PATCH_SIZE + x1),\n    offset2(y2*RandomizedTree::PATCH_SIZE + x2)\n    {}\n\n    //! Left child on 0, right child on 1\n    inline bool operator() (uchar* patch_data) const\n    {\n        return patch_data[offset1] > patch_data[offset2];\n    }\n};\n\nclass CV_EXPORTS RTreeClassifier\n{\npublic:\n    static const int DEFAULT_TREES = 48;\n    static const size_t DEFAULT_NUM_QUANT_BITS = 4;\n\n    RTreeClassifier();\n    void train(vector<BaseKeypoint> const& base_set,\n               RNG &rng,\n               int num_trees = RTreeClassifier::DEFAULT_TREES,\n               int depth = RandomizedTree::DEFAULT_DEPTH,\n               int views = RandomizedTree::DEFAULT_VIEWS,\n               size_t reduced_num_dim = RandomizedTree::DEFAULT_REDUCED_NUM_DIM,\n               int num_quant_bits = DEFAULT_NUM_QUANT_BITS);\n    void train(vector<BaseKeypoint> const& base_set,\n               RNG &rng,\n               PatchGenerator &make_patch,\n               int num_trees = RTreeClassifier::DEFAULT_TREES,\n               int depth = RandomizedTree::DEFAULT_DEPTH,\n               int views = RandomizedTree::DEFAULT_VIEWS,\n               size_t reduced_num_dim = RandomizedTree::DEFAULT_REDUCED_NUM_DIM,\n               int num_quant_bits = DEFAULT_NUM_QUANT_BITS);\n\n    // sig must point to a memory block of at least classes()*sizeof(float|uchar) bytes\n    void getSignature(IplImage *patch, uchar *sig) const;\n    void getSignature(IplImage *patch, float *sig) const;\n    void getSparseSignature(IplImage *patch, float *sig, float thresh) const;\n    // TODO: deprecated in favor of getSignature overload, remove\n    void getFloatSignature(IplImage *patch, float *sig) const { getSignature(patch, sig); }\n\n    static int countNonZeroElements(float *vec, int n, double tol=1e-10);\n    static inline void safeSignatureAlloc(uchar **sig, int num_sig=1, int sig_len=176);\n    static inline uchar* safeSignatureAlloc(int num_sig=1, int sig_len=176);\n\n    inline int classes() const { return classes_; }\n    inline int original_num_classes() const { return original_num_classes_; }\n\n    void setQuantization(int num_quant_bits);\n    void discardFloatPosteriors();\n\n    void read(const char* file_name);\n    void read(std::istream &is);\n    void write(const char* file_name) const;\n    void write(std::ostream &os) const;\n\n    // experimental and debug\n    void saveAllFloatPosteriors(std::string file_url);\n    void saveAllBytePosteriors(std::string file_url);\n    void setFloatPosteriorsFromTextfile_176(std::string url);\n    float countZeroElements();\n\n    vector<RandomizedTree> trees_;\n\nprivate:\n    int classes_;\n    int num_quant_bits_;\n    mutable uchar **posteriors_;\n    mutable unsigned short *ptemp_;\n    int original_num_classes_;\n    bool keep_floats_;\n};\n\n/****************************************************************************************\\\n*                                     One-Way Descriptor                                 *\n\\****************************************************************************************/\n\n// CvAffinePose: defines a parameterized affine transformation of an image patch.\n// An image patch is rotated on angle phi (in degrees), then scaled lambda1 times\n// along horizontal and lambda2 times along vertical direction, and then rotated again\n// on angle (theta - phi).\nclass CV_EXPORTS CvAffinePose\n{\npublic:\n    float phi;\n    float theta;\n    float lambda1;\n    float lambda2;\n};\n\nclass CV_EXPORTS OneWayDescriptor\n{\npublic:\n    OneWayDescriptor();\n    ~OneWayDescriptor();\n\n    // allocates memory for given descriptor parameters\n    void Allocate(int pose_count, CvSize size, int nChannels);\n\n    // GenerateSamples: generates affine transformed patches with averaging them over small transformation variations.\n    // If external poses and transforms were specified, uses them instead of generating random ones\n    // - pose_count: the number of poses to be generated\n    // - frontal: the input patch (can be a roi in a larger image)\n    // - norm: if nonzero, normalizes the output patch so that the sum of pixel intensities is 1\n    void GenerateSamples(int pose_count, IplImage* frontal, int norm = 0);\n\n    // GenerateSamplesFast: generates affine transformed patches with averaging them over small transformation variations.\n    // Uses precalculated transformed pca components.\n    // - frontal: the input patch (can be a roi in a larger image)\n    // - pca_hr_avg: pca average vector\n    // - pca_hr_eigenvectors: pca eigenvectors\n    // - pca_descriptors: an array of precomputed descriptors of pca components containing their affine transformations\n    //   pca_descriptors[0] corresponds to the average, pca_descriptors[1]-pca_descriptors[pca_dim] correspond to eigenvectors\n    void GenerateSamplesFast(IplImage* frontal, CvMat* pca_hr_avg,\n                             CvMat* pca_hr_eigenvectors, OneWayDescriptor* pca_descriptors);\n\n    // sets the poses and corresponding transforms\n    void SetTransforms(CvAffinePose* poses, CvMat** transforms);\n\n    // Initialize: builds a descriptor.\n    // - pose_count: the number of poses to build. If poses were set externally, uses them rather than generating random ones\n    // - frontal: input patch. Can be a roi in a larger image\n    // - feature_name: the feature name to be associated with the descriptor\n    // - norm: if 1, the affine transformed patches are normalized so that their sum is 1\n    void Initialize(int pose_count, IplImage* frontal, const char* feature_name = 0, int norm = 0);\n\n    // InitializeFast: builds a descriptor using precomputed descriptors of pca components\n    // - pose_count: the number of poses to build\n    // - frontal: input patch. Can be a roi in a larger image\n    // - feature_name: the feature name to be associated with the descriptor\n    // - pca_hr_avg: average vector for PCA\n    // - pca_hr_eigenvectors: PCA eigenvectors (one vector per row)\n    // - pca_descriptors: precomputed descriptors of PCA components, the first descriptor for the average vector\n    // followed by the descriptors for eigenvectors\n    void InitializeFast(int pose_count, IplImage* frontal, const char* feature_name,\n                        CvMat* pca_hr_avg, CvMat* pca_hr_eigenvectors, OneWayDescriptor* pca_descriptors);\n\n    // ProjectPCASample: unwarps an image patch into a vector and projects it into PCA space\n    // - patch: input image patch\n    // - avg: PCA average vector\n    // - eigenvectors: PCA eigenvectors, one per row\n    // - pca_coeffs: output PCA coefficients\n    void ProjectPCASample(IplImage* patch, CvMat* avg, CvMat* eigenvectors, CvMat* pca_coeffs) const;\n\n    // InitializePCACoeffs: projects all warped patches into PCA space\n    // - avg: PCA average vector\n    // - eigenvectors: PCA eigenvectors, one per row\n    void InitializePCACoeffs(CvMat* avg, CvMat* eigenvectors);\n\n    // EstimatePose: finds the closest match between an input patch and a set of patches with different poses\n    // - patch: input image patch\n    // - pose_idx: the output index of the closest pose\n    // - distance: the distance to the closest pose (L2 distance)\n    void EstimatePose(IplImage* patch, int& pose_idx, float& distance) const;\n\n    // EstimatePosePCA: finds the closest match between an input patch and a set of patches with different poses.\n    // The distance between patches is computed in PCA space\n    // - patch: input image patch\n    // - pose_idx: the output index of the closest pose\n    // - distance: distance to the closest pose (L2 distance in PCA space)\n    // - avg: PCA average vector. If 0, matching without PCA is used\n    // - eigenvectors: PCA eigenvectors, one per row\n    void EstimatePosePCA(CvArr* patch, int& pose_idx, float& distance, CvMat* avg, CvMat* eigenvalues) const;\n\n    // GetPatchSize: returns the size of each image patch after warping (2 times smaller than the input patch)\n    CvSize GetPatchSize() const\n    {\n        return m_patch_size;\n    }\n\n    // GetInputPatchSize: returns the required size of the patch that the descriptor is built from\n    // (2 time larger than the patch after warping)\n    CvSize GetInputPatchSize() const\n    {\n        return cvSize(m_patch_size.width*2, m_patch_size.height*2);\n    }\n\n    // GetPatch: returns a patch corresponding to specified pose index\n    // - index: pose index\n    // - return value: the patch corresponding to specified pose index\n    IplImage* GetPatch(int index);\n\n    // GetPose: returns a pose corresponding to specified pose index\n    // - index: pose index\n    // - return value: the pose corresponding to specified pose index\n    CvAffinePose GetPose(int index) const;\n\n    // Save: saves all patches with different poses to a specified path\n    void Save(const char* path);\n\n    // ReadByName: reads a descriptor from a file storage\n    // - fs: file storage\n    // - parent: parent node\n    // - name: node name\n    // - return value: 1 if succeeded, 0 otherwise\n    int ReadByName(CvFileStorage* fs, CvFileNode* parent, const char* name);\n\n    // ReadByName: reads a descriptor from a file node\n    // - parent: parent node\n    // - name: node name\n    // - return value: 1 if succeeded, 0 otherwise\n    int ReadByName(const FileNode &parent, const char* name);\n\n    // Write: writes a descriptor into a file storage\n    // - fs: file storage\n    // - name: node name\n    void Write(CvFileStorage* fs, const char* name);\n\n    // GetFeatureName: returns a name corresponding to a feature\n    const char* GetFeatureName() const;\n\n    // GetCenter: returns the center of the feature\n    CvPoint GetCenter() const;\n\n    void SetPCADimHigh(int pca_dim_high) {m_pca_dim_high = pca_dim_high;};\n    void SetPCADimLow(int pca_dim_low) {m_pca_dim_low = pca_dim_low;};\n\n    int GetPCADimLow() const;\n    int GetPCADimHigh() const;\n\n    CvMat** GetPCACoeffs() const {return m_pca_coeffs;}\n\nprotected:\n    int m_pose_count; // the number of poses\n    CvSize m_patch_size; // size of each image\n    IplImage** m_samples; // an array of length m_pose_count containing the patch in different poses\n    IplImage* m_input_patch;\n    IplImage* m_train_patch;\n    CvMat** m_pca_coeffs; // an array of length m_pose_count containing pca decomposition of the patch in different poses\n    CvAffinePose* m_affine_poses; // an array of poses\n    CvMat** m_transforms; // an array of affine transforms corresponding to poses\n\n    string m_feature_name; // the name of the feature associated with the descriptor\n    CvPoint m_center; // the coordinates of the feature (the center of the input image ROI)\n\n    int m_pca_dim_high; // the number of descriptor pca components to use for generating affine poses\n    int m_pca_dim_low; // the number of pca components to use for comparison\n};\n\n\n// OneWayDescriptorBase: encapsulates functionality for training/loading a set of one way descriptors\n// and finding the nearest closest descriptor to an input feature\nclass CV_EXPORTS OneWayDescriptorBase\n{\npublic:\n\n    // creates an instance of OneWayDescriptor from a set of training files\n    // - patch_size: size of the input (large) patch\n    // - pose_count: the number of poses to generate for each descriptor\n    // - train_path: path to training files\n    // - pca_config: the name of the file that contains PCA for small patches (2 times smaller\n    // than patch_size each dimension\n    // - pca_hr_config: the name of the file that contains PCA for large patches (of patch_size size)\n    // - pca_desc_config: the name of the file that contains descriptors of PCA components\n    OneWayDescriptorBase(CvSize patch_size, int pose_count, const char* train_path = 0, const char* pca_config = 0,\n                         const char* pca_hr_config = 0, const char* pca_desc_config = 0, int pyr_levels = 1,\n                         int pca_dim_high = 100, int pca_dim_low = 100);\n\n    OneWayDescriptorBase(CvSize patch_size, int pose_count, const string &pca_filename, const string &train_path = string(), const string &images_list = string(),\n                         float _scale_min = 0.7f, float _scale_max=1.5f, float _scale_step=1.2f, int pyr_levels = 1,\n                         int pca_dim_high = 100, int pca_dim_low = 100);\n\n\n    virtual ~OneWayDescriptorBase();\n    void clear ();\n\n\n    // Allocate: allocates memory for a given number of descriptors\n    void Allocate(int train_feature_count);\n\n    // AllocatePCADescriptors: allocates memory for pca descriptors\n    void AllocatePCADescriptors();\n\n    // returns patch size\n    CvSize GetPatchSize() const {return m_patch_size;};\n    // returns the number of poses for each descriptor\n    int GetPoseCount() const {return m_pose_count;};\n\n    // returns the number of pyramid levels\n    int GetPyrLevels() const {return m_pyr_levels;};\n\n    // returns the number of descriptors\n    int GetDescriptorCount() const {return m_train_feature_count;};\n\n    // CreateDescriptorsFromImage: creates descriptors for each of the input features\n    // - src: input image\n    // - features: input features\n    // - pyr_levels: the number of pyramid levels\n    void CreateDescriptorsFromImage(IplImage* src, const vector<KeyPoint>& features);\n\n    // CreatePCADescriptors: generates descriptors for PCA components, needed for fast generation of feature descriptors\n    void CreatePCADescriptors();\n\n    // returns a feature descriptor by feature index\n    const OneWayDescriptor* GetDescriptor(int desc_idx) const {return &m_descriptors[desc_idx];};\n\n    // FindDescriptor: finds the closest descriptor\n    // - patch: input image patch\n    // - desc_idx: output index of the closest descriptor to the input patch\n    // - pose_idx: output index of the closest pose of the closest descriptor to the input patch\n    // - distance: distance from the input patch to the closest feature pose\n    // - _scales: scales of the input patch for each descriptor\n    // - scale_ranges: input scales variation (float[2])\n    void FindDescriptor(IplImage* patch, int& desc_idx, int& pose_idx, float& distance, float* _scale = 0, float* scale_ranges = 0) const;\n\n    // - patch: input image patch\n    // - n: number of the closest indexes\n    // - desc_idxs: output indexes of the closest descriptor to the input patch (n)\n    // - pose_idx: output indexes of the closest pose of the closest descriptor to the input patch (n)\n    // - distances: distance from the input patch to the closest feature pose (n)\n    // - _scales: scales of the input patch\n    // - scale_ranges: input scales variation (float[2])\n    void FindDescriptor(IplImage* patch, int n, vector<int>& desc_idxs, vector<int>& pose_idxs,\n                        vector<float>& distances, vector<float>& _scales, float* scale_ranges = 0) const;\n\n    // FindDescriptor: finds the closest descriptor\n    // - src: input image\n    // - pt: center of the feature\n    // - desc_idx: output index of the closest descriptor to the input patch\n    // - pose_idx: output index of the closest pose of the closest descriptor to the input patch\n    // - distance: distance from the input patch to the closest feature pose\n    void FindDescriptor(IplImage* src, cv::Point2f pt, int& desc_idx, int& pose_idx, float& distance) const;\n\n    // InitializePoses: generates random poses\n    void InitializePoses();\n\n    // InitializeTransformsFromPoses: generates 2x3 affine matrices from poses (initializes m_transforms)\n    void InitializeTransformsFromPoses();\n\n    // InitializePoseTransforms: subsequently calls InitializePoses and InitializeTransformsFromPoses\n    void InitializePoseTransforms();\n\n    // InitializeDescriptor: initializes a descriptor\n    // - desc_idx: descriptor index\n    // - train_image: image patch (ROI is supported)\n    // - feature_label: feature textual label\n    void InitializeDescriptor(int desc_idx, IplImage* train_image, const char* feature_label);\n\n    void InitializeDescriptor(int desc_idx, IplImage* train_image, const KeyPoint& keypoint, const char* feature_label);\n\n    // InitializeDescriptors: load features from an image and create descriptors for each of them\n    void InitializeDescriptors(IplImage* train_image, const vector<KeyPoint>& features,\n                               const char* feature_label = \"\", int desc_start_idx = 0);\n\n    // Write: writes this object to a file storage\n    // - fs: output filestorage\n    void Write (FileStorage &fs) const;\n\n    // Read: reads OneWayDescriptorBase object from a file node\n    // - fn: input file node\n    void Read (const FileNode &fn);\n\n    // LoadPCADescriptors: loads PCA descriptors from a file\n    // - filename: input filename\n    int LoadPCADescriptors(const char* filename);\n\n    // LoadPCADescriptors: loads PCA descriptors from a file node\n    // - fn: input file node\n    int LoadPCADescriptors(const FileNode &fn);\n\n    // SavePCADescriptors: saves PCA descriptors to a file\n    // - filename: output filename\n    void SavePCADescriptors(const char* filename);\n\n    // SavePCADescriptors: saves PCA descriptors to a file storage\n    // - fs: output file storage\n    void SavePCADescriptors(CvFileStorage* fs) const;\n\n    // GeneratePCA: calculate and save PCA components and descriptors\n    // - img_path: path to training PCA images directory\n    // - images_list: filename with filenames of training PCA images\n    void GeneratePCA(const char* img_path, const char* images_list, int pose_count=500);\n\n    // SetPCAHigh: sets the high resolution pca matrices (copied to internal structures)\n    void SetPCAHigh(CvMat* avg, CvMat* eigenvectors);\n\n    // SetPCALow: sets the low resolution pca matrices (copied to internal structures)\n    void SetPCALow(CvMat* avg, CvMat* eigenvectors);\n\n    int GetLowPCA(CvMat** avg, CvMat** eigenvectors)\n    {\n        *avg = m_pca_avg;\n        *eigenvectors = m_pca_eigenvectors;\n        return m_pca_dim_low;\n    };\n\n    int GetPCADimLow() const {return m_pca_dim_low;};\n    int GetPCADimHigh() const {return m_pca_dim_high;};\n\n    void ConvertDescriptorsArrayToTree(); // Converting pca_descriptors array to KD tree\n\n    // GetPCAFilename: get default PCA filename\n    static string GetPCAFilename () { return \"pca.yml\"; }\n\n    virtual bool empty() const { return m_train_feature_count <= 0 ? true : false; }\n\nprotected:\n    CvSize m_patch_size; // patch size\n    int m_pose_count; // the number of poses for each descriptor\n    int m_train_feature_count; // the number of the training features\n    OneWayDescriptor* m_descriptors; // array of train feature descriptors\n    CvMat* m_pca_avg; // PCA average Vector for small patches\n    CvMat* m_pca_eigenvectors; // PCA eigenvectors for small patches\n    CvMat* m_pca_hr_avg; // PCA average Vector for large patches\n    CvMat* m_pca_hr_eigenvectors; // PCA eigenvectors for large patches\n    OneWayDescriptor* m_pca_descriptors; // an array of PCA descriptors\n\n    cv::flann::Index* m_pca_descriptors_tree;\n    CvMat* m_pca_descriptors_matrix;\n\n    CvAffinePose* m_poses; // array of poses\n    CvMat** m_transforms; // array of affine transformations corresponding to poses\n\n    int m_pca_dim_high;\n    int m_pca_dim_low;\n\n    int m_pyr_levels;\n    float scale_min;\n    float scale_max;\n    float scale_step;\n\n    // SavePCAall: saves PCA components and descriptors to a file storage\n    // - fs: output file storage\n    void SavePCAall (FileStorage &fs) const;\n\n    // LoadPCAall: loads PCA components and descriptors from a file node\n    // - fn: input file node\n    void LoadPCAall (const FileNode &fn);\n};\n\nclass CV_EXPORTS OneWayDescriptorObject : public OneWayDescriptorBase\n{\npublic:\n    // creates an instance of OneWayDescriptorObject from a set of training files\n    // - patch_size: size of the input (large) patch\n    // - pose_count: the number of poses to generate for each descriptor\n    // - train_path: path to training files\n    // - pca_config: the name of the file that contains PCA for small patches (2 times smaller\n    // than patch_size each dimension\n    // - pca_hr_config: the name of the file that contains PCA for large patches (of patch_size size)\n    // - pca_desc_config: the name of the file that contains descriptors of PCA components\n    OneWayDescriptorObject(CvSize patch_size, int pose_count, const char* train_path, const char* pca_config,\n                           const char* pca_hr_config = 0, const char* pca_desc_config = 0, int pyr_levels = 1);\n\n    OneWayDescriptorObject(CvSize patch_size, int pose_count, const string &pca_filename,\n                           const string &train_path = string (), const string &images_list = string (),\n                           float _scale_min = 0.7f, float _scale_max=1.5f, float _scale_step=1.2f, int pyr_levels = 1);\n\n\n    virtual ~OneWayDescriptorObject();\n\n    // Allocate: allocates memory for a given number of features\n    // - train_feature_count: the total number of features\n    // - object_feature_count: the number of features extracted from the object\n    void Allocate(int train_feature_count, int object_feature_count);\n\n\n    void SetLabeledFeatures(const vector<KeyPoint>& features) {m_train_features = features;};\n    vector<KeyPoint>& GetLabeledFeatures() {return m_train_features;};\n    const vector<KeyPoint>& GetLabeledFeatures() const {return m_train_features;};\n    vector<KeyPoint> _GetLabeledFeatures() const;\n\n    // IsDescriptorObject: returns 1 if descriptor with specified index is positive, otherwise 0\n    int IsDescriptorObject(int desc_idx) const;\n\n    // MatchPointToPart: returns the part number of a feature if it matches one of the object parts, otherwise -1\n    int MatchPointToPart(CvPoint pt) const;\n\n    // GetDescriptorPart: returns the part number of the feature corresponding to a specified descriptor\n    // - desc_idx: descriptor index\n    int GetDescriptorPart(int desc_idx) const;\n\n\n    void InitializeObjectDescriptors(IplImage* train_image, const vector<KeyPoint>& features,\n                                     const char* feature_label, int desc_start_idx = 0, float scale = 1.0f,\n                                     int is_background = 0);\n\n    // GetObjectFeatureCount: returns the number of object features\n    int GetObjectFeatureCount() const {return m_object_feature_count;};\n\nprotected:\n    int* m_part_id; // contains part id for each of object descriptors\n    vector<KeyPoint> m_train_features; // train features\n    int m_object_feature_count; // the number of the positive features\n\n};\n\n\n/*\n *  OneWayDescriptorMatcher\n */\nclass OneWayDescriptorMatcher;\ntypedef OneWayDescriptorMatcher OneWayDescriptorMatch;\n\nclass CV_EXPORTS OneWayDescriptorMatcher : public GenericDescriptorMatcher\n{\npublic:\n    class CV_EXPORTS Params\n    {\n    public:\n        static const int POSE_COUNT = 500;\n        static const int PATCH_WIDTH = 24;\n        static const int PATCH_HEIGHT = 24;\n        static float GET_MIN_SCALE() { return 0.7f; }\n        static float GET_MAX_SCALE() { return 1.5f; }\n        static float GET_STEP_SCALE() { return 1.2f; }\n\n        Params( int poseCount = POSE_COUNT,\n               Size patchSize = Size(PATCH_WIDTH, PATCH_HEIGHT),\n               string pcaFilename = string(),\n               string trainPath = string(), string trainImagesList = string(),\n               float minScale = GET_MIN_SCALE(), float maxScale = GET_MAX_SCALE(),\n               float stepScale = GET_STEP_SCALE() );\n\n        int poseCount;\n        Size patchSize;\n        string pcaFilename;\n        string trainPath;\n        string trainImagesList;\n\n        float minScale, maxScale, stepScale;\n    };\n\n    OneWayDescriptorMatcher( const Params& params=Params() );\n    virtual ~OneWayDescriptorMatcher();\n\n    void initialize( const Params& params, const Ptr<OneWayDescriptorBase>& base=Ptr<OneWayDescriptorBase>() );\n\n    // Clears keypoints storing in collection and OneWayDescriptorBase\n    virtual void clear();\n\n    virtual void train();\n\n    virtual bool isMaskSupported();\n\n    virtual void read( const FileNode &fn );\n    virtual void write( FileStorage& fs ) const;\n\n    virtual bool empty() const;\n\n    virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\nprotected:\n    // Matches a set of keypoints from a single image of the training set. A rectangle with a center in a keypoint\n    // and size (patch_width/2*scale, patch_height/2*scale) is cropped from the source image for each\n    // keypoint. scale is iterated from DescriptorOneWayParams::min_scale to DescriptorOneWayParams::max_scale.\n    // The minimum distance to each training patch with all its affine poses is found over all scales.\n    // The class ID of a match is returned for each keypoint. The distance is calculated over PCA components\n    // loaded with DescriptorOneWay::Initialize, kd tree is used for finding minimum distances.\n    virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                              vector<vector<DMatch> >& matches, int k,\n                              const vector<Mat>& masks, bool compactResult );\n    virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                                 vector<vector<DMatch> >& matches, float maxDistance,\n                                 const vector<Mat>& masks, bool compactResult );\n\n    Ptr<OneWayDescriptorBase> base;\n    Params params;\n    int prevTrainCount;\n};\n\n/*\n *  FernDescriptorMatcher\n */\nclass FernDescriptorMatcher;\ntypedef FernDescriptorMatcher FernDescriptorMatch;\n\nclass CV_EXPORTS FernDescriptorMatcher : public GenericDescriptorMatcher\n{\npublic:\n    class CV_EXPORTS Params\n    {\n    public:\n        Params( int nclasses=0,\n               int patchSize=FernClassifier::PATCH_SIZE,\n               int signatureSize=FernClassifier::DEFAULT_SIGNATURE_SIZE,\n               int nstructs=FernClassifier::DEFAULT_STRUCTS,\n               int structSize=FernClassifier::DEFAULT_STRUCT_SIZE,\n               int nviews=FernClassifier::DEFAULT_VIEWS,\n               int compressionMethod=FernClassifier::COMPRESSION_NONE,\n               const PatchGenerator& patchGenerator=PatchGenerator() );\n\n        Params( const string& filename );\n\n        int nclasses;\n        int patchSize;\n        int signatureSize;\n        int nstructs;\n        int structSize;\n        int nviews;\n        int compressionMethod;\n        PatchGenerator patchGenerator;\n\n        string filename;\n    };\n\n    FernDescriptorMatcher( const Params& params=Params() );\n    virtual ~FernDescriptorMatcher();\n\n    virtual void clear();\n\n    virtual void train();\n\n    virtual bool isMaskSupported();\n\n    virtual void read( const FileNode &fn );\n    virtual void write( FileStorage& fs ) const;\n    virtual bool empty() const;\n\n    virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\nprotected:\n    virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                              vector<vector<DMatch> >& matches, int k,\n                              const vector<Mat>& masks, bool compactResult );\n    virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                                 vector<vector<DMatch> >& matches, float maxDistance,\n                                 const vector<Mat>& masks, bool compactResult );\n\n    void trainFernClassifier();\n    void calcBestProbAndMatchIdx( const Mat& image, const Point2f& pt,\n                                 float& bestProb, int& bestMatchIdx, vector<float>& signature );\n    Ptr<FernClassifier> classifier;\n    Params params;\n    int prevTrainCount;\n};\n\n\n/*\n * CalonderDescriptorExtractor\n */\ntemplate<typename T>\nclass CV_EXPORTS CalonderDescriptorExtractor : public DescriptorExtractor\n{\npublic:\n    CalonderDescriptorExtractor( const string& classifierFile );\n\n    virtual void read( const FileNode &fn );\n    virtual void write( FileStorage &fs ) const;\n\n    virtual int descriptorSize() const { return classifier_.classes(); }\n    virtual int descriptorType() const { return DataType<T>::type; }\n\n    virtual bool empty() const;\n\nprotected:\n    virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n\n    RTreeClassifier classifier_;\n    static const int BORDER_SIZE = 16;\n};\n\ntemplate<typename T>\nCalonderDescriptorExtractor<T>::CalonderDescriptorExtractor(const std::string& classifier_file)\n{\n    classifier_.read( classifier_file.c_str() );\n}\n\ntemplate<typename T>\nvoid CalonderDescriptorExtractor<T>::computeImpl( const Mat& image,\n                                                 vector<KeyPoint>& keypoints,\n                                                 Mat& descriptors) const\n{\n    // Cannot compute descriptors for keypoints on the image border.\n    KeyPointsFilter::runByImageBorder(keypoints, image.size(), BORDER_SIZE);\n\n    /// @todo Check 16-byte aligned\n    descriptors.create((int)keypoints.size(), classifier_.classes(), cv::DataType<T>::type);\n\n    int patchSize = RandomizedTree::PATCH_SIZE;\n    int offset = patchSize / 2;\n    for (size_t i = 0; i < keypoints.size(); ++i)\n    {\n        cv::Point2f pt = keypoints[i].pt;\n        IplImage ipl = image( Rect((int)(pt.x - offset), (int)(pt.y - offset), patchSize, patchSize) );\n        classifier_.getSignature( &ipl, descriptors.ptr<T>((int)i));\n    }\n}\n\ntemplate<typename T>\nvoid CalonderDescriptorExtractor<T>::read( const FileNode& )\n{}\n\ntemplate<typename T>\nvoid CalonderDescriptorExtractor<T>::write( FileStorage& ) const\n{}\n\ntemplate<typename T>\nbool CalonderDescriptorExtractor<T>::empty() const\n{\n    return classifier_.trees_.empty();\n}\n\n\n////////////////////// Brute Force Matcher //////////////////////////\n\ntemplate<class Distance>\nclass CV_EXPORTS BruteForceMatcher : public BFMatcher\n{\npublic:\n    BruteForceMatcher( Distance d = Distance() ) : BFMatcher(Distance::normType, false) {(void)d;}\n    virtual ~BruteForceMatcher() {}\n};\n\n\n/****************************************************************************************\\\n*                                Planar Object Detection                                 *\n\\****************************************************************************************/\n\nclass CV_EXPORTS PlanarObjectDetector\n{\npublic:\n    PlanarObjectDetector();\n    PlanarObjectDetector(const FileNode& node);\n    PlanarObjectDetector(const vector<Mat>& pyr, int _npoints=300,\n                         int _patchSize=FernClassifier::PATCH_SIZE,\n                         int _nstructs=FernClassifier::DEFAULT_STRUCTS,\n                         int _structSize=FernClassifier::DEFAULT_STRUCT_SIZE,\n                         int _nviews=FernClassifier::DEFAULT_VIEWS,\n                         const LDetector& detector=LDetector(),\n                         const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual ~PlanarObjectDetector();\n    virtual void train(const vector<Mat>& pyr, int _npoints=300,\n                       int _patchSize=FernClassifier::PATCH_SIZE,\n                       int _nstructs=FernClassifier::DEFAULT_STRUCTS,\n                       int _structSize=FernClassifier::DEFAULT_STRUCT_SIZE,\n                       int _nviews=FernClassifier::DEFAULT_VIEWS,\n                       const LDetector& detector=LDetector(),\n                       const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual void train(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,\n                       int _patchSize=FernClassifier::PATCH_SIZE,\n                       int _nstructs=FernClassifier::DEFAULT_STRUCTS,\n                       int _structSize=FernClassifier::DEFAULT_STRUCT_SIZE,\n                       int _nviews=FernClassifier::DEFAULT_VIEWS,\n                       const LDetector& detector=LDetector(),\n                       const PatchGenerator& patchGenerator=PatchGenerator());\n    Rect getModelROI() const;\n    vector<KeyPoint> getModelPoints() const;\n    const LDetector& getDetector() const;\n    const FernClassifier& getClassifier() const;\n    void setVerbose(bool verbose);\n\n    void read(const FileNode& node);\n    void write(FileStorage& fs, const String& name=String()) const;\n    bool operator()(const Mat& image, CV_OUT Mat& H, CV_OUT vector<Point2f>& corners) const;\n    bool operator()(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,\n                    CV_OUT Mat& H, CV_OUT vector<Point2f>& corners,\n                    CV_OUT vector<int>* pairs=0) const;\n\nprotected:\n    bool verbose;\n    Rect modelROI;\n    vector<KeyPoint> modelPoints;\n    LDetector ldetector;\n    FernClassifier fernClassifier;\n};\n\n}\n\n// 2009-01-12, Xavier Delacour <xavier.delacour@gmail.com>\n\nstruct lsh_hash {\n    int h1, h2;\n};\n\nstruct CvLSHOperations\n{\n    virtual ~CvLSHOperations() {}\n\n    virtual int vector_add(const void* data) = 0;\n    virtual void vector_remove(int i) = 0;\n    virtual const void* vector_lookup(int i) = 0;\n    virtual void vector_reserve(int n) = 0;\n    virtual unsigned int vector_count() = 0;\n\n    virtual void hash_insert(lsh_hash h, int l, int i) = 0;\n    virtual void hash_remove(lsh_hash h, int l, int i) = 0;\n    virtual int hash_lookup(lsh_hash h, int l, int* ret_i, int ret_i_max) = 0;\n};\n\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Splits color or grayscale image into multiple connected components\n of nearly the same color/brightness using modification of Burt algorithm.\n comp with contain a pointer to sequence (CvSeq)\n of connected components (CvConnectedComp) */\nCVAPI(void) cvPyrSegmentation( IplImage* src, IplImage* dst,\n                              CvMemStorage* storage, CvSeq** comp,\n                              int level, double threshold1,\n                              double threshold2 );\n\n/****************************************************************************************\\\n*                              Planar subdivisions                                       *\n\\****************************************************************************************/\n\n/* Initializes Delaunay triangulation */\nCVAPI(void)  cvInitSubdivDelaunay2D( CvSubdiv2D* subdiv, CvRect rect );\n\n/* Creates new subdivision */\nCVAPI(CvSubdiv2D*)  cvCreateSubdiv2D( int subdiv_type, int header_size,\n                                     int vtx_size, int quadedge_size,\n                                     CvMemStorage* storage );\n\n/************************* high-level subdivision functions ***************************/\n\n/* Simplified Delaunay diagram creation */\nCV_INLINE  CvSubdiv2D* cvCreateSubdivDelaunay2D( CvRect rect, CvMemStorage* storage )\n{\n    CvSubdiv2D* subdiv = cvCreateSubdiv2D( CV_SEQ_KIND_SUBDIV2D, sizeof(*subdiv),\n                                          sizeof(CvSubdiv2DPoint), sizeof(CvQuadEdge2D), storage );\n\n    cvInitSubdivDelaunay2D( subdiv, rect );\n    return subdiv;\n}\n\n\n/* Inserts new point to the Delaunay triangulation */\nCVAPI(CvSubdiv2DPoint*)  cvSubdivDelaunay2DInsert( CvSubdiv2D* subdiv, CvPoint2D32f pt);\n\n/* Locates a point within the Delaunay triangulation (finds the edge\n the point is left to or belongs to, or the triangulation point the given\n point coinsides with */\nCVAPI(CvSubdiv2DPointLocation)  cvSubdiv2DLocate(\n                                                 CvSubdiv2D* subdiv, CvPoint2D32f pt,\n                                                 CvSubdiv2DEdge* edge,\n                                                 CvSubdiv2DPoint** vertex CV_DEFAULT(NULL) );\n\n/* Calculates Voronoi tesselation (i.e. coordinates of Voronoi points) */\nCVAPI(void)  cvCalcSubdivVoronoi2D( CvSubdiv2D* subdiv );\n\n\n/* Removes all Voronoi points from the tesselation */\nCVAPI(void)  cvClearSubdivVoronoi2D( CvSubdiv2D* subdiv );\n\n\n/* Finds the nearest to the given point vertex in subdivision. */\nCVAPI(CvSubdiv2DPoint*) cvFindNearestPoint2D( CvSubdiv2D* subdiv, CvPoint2D32f pt );\n\n\n/************ Basic quad-edge navigation and operations ************/\n\nCV_INLINE  CvSubdiv2DEdge  cvSubdiv2DNextEdge( CvSubdiv2DEdge edge )\n{\n    return  CV_SUBDIV2D_NEXT_EDGE(edge);\n}\n\n\nCV_INLINE  CvSubdiv2DEdge  cvSubdiv2DRotateEdge( CvSubdiv2DEdge edge, int rotate )\n{\n    return  (edge & ~3) + ((edge + rotate) & 3);\n}\n\nCV_INLINE  CvSubdiv2DEdge  cvSubdiv2DSymEdge( CvSubdiv2DEdge edge )\n{\n    return edge ^ 2;\n}\n\nCV_INLINE  CvSubdiv2DEdge  cvSubdiv2DGetEdge( CvSubdiv2DEdge edge, CvNextEdgeType type )\n{\n    CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);\n    edge = e->next[(edge + (int)type) & 3];\n    return  (edge & ~3) + ((edge + ((int)type >> 4)) & 3);\n}\n\n\nCV_INLINE  CvSubdiv2DPoint*  cvSubdiv2DEdgeOrg( CvSubdiv2DEdge edge )\n{\n    CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);\n    return (CvSubdiv2DPoint*)e->pt[edge & 3];\n}\n\n\nCV_INLINE  CvSubdiv2DPoint*  cvSubdiv2DEdgeDst( CvSubdiv2DEdge edge )\n{\n    CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);\n    return (CvSubdiv2DPoint*)e->pt[(edge + 2) & 3];\n}\n\n/****************************************************************************************\\\n*                           Additional operations on Subdivisions                        *\n\\****************************************************************************************/\n\n// paints voronoi diagram: just demo function\nCVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );\n\n// checks planar subdivision for correctness. It is not an absolute check,\n// but it verifies some relations between quad-edges\nCVAPI(int)   icvSubdiv2DCheck( CvSubdiv2D* subdiv );\n\n// returns squared distance between two 2D points with floating-point coordinates.\nCV_INLINE double icvSqDist2D32f( CvPoint2D32f pt1, CvPoint2D32f pt2 )\n{\n    double dx = pt1.x - pt2.x;\n    double dy = pt1.y - pt2.y;\n\n    return dx*dx + dy*dy;\n}\n\n\n\n\nCV_INLINE  double  cvTriangleArea( CvPoint2D32f a, CvPoint2D32f b, CvPoint2D32f c )\n{\n    return ((double)b.x - a.x) * ((double)c.y - a.y) - ((double)b.y - a.y) * ((double)c.x - a.x);\n}\n\n\n/* Constructs kd-tree from set of feature descriptors */\nCVAPI(struct CvFeatureTree*) cvCreateKDTree(CvMat* desc);\n\n/* Constructs spill-tree from set of feature descriptors */\nCVAPI(struct CvFeatureTree*) cvCreateSpillTree( const CvMat* raw_data,\n                                               const int naive CV_DEFAULT(50),\n                                               const double rho CV_DEFAULT(.7),\n                                               const double tau CV_DEFAULT(.1) );\n\n/* Release feature tree */\nCVAPI(void) cvReleaseFeatureTree(struct CvFeatureTree* tr);\n\n/* Searches feature tree for k nearest neighbors of given reference points,\n searching (in case of kd-tree/bbf) at most emax leaves. */\nCVAPI(void) cvFindFeatures(struct CvFeatureTree* tr, const CvMat* query_points,\n                           CvMat* indices, CvMat* dist, int k, int emax CV_DEFAULT(20));\n\n/* Search feature tree for all points that are inlier to given rect region.\n Only implemented for kd trees */\nCVAPI(int) cvFindFeaturesBoxed(struct CvFeatureTree* tr,\n                               CvMat* bounds_min, CvMat* bounds_max,\n                               CvMat* out_indices);\n\n\n/* Construct a Locality Sensitive Hash (LSH) table, for indexing d-dimensional vectors of\n given type. Vectors will be hashed L times with k-dimensional p-stable (p=2) functions. */\nCVAPI(struct CvLSH*) cvCreateLSH(struct CvLSHOperations* ops, int d,\n                                 int L CV_DEFAULT(10), int k CV_DEFAULT(10),\n                                 int type CV_DEFAULT(CV_64FC1), double r CV_DEFAULT(4),\n                                 int64 seed CV_DEFAULT(-1));\n\n/* Construct in-memory LSH table, with n bins. */\nCVAPI(struct CvLSH*) cvCreateMemoryLSH(int d, int n, int L CV_DEFAULT(10), int k CV_DEFAULT(10),\n                                       int type CV_DEFAULT(CV_64FC1), double r CV_DEFAULT(4),\n                                       int64 seed CV_DEFAULT(-1));\n\n/* Free the given LSH structure. */\nCVAPI(void) cvReleaseLSH(struct CvLSH** lsh);\n\n/* Return the number of vectors in the LSH. */\nCVAPI(unsigned int) LSHSize(struct CvLSH* lsh);\n\n/* Add vectors to the LSH structure, optionally returning indices. */\nCVAPI(void) cvLSHAdd(struct CvLSH* lsh, const CvMat* data, CvMat* indices CV_DEFAULT(0));\n\n/* Remove vectors from LSH, as addressed by given indices. */\nCVAPI(void) cvLSHRemove(struct CvLSH* lsh, const CvMat* indices);\n\n/* Query the LSH n times for at most k nearest points; data is n x d,\n indices and dist are n x k. At most emax stored points will be accessed. */\nCVAPI(void) cvLSHQuery(struct CvLSH* lsh, const CvMat* query_points,\n                       CvMat* indices, CvMat* dist, int k, int emax);\n\n/* Kolmogorov-Zabin stereo-correspondence algorithm (a.k.a. KZ1) */\n#define CV_STEREO_GC_OCCLUDED  SHRT_MAX\n\ntypedef struct CvStereoGCState\n{\n    int Ithreshold;\n    int interactionRadius;\n    float K, lambda, lambda1, lambda2;\n    int occlusionCost;\n    int minDisparity;\n    int numberOfDisparities;\n    int maxIters;\n\n    CvMat* left;\n    CvMat* right;\n    CvMat* dispLeft;\n    CvMat* dispRight;\n    CvMat* ptrLeft;\n    CvMat* ptrRight;\n    CvMat* vtxBuf;\n    CvMat* edgeBuf;\n} CvStereoGCState;\n\nCVAPI(CvStereoGCState*) cvCreateStereoGCState( int numberOfDisparities, int maxIters );\nCVAPI(void) cvReleaseStereoGCState( CvStereoGCState** state );\n\nCVAPI(void) cvFindStereoCorrespondenceGC( const CvArr* left, const CvArr* right,\n                                         CvArr* disparityLeft, CvArr* disparityRight,\n                                         CvStereoGCState* state,\n                                         int useDisparityGuess CV_DEFAULT(0) );\n\n/* Calculates optical flow for 2 images using classical Lucas & Kanade algorithm */\nCVAPI(void)  cvCalcOpticalFlowLK( const CvArr* prev, const CvArr* curr,\n                                 CvSize win_size, CvArr* velx, CvArr* vely );\n\n/* Calculates optical flow for 2 images using block matching algorithm */\nCVAPI(void)  cvCalcOpticalFlowBM( const CvArr* prev, const CvArr* curr,\n                                 CvSize block_size, CvSize shift_size,\n                                 CvSize max_range, int use_previous,\n                                 CvArr* velx, CvArr* vely );\n\n/* Calculates Optical flow for 2 images using Horn & Schunck algorithm */\nCVAPI(void)  cvCalcOpticalFlowHS( const CvArr* prev, const CvArr* curr,\n                                 int use_previous, CvArr* velx, CvArr* vely,\n                                 double lambda, CvTermCriteria criteria );\n\n\n/****************************************************************************************\\\n*                           Background/foreground segmentation                           *\n\\****************************************************************************************/\n\n/* We discriminate between foreground and background pixels\n * by building and maintaining a model of the background.\n * Any pixel which does not fit this model is then deemed\n * to be foreground.\n *\n * At present we support two core background models,\n * one of which has two variations:\n *\n *  o CV_BG_MODEL_FGD: latest and greatest algorithm, described in\n *\n *\t Foreground Object Detection from Videos Containing Complex Background.\n *\t Liyuan Li, Weimin Huang, Irene Y.H. Gu, and Qi Tian.\n *\t ACM MM2003 9p\n *\n *  o CV_BG_MODEL_FGD_SIMPLE:\n *       A code comment describes this as a simplified version of the above,\n *       but the code is in fact currently identical\n *\n *  o CV_BG_MODEL_MOG: \"Mixture of Gaussians\", older algorithm, described in\n *\n *       Moving target classification and tracking from real-time video.\n *       A Lipton, H Fujijoshi, R Patil\n *       Proceedings IEEE Workshop on Application of Computer Vision pp 8-14 1998\n *\n *       Learning patterns of activity using real-time tracking\n *       C Stauffer and W Grimson  August 2000\n *       IEEE Transactions on Pattern Analysis and Machine Intelligence 22(8):747-757\n */\n\n\n#define CV_BG_MODEL_FGD\t\t0\n#define CV_BG_MODEL_MOG\t\t1\t\t\t/* \"Mixture of Gaussians\".\t*/\n#define CV_BG_MODEL_FGD_SIMPLE\t2\n\nstruct CvBGStatModel;\n\ntypedef void (CV_CDECL * CvReleaseBGStatModel)( struct CvBGStatModel** bg_model );\ntypedef int (CV_CDECL * CvUpdateBGStatModel)( IplImage* curr_frame, struct CvBGStatModel* bg_model,\n                                             double learningRate );\n\n#define CV_BG_STAT_MODEL_FIELDS()                                               \\\nint             type; /*type of BG model*/                                      \\\nCvReleaseBGStatModel release;                                                   \\\nCvUpdateBGStatModel update;                                                     \\\nIplImage*       background;   /*8UC3 reference background image*/               \\\nIplImage*       foreground;   /*8UC1 foreground image*/                         \\\nIplImage**      layers;       /*8UC3 reference background image, can be null */ \\\nint             layer_count;  /* can be zero */                                 \\\nCvMemStorage*   storage;      /*storage for foreground_regions*/                \\\nCvSeq*          foreground_regions /*foreground object contours*/\n\ntypedef struct CvBGStatModel\n{\n    CV_BG_STAT_MODEL_FIELDS();\n} CvBGStatModel;\n\n//\n\n// Releases memory used by BGStatModel\nCVAPI(void) cvReleaseBGStatModel( CvBGStatModel** bg_model );\n\n// Updates statistical model and returns number of found foreground regions\nCVAPI(int) cvUpdateBGStatModel( IplImage* current_frame, CvBGStatModel*  bg_model,\n                               double learningRate CV_DEFAULT(-1));\n\n// Performs FG post-processing using segmentation\n// (all pixels of a region will be classified as foreground if majority of pixels of the region are FG).\n// parameters:\n//      segments - pointer to result of segmentation (for example MeanShiftSegmentation)\n//      bg_model - pointer to CvBGStatModel structure\nCVAPI(void) cvRefineForegroundMaskBySegm( CvSeq* segments, CvBGStatModel*  bg_model );\n\n/* Common use change detection function */\nCVAPI(int)  cvChangeDetection( IplImage*  prev_frame,\n                              IplImage*  curr_frame,\n                              IplImage*  change_mask );\n\n/*\n Interface of ACM MM2003 algorithm\n */\n\n/* Default parameters of foreground detection algorithm: */\n#define  CV_BGFG_FGD_LC              128\n#define  CV_BGFG_FGD_N1C             15\n#define  CV_BGFG_FGD_N2C             25\n\n#define  CV_BGFG_FGD_LCC             64\n#define  CV_BGFG_FGD_N1CC            25\n#define  CV_BGFG_FGD_N2CC            40\n\n/* Background reference image update parameter: */\n#define  CV_BGFG_FGD_ALPHA_1         0.1f\n\n/* stat model update parameter\n * 0.002f ~ 1K frame(~45sec), 0.005 ~ 18sec (if 25fps and absolutely static BG)\n */\n#define  CV_BGFG_FGD_ALPHA_2         0.005f\n\n/* start value for alpha parameter (to fast initiate statistic model) */\n#define  CV_BGFG_FGD_ALPHA_3         0.1f\n\n#define  CV_BGFG_FGD_DELTA           2\n\n#define  CV_BGFG_FGD_T               0.9f\n\n#define  CV_BGFG_FGD_MINAREA         15.f\n\n#define  CV_BGFG_FGD_BG_UPDATE_TRESH 0.5f\n\n/* See the above-referenced Li/Huang/Gu/Tian paper\n * for a full description of these background-model\n * tuning parameters.\n *\n * Nomenclature:  'c'  == \"color\", a three-component red/green/blue vector.\n *                         We use histograms of these to model the range of\n *                         colors we've seen at a given background pixel.\n *\n *                'cc' == \"color co-occurrence\", a six-component vector giving\n *                         RGB color for both this frame and preceding frame.\n *                             We use histograms of these to model the range of\n *                         color CHANGES we've seen at a given background pixel.\n */\ntypedef struct CvFGDStatModelParams\n{\n    int    Lc;\t\t\t/* Quantized levels per 'color' component. Power of two, typically 32, 64 or 128.\t\t\t\t*/\n    int    N1c;\t\t\t/* Number of color vectors used to model normal background color variation at a given pixel.\t\t\t*/\n    int    N2c;\t\t\t/* Number of color vectors retained at given pixel.  Must be > N1c, typically ~ 5/3 of N1c.\t\t\t*/\n    /* Used to allow the first N1c vectors to adapt over time to changing background.\t\t\t\t*/\n\n    int    Lcc;\t\t\t/* Quantized levels per 'color co-occurrence' component.  Power of two, typically 16, 32 or 64.\t\t\t*/\n    int    N1cc;\t\t/* Number of color co-occurrence vectors used to model normal background color variation at a given pixel.\t*/\n    int    N2cc;\t\t/* Number of color co-occurrence vectors retained at given pixel.  Must be > N1cc, typically ~ 5/3 of N1cc.\t*/\n    /* Used to allow the first N1cc vectors to adapt over time to changing background.\t\t\t\t*/\n\n    int    is_obj_without_holes;/* If TRUE we ignore holes within foreground blobs. Defaults to TRUE.\t\t\t\t\t\t*/\n    int    perform_morphing;\t/* Number of erode-dilate-erode foreground-blob cleanup iterations.\t\t\t\t\t\t*/\n    /* These erase one-pixel junk blobs and merge almost-touching blobs. Default value is 1.\t\t\t*/\n\n    float  alpha1;\t\t/* How quickly we forget old background pixel values seen.  Typically set to 0.1  \t\t\t\t*/\n    float  alpha2;\t\t/* \"Controls speed of feature learning\". Depends on T. Typical value circa 0.005. \t\t\t\t*/\n    float  alpha3;\t\t/* Alternate to alpha2, used (e.g.) for quicker initial convergence. Typical value 0.1.\t\t\t\t*/\n\n    float  delta;\t\t/* Affects color and color co-occurrence quantization, typically set to 2.\t\t\t\t\t*/\n    float  T;\t\t\t/* \"A percentage value which determines when new features can be recognized as new background.\" (Typically 0.9).*/\n    float  minArea;\t\t/* Discard foreground blobs whose bounding box is smaller than this threshold.\t\t\t\t\t*/\n} CvFGDStatModelParams;\n\ntypedef struct CvBGPixelCStatTable\n{\n    float          Pv, Pvb;\n    uchar          v[3];\n} CvBGPixelCStatTable;\n\ntypedef struct CvBGPixelCCStatTable\n{\n    float          Pv, Pvb;\n    uchar          v[6];\n} CvBGPixelCCStatTable;\n\ntypedef struct CvBGPixelStat\n{\n    float                 Pbc;\n    float                 Pbcc;\n    CvBGPixelCStatTable*  ctable;\n    CvBGPixelCCStatTable* cctable;\n    uchar                 is_trained_st_model;\n    uchar                 is_trained_dyn_model;\n} CvBGPixelStat;\n\n\ntypedef struct CvFGDStatModel\n{\n    CV_BG_STAT_MODEL_FIELDS();\n    CvBGPixelStat*         pixel_stat;\n    IplImage*              Ftd;\n    IplImage*              Fbd;\n    IplImage*              prev_frame;\n    CvFGDStatModelParams   params;\n} CvFGDStatModel;\n\n/* Creates FGD model */\nCVAPI(CvBGStatModel*) cvCreateFGDStatModel( IplImage* first_frame,\n                                           CvFGDStatModelParams* parameters CV_DEFAULT(NULL));\n\n/*\n Interface of Gaussian mixture algorithm\n\n \"An improved adaptive background mixture model for real-time tracking with shadow detection\"\n P. KadewTraKuPong and R. Bowden,\n Proc. 2nd European Workshp on Advanced Video-Based Surveillance Systems, 2001.\"\n http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf\n */\n\n/* Note:  \"MOG\" == \"Mixture Of Gaussians\": */\n\n#define CV_BGFG_MOG_MAX_NGAUSSIANS 500\n\n/* default parameters of gaussian background detection algorithm */\n#define CV_BGFG_MOG_BACKGROUND_THRESHOLD     0.7     /* threshold sum of weights for background test */\n#define CV_BGFG_MOG_STD_THRESHOLD            2.5     /* lambda=2.5 is 99% */\n#define CV_BGFG_MOG_WINDOW_SIZE              200     /* Learning rate; alpha = 1/CV_GBG_WINDOW_SIZE */\n#define CV_BGFG_MOG_NGAUSSIANS               5       /* = K = number of Gaussians in mixture */\n#define CV_BGFG_MOG_WEIGHT_INIT              0.05\n#define CV_BGFG_MOG_SIGMA_INIT               30\n#define CV_BGFG_MOG_MINAREA                  15.f\n\n\n#define CV_BGFG_MOG_NCOLORS                  3\n\ntypedef struct CvGaussBGStatModelParams\n{\n    int     win_size;               /* = 1/alpha */\n    int     n_gauss;\n    double  bg_threshold, std_threshold, minArea;\n    double  weight_init, variance_init;\n}CvGaussBGStatModelParams;\n\ntypedef struct CvGaussBGValues\n{\n    int         match_sum;\n    double      weight;\n    double      variance[CV_BGFG_MOG_NCOLORS];\n    double      mean[CV_BGFG_MOG_NCOLORS];\n} CvGaussBGValues;\n\ntypedef struct CvGaussBGPoint\n{\n    CvGaussBGValues* g_values;\n} CvGaussBGPoint;\n\n\ntypedef struct CvGaussBGModel\n{\n    CV_BG_STAT_MODEL_FIELDS();\n    CvGaussBGStatModelParams   params;\n    CvGaussBGPoint*            g_point;\n    int                        countFrames;\n    void*                      mog;\n} CvGaussBGModel;\n\n\n/* Creates Gaussian mixture background model */\nCVAPI(CvBGStatModel*) cvCreateGaussianBGModel( IplImage* first_frame,\n                                              CvGaussBGStatModelParams* parameters CV_DEFAULT(NULL));\n\n\ntypedef struct CvBGCodeBookElem\n{\n    struct CvBGCodeBookElem* next;\n    int tLastUpdate;\n    int stale;\n    uchar boxMin[3];\n    uchar boxMax[3];\n    uchar learnMin[3];\n    uchar learnMax[3];\n} CvBGCodeBookElem;\n\ntypedef struct CvBGCodeBookModel\n{\n    CvSize size;\n    int t;\n    uchar cbBounds[3];\n    uchar modMin[3];\n    uchar modMax[3];\n    CvBGCodeBookElem** cbmap;\n    CvMemStorage* storage;\n    CvBGCodeBookElem* freeList;\n} CvBGCodeBookModel;\n\nCVAPI(CvBGCodeBookModel*) cvCreateBGCodeBookModel( void );\nCVAPI(void) cvReleaseBGCodeBookModel( CvBGCodeBookModel** model );\n\nCVAPI(void) cvBGCodeBookUpdate( CvBGCodeBookModel* model, const CvArr* image,\n                               CvRect roi CV_DEFAULT(cvRect(0,0,0,0)),\n                               const CvArr* mask CV_DEFAULT(0) );\n\nCVAPI(int) cvBGCodeBookDiff( const CvBGCodeBookModel* model, const CvArr* image,\n                            CvArr* fgmask, CvRect roi CV_DEFAULT(cvRect(0,0,0,0)) );\n\nCVAPI(void) cvBGCodeBookClearStale( CvBGCodeBookModel* model, int staleThresh,\n                                   CvRect roi CV_DEFAULT(cvRect(0,0,0,0)),\n                                   const CvArr* mask CV_DEFAULT(0) );\n\nCVAPI(CvSeq*) cvSegmentFGMask( CvArr *fgmask, int poly1Hull0 CV_DEFAULT(1),\n                              float perimScale CV_DEFAULT(4.f),\n                              CvMemStorage* storage CV_DEFAULT(0),\n                              CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/legacy/streams.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CVSTREAMS_H__\n#define __OPENCV_CVSTREAMS_H__\n\n#ifdef WIN32\n#include <streams.h>  /* !!! IF YOU'VE GOT AN ERROR HERE, PLEASE READ BELOW !!! */\n/***************** How to get Visual Studio understand streams.h ****************\\\n\nYou need DirectShow SDK that is now a part of Platform SDK\n(Windows Server 2003 SP1 SDK or later),\nand DirectX SDK (2006 April or later).\n\n1. Download the Platform SDK from\n   http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\n   and DirectX SDK from msdn.microsoft.com/directx/\n   (They are huge, but you can download it by parts).\n   If it doesn't work for you, consider HighGUI that can capture video via VFW or MIL\n\n2. Install Platform SDK together with DirectShow SDK.\n   Install DirectX (with or without sample code).\n\n3. Build baseclasses.\n   See <PlatformSDKInstallFolder>\\samples\\multimedia\\directshow\\readme.txt.\n\n4. Copy the built libraries (called strmbase.lib and strmbasd.lib\n   in Release and Debug versions, respectively) to\n   <PlatformSDKInstallFolder>\\lib.\n\n5. In Developer Studio add the following paths:\n      <DirectXSDKInstallFolder>\\include\n      <PlatformSDKInstallFolder>\\include\n      <PlatformSDKInstallFolder>\\samples\\multimedia\\directshow\\baseclasses\n    to the includes' search path\n    (at Tools->Options->Directories->Include files in case of Visual Studio 6.0,\n     at Tools->Options->Projects and Solutions->VC++ Directories->Include files in case\n     of Visual Studio 2005)\n   Add\n      <DirectXSDKInstallFolder>\\lib\n      <PlatformSDKInstallFolder>\\lib\n   to the libraries' search path (in the same dialog, ...->\"Library files\" page)\n\n   NOTE: PUT THE ADDED LINES ON THE VERY TOP OF THE LISTS, OTHERWISE YOU MAY STILL GET\n   COMPILER OR LINKER ERRORS. This is necessary, because Visual Studio\n   may include older versions of the same headers and libraries.\n\n6. Now you can build OpenCV DirectShow filters.\n\n\\***********************************************************************************/\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/ml/ml.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_ML_HPP__\n#define __OPENCV_ML_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include <limits.h>\n\n#ifdef __cplusplus\n\n#include <map>\n#include <string>\n#include <iostream>\n\n// Apple defines a check() macro somewhere in the debug headers\n// that interferes with a method definiton in this header\n#undef check\n\n/****************************************************************************************\\\n*                               Main struct definitions                                  *\n\\****************************************************************************************/\n\n/* log(2*PI) */\n#define CV_LOG2PI (1.8378770664093454835606594728112)\n\n/* columns of <trainData> matrix are training samples */\n#define CV_COL_SAMPLE 0\n\n/* rows of <trainData> matrix are training samples */\n#define CV_ROW_SAMPLE 1\n\n#define CV_IS_ROW_SAMPLE(flags) ((flags) & CV_ROW_SAMPLE)\n\nstruct CvVectors\n{\n    int type;\n    int dims, count;\n    CvVectors* next;\n    union\n    {\n        uchar** ptr;\n        float** fl;\n        double** db;\n    } data;\n};\n\n#if 0\n/* A structure, representing the lattice range of statmodel parameters.\n   It is used for optimizing statmodel parameters by cross-validation method.\n   The lattice is logarithmic, so <step> must be greater then 1. */\ntypedef struct CvParamLattice\n{\n    double min_val;\n    double max_val;\n    double step;\n}\nCvParamLattice;\n\nCV_INLINE CvParamLattice cvParamLattice( double min_val, double max_val,\n                                         double log_step )\n{\n    CvParamLattice pl;\n    pl.min_val = MIN( min_val, max_val );\n    pl.max_val = MAX( min_val, max_val );\n    pl.step = MAX( log_step, 1. );\n    return pl;\n}\n\nCV_INLINE CvParamLattice cvDefaultParamLattice( void )\n{\n    CvParamLattice pl = {0,0,0};\n    return pl;\n}\n#endif\n\n/* Variable type */\n#define CV_VAR_NUMERICAL    0\n#define CV_VAR_ORDERED      0\n#define CV_VAR_CATEGORICAL  1\n\n#define CV_TYPE_NAME_ML_SVM         \"opencv-ml-svm\"\n#define CV_TYPE_NAME_ML_KNN         \"opencv-ml-knn\"\n#define CV_TYPE_NAME_ML_NBAYES      \"opencv-ml-bayesian\"\n#define CV_TYPE_NAME_ML_EM          \"opencv-ml-em\"\n#define CV_TYPE_NAME_ML_BOOSTING    \"opencv-ml-boost-tree\"\n#define CV_TYPE_NAME_ML_TREE        \"opencv-ml-tree\"\n#define CV_TYPE_NAME_ML_ANN_MLP     \"opencv-ml-ann-mlp\"\n#define CV_TYPE_NAME_ML_CNN         \"opencv-ml-cnn\"\n#define CV_TYPE_NAME_ML_RTREES      \"opencv-ml-random-trees\"\n#define CV_TYPE_NAME_ML_ERTREES     \"opencv-ml-extremely-randomized-trees\"\n#define CV_TYPE_NAME_ML_GBT         \"opencv-ml-gradient-boosting-trees\"\n\n#define CV_TRAIN_ERROR  0\n#define CV_TEST_ERROR   1\n\nclass CV_EXPORTS_W CvStatModel\n{\npublic:\n    CvStatModel();\n    virtual ~CvStatModel();\n\n    virtual void clear();\n\n    CV_WRAP virtual void save( const char* filename, const char* name=0 ) const;\n    CV_WRAP virtual void load( const char* filename, const char* name=0 );\n\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n    virtual void read( CvFileStorage* storage, CvFileNode* node );\n\nprotected:\n    const char* default_model_name;\n};\n\n/****************************************************************************************\\\n*                                 Normal Bayes Classifier                                *\n\\****************************************************************************************/\n\n/* The structure, representing the grid range of statmodel parameters.\n   It is used for optimizing statmodel accuracy by varying model parameters,\n   the accuracy estimate being computed by cross-validation.\n   The grid is logarithmic, so <step> must be greater then 1. */\n\nclass CvMLData;\n\nstruct CV_EXPORTS_W_MAP CvParamGrid\n{\n    // SVM params type\n    enum { SVM_C=0, SVM_GAMMA=1, SVM_P=2, SVM_NU=3, SVM_COEF=4, SVM_DEGREE=5 };\n\n    CvParamGrid()\n    {\n        min_val = max_val = step = 0;\n    }\n\n    CvParamGrid( double min_val, double max_val, double log_step );\n    //CvParamGrid( int param_id );\n    bool check() const;\n\n    CV_PROP_RW double min_val;\n    CV_PROP_RW double max_val;\n    CV_PROP_RW double step;\n};\n\ninline CvParamGrid::CvParamGrid( double _min_val, double _max_val, double _log_step )\n{\n    min_val = _min_val;\n    max_val = _max_val;\n    step = _log_step;\n}\n\nclass CV_EXPORTS_W CvNormalBayesClassifier : public CvStatModel\n{\npublic:\n    CV_WRAP CvNormalBayesClassifier();\n    virtual ~CvNormalBayesClassifier();\n\n    CvNormalBayesClassifier( const CvMat* trainData, const CvMat* responses,\n        const CvMat* varIdx=0, const CvMat* sampleIdx=0 );\n\n    virtual bool train( const CvMat* trainData, const CvMat* responses,\n        const CvMat* varIdx = 0, const CvMat* sampleIdx=0, bool update=false );\n\n    virtual float predict( const CvMat* samples, CV_OUT CvMat* results=0 ) const;\n    CV_WRAP virtual void clear();\n\n    CV_WRAP CvNormalBayesClassifier( const cv::Mat& trainData, const cv::Mat& responses,\n                            const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat() );\n    CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses,\n                       const cv::Mat& varIdx = cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(),\n                       bool update=false );\n    CV_WRAP virtual float predict( const cv::Mat& samples, CV_OUT cv::Mat* results=0 ) const;\n\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n    virtual void read( CvFileStorage* storage, CvFileNode* node );\n\nprotected:\n    int     var_count, var_all;\n    CvMat*  var_idx;\n    CvMat*  cls_labels;\n    CvMat** count;\n    CvMat** sum;\n    CvMat** productsum;\n    CvMat** avg;\n    CvMat** inv_eigen_values;\n    CvMat** cov_rotate_mats;\n    CvMat*  c;\n};\n\n\n/****************************************************************************************\\\n*                          K-Nearest Neighbour Classifier                                *\n\\****************************************************************************************/\n\n// k Nearest Neighbors\nclass CV_EXPORTS_W CvKNearest : public CvStatModel\n{\npublic:\n\n    CV_WRAP CvKNearest();\n    virtual ~CvKNearest();\n\n    CvKNearest( const CvMat* trainData, const CvMat* responses,\n                const CvMat* sampleIdx=0, bool isRegression=false, int max_k=32 );\n\n    virtual bool train( const CvMat* trainData, const CvMat* responses,\n                        const CvMat* sampleIdx=0, bool is_regression=false,\n                        int maxK=32, bool updateBase=false );\n\n    virtual float find_nearest( const CvMat* samples, int k, CV_OUT CvMat* results=0,\n        const float** neighbors=0, CV_OUT CvMat* neighborResponses=0, CV_OUT CvMat* dist=0 ) const;\n\n    CV_WRAP CvKNearest( const cv::Mat& trainData, const cv::Mat& responses,\n               const cv::Mat& sampleIdx=cv::Mat(), bool isRegression=false, int max_k=32 );\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses,\n                       const cv::Mat& sampleIdx=cv::Mat(), bool isRegression=false,\n                       int maxK=32, bool updateBase=false );\n\n    virtual float find_nearest( const cv::Mat& samples, int k, cv::Mat* results=0,\n                                const float** neighbors=0, cv::Mat* neighborResponses=0,\n                                cv::Mat* dist=0 ) const;\n    CV_WRAP virtual float find_nearest( const cv::Mat& samples, int k, CV_OUT cv::Mat& results,\n                                        CV_OUT cv::Mat& neighborResponses, CV_OUT cv::Mat& dists) const;\n\n    virtual void clear();\n    int get_max_k() const;\n    int get_var_count() const;\n    int get_sample_count() const;\n    bool is_regression() const;\n\n    virtual float write_results( int k, int k1, int start, int end,\n        const float* neighbor_responses, const float* dist, CvMat* _results,\n        CvMat* _neighbor_responses, CvMat* _dist, Cv32suf* sort_buf ) const;\n\n    virtual void find_neighbors_direct( const CvMat* _samples, int k, int start, int end,\n        float* neighbor_responses, const float** neighbors, float* dist ) const;\n\nprotected:\n\n    int max_k, var_count;\n    int total;\n    bool regression;\n    CvVectors* samples;\n};\n\n/****************************************************************************************\\\n*                                   Support Vector Machines                              *\n\\****************************************************************************************/\n\n// SVM training parameters\nstruct CV_EXPORTS_W_MAP CvSVMParams\n{\n    CvSVMParams();\n    CvSVMParams( int svm_type, int kernel_type,\n                 double degree, double gamma, double coef0,\n                 double Cvalue, double nu, double p,\n                 CvMat* class_weights, CvTermCriteria term_crit );\n\n    CV_PROP_RW int         svm_type;\n    CV_PROP_RW int         kernel_type;\n    CV_PROP_RW double      degree; // for poly\n    CV_PROP_RW double      gamma;  // for poly/rbf/sigmoid\n    CV_PROP_RW double      coef0;  // for poly/sigmoid\n\n    CV_PROP_RW double      C;  // for CV_SVM_C_SVC, CV_SVM_EPS_SVR and CV_SVM_NU_SVR\n    CV_PROP_RW double      nu; // for CV_SVM_NU_SVC, CV_SVM_ONE_CLASS, and CV_SVM_NU_SVR\n    CV_PROP_RW double      p; // for CV_SVM_EPS_SVR\n    CvMat*      class_weights; // for CV_SVM_C_SVC\n    CV_PROP_RW CvTermCriteria term_crit; // termination criteria\n};\n\n\nstruct CV_EXPORTS CvSVMKernel\n{\n    typedef void (CvSVMKernel::*Calc)( int vec_count, int vec_size, const float** vecs,\n                                       const float* another, float* results );\n    CvSVMKernel();\n    CvSVMKernel( const CvSVMParams* params, Calc _calc_func );\n    virtual bool create( const CvSVMParams* params, Calc _calc_func );\n    virtual ~CvSVMKernel();\n\n    virtual void clear();\n    virtual void calc( int vcount, int n, const float** vecs, const float* another, float* results );\n\n    const CvSVMParams* params;\n    Calc calc_func;\n\n    virtual void calc_non_rbf_base( int vec_count, int vec_size, const float** vecs,\n                                    const float* another, float* results,\n                                    double alpha, double beta );\n\n    virtual void calc_linear( int vec_count, int vec_size, const float** vecs,\n                              const float* another, float* results );\n    virtual void calc_rbf( int vec_count, int vec_size, const float** vecs,\n                           const float* another, float* results );\n    virtual void calc_poly( int vec_count, int vec_size, const float** vecs,\n                            const float* another, float* results );\n    virtual void calc_sigmoid( int vec_count, int vec_size, const float** vecs,\n                               const float* another, float* results );\n};\n\n\nstruct CvSVMKernelRow\n{\n    CvSVMKernelRow* prev;\n    CvSVMKernelRow* next;\n    float* data;\n};\n\n\nstruct CvSVMSolutionInfo\n{\n    double obj;\n    double rho;\n    double upper_bound_p;\n    double upper_bound_n;\n    double r;   // for Solver_NU\n};\n\nclass CV_EXPORTS CvSVMSolver\n{\npublic:\n    typedef bool (CvSVMSolver::*SelectWorkingSet)( int& i, int& j );\n    typedef float* (CvSVMSolver::*GetRow)( int i, float* row, float* dst, bool existed );\n    typedef void (CvSVMSolver::*CalcRho)( double& rho, double& r );\n\n    CvSVMSolver();\n\n    CvSVMSolver( int count, int var_count, const float** samples, schar* y,\n                 int alpha_count, double* alpha, double Cp, double Cn,\n                 CvMemStorage* storage, CvSVMKernel* kernel, GetRow get_row,\n                 SelectWorkingSet select_working_set, CalcRho calc_rho );\n    virtual bool create( int count, int var_count, const float** samples, schar* y,\n                 int alpha_count, double* alpha, double Cp, double Cn,\n                 CvMemStorage* storage, CvSVMKernel* kernel, GetRow get_row,\n                 SelectWorkingSet select_working_set, CalcRho calc_rho );\n    virtual ~CvSVMSolver();\n\n    virtual void clear();\n    virtual bool solve_generic( CvSVMSolutionInfo& si );\n\n    virtual bool solve_c_svc( int count, int var_count, const float** samples, schar* y,\n                              double Cp, double Cn, CvMemStorage* storage,\n                              CvSVMKernel* kernel, double* alpha, CvSVMSolutionInfo& si );\n    virtual bool solve_nu_svc( int count, int var_count, const float** samples, schar* y,\n                               CvMemStorage* storage, CvSVMKernel* kernel,\n                               double* alpha, CvSVMSolutionInfo& si );\n    virtual bool solve_one_class( int count, int var_count, const float** samples,\n                                  CvMemStorage* storage, CvSVMKernel* kernel,\n                                  double* alpha, CvSVMSolutionInfo& si );\n\n    virtual bool solve_eps_svr( int count, int var_count, const float** samples, const float* y,\n                                CvMemStorage* storage, CvSVMKernel* kernel,\n                                double* alpha, CvSVMSolutionInfo& si );\n\n    virtual bool solve_nu_svr( int count, int var_count, const float** samples, const float* y,\n                               CvMemStorage* storage, CvSVMKernel* kernel,\n                               double* alpha, CvSVMSolutionInfo& si );\n\n    virtual float* get_row_base( int i, bool* _existed );\n    virtual float* get_row( int i, float* dst );\n\n    int sample_count;\n    int var_count;\n    int cache_size;\n    int cache_line_size;\n    const float** samples;\n    const CvSVMParams* params;\n    CvMemStorage* storage;\n    CvSVMKernelRow lru_list;\n    CvSVMKernelRow* rows;\n\n    int alpha_count;\n\n    double* G;\n    double* alpha;\n\n    // -1 - lower bound, 0 - free, 1 - upper bound\n    schar* alpha_status;\n\n    schar* y;\n    double* b;\n    float* buf[2];\n    double eps;\n    int max_iter;\n    double C[2];  // C[0] == Cn, C[1] == Cp\n    CvSVMKernel* kernel;\n\n    SelectWorkingSet select_working_set_func;\n    CalcRho calc_rho_func;\n    GetRow get_row_func;\n\n    virtual bool select_working_set( int& i, int& j );\n    virtual bool select_working_set_nu_svm( int& i, int& j );\n    virtual void calc_rho( double& rho, double& r );\n    virtual void calc_rho_nu_svm( double& rho, double& r );\n\n    virtual float* get_row_svc( int i, float* row, float* dst, bool existed );\n    virtual float* get_row_one_class( int i, float* row, float* dst, bool existed );\n    virtual float* get_row_svr( int i, float* row, float* dst, bool existed );\n};\n\n\nstruct CvSVMDecisionFunc\n{\n    double rho;\n    int sv_count;\n    double* alpha;\n    int* sv_index;\n};\n\n\n// SVM model\nclass CV_EXPORTS_W CvSVM : public CvStatModel\n{\npublic:\n    // SVM type\n    enum { C_SVC=100, NU_SVC=101, ONE_CLASS=102, EPS_SVR=103, NU_SVR=104 };\n\n    // SVM kernel type\n    enum { LINEAR=0, POLY=1, RBF=2, SIGMOID=3 };\n\n    // SVM params type\n    enum { C=0, GAMMA=1, P=2, NU=3, COEF=4, DEGREE=5 };\n\n    CV_WRAP CvSVM();\n    virtual ~CvSVM();\n\n    CvSVM( const CvMat* trainData, const CvMat* responses,\n           const CvMat* varIdx=0, const CvMat* sampleIdx=0,\n           CvSVMParams params=CvSVMParams() );\n\n    virtual bool train( const CvMat* trainData, const CvMat* responses,\n                        const CvMat* varIdx=0, const CvMat* sampleIdx=0,\n                        CvSVMParams params=CvSVMParams() );\n\n    virtual bool train_auto( const CvMat* trainData, const CvMat* responses,\n        const CvMat* varIdx, const CvMat* sampleIdx, CvSVMParams params,\n        int kfold = 10,\n        CvParamGrid Cgrid      = get_default_grid(CvSVM::C),\n        CvParamGrid gammaGrid  = get_default_grid(CvSVM::GAMMA),\n        CvParamGrid pGrid      = get_default_grid(CvSVM::P),\n        CvParamGrid nuGrid     = get_default_grid(CvSVM::NU),\n        CvParamGrid coeffGrid  = get_default_grid(CvSVM::COEF),\n        CvParamGrid degreeGrid = get_default_grid(CvSVM::DEGREE),\n        bool balanced=false );\n\n    virtual float predict( const CvMat* sample, bool returnDFVal=false ) const;\n    virtual float predict( const CvMat* samples, CV_OUT CvMat* results ) const;\n\n    CV_WRAP CvSVM( const cv::Mat& trainData, const cv::Mat& responses,\n          const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(),\n          CvSVMParams params=CvSVMParams() );\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses,\n                       const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(),\n                       CvSVMParams params=CvSVMParams() );\n\n    CV_WRAP virtual bool train_auto( const cv::Mat& trainData, const cv::Mat& responses,\n                            const cv::Mat& varIdx, const cv::Mat& sampleIdx, CvSVMParams params,\n                            int k_fold = 10,\n                            CvParamGrid Cgrid      = CvSVM::get_default_grid(CvSVM::C),\n                            CvParamGrid gammaGrid  = CvSVM::get_default_grid(CvSVM::GAMMA),\n                            CvParamGrid pGrid      = CvSVM::get_default_grid(CvSVM::P),\n                            CvParamGrid nuGrid     = CvSVM::get_default_grid(CvSVM::NU),\n                            CvParamGrid coeffGrid  = CvSVM::get_default_grid(CvSVM::COEF),\n                            CvParamGrid degreeGrid = CvSVM::get_default_grid(CvSVM::DEGREE),\n                            bool balanced=false);\n    CV_WRAP virtual float predict( const cv::Mat& sample, bool returnDFVal=false ) const;\n    CV_WRAP_AS(predict_all) void predict( cv::InputArray samples, cv::OutputArray results ) const;\n\n    CV_WRAP virtual int get_support_vector_count() const;\n    virtual const float* get_support_vector(int i) const;\n    virtual CvSVMParams get_params() const { return params; };\n    CV_WRAP virtual void clear();\n\n    static CvParamGrid get_default_grid( int param_id );\n\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n    virtual void read( CvFileStorage* storage, CvFileNode* node );\n    CV_WRAP int get_var_count() const { return var_idx ? var_idx->cols : var_all; }\n\nprotected:\n\n    virtual bool set_params( const CvSVMParams& params );\n    virtual bool train1( int sample_count, int var_count, const float** samples,\n                    const void* responses, double Cp, double Cn,\n                    CvMemStorage* _storage, double* alpha, double& rho );\n    virtual bool do_train( int svm_type, int sample_count, int var_count, const float** samples,\n                    const CvMat* responses, CvMemStorage* _storage, double* alpha );\n    virtual void create_kernel();\n    virtual void create_solver();\n\n    virtual float predict( const float* row_sample, int row_len, bool returnDFVal=false ) const;\n\n    virtual void write_params( CvFileStorage* fs ) const;\n    virtual void read_params( CvFileStorage* fs, CvFileNode* node );\n\n    void optimize_linear_svm();\n\n    CvSVMParams params;\n    CvMat* class_labels;\n    int var_all;\n    float** sv;\n    int sv_total;\n    CvMat* var_idx;\n    CvMat* class_weights;\n    CvSVMDecisionFunc* decision_func;\n    CvMemStorage* storage;\n\n    CvSVMSolver* solver;\n    CvSVMKernel* kernel;\n\nprivate:\n    CvSVM(const CvSVM&);\n    CvSVM& operator = (const CvSVM&);\n};\n\n/****************************************************************************************\\\n*                              Expectation - Maximization                                *\n\\****************************************************************************************/\nnamespace cv\n{\nclass CV_EXPORTS_W EM : public Algorithm\n{\npublic:\n    // Type of covariation matrices\n    enum {COV_MAT_SPHERICAL=0, COV_MAT_DIAGONAL=1, COV_MAT_GENERIC=2, COV_MAT_DEFAULT=COV_MAT_DIAGONAL};\n\n    // Default parameters\n    enum {DEFAULT_NCLUSTERS=5, DEFAULT_MAX_ITERS=100};\n\n    // The initial step\n    enum {START_E_STEP=1, START_M_STEP=2, START_AUTO_STEP=0};\n\n    CV_WRAP EM(int nclusters=EM::DEFAULT_NCLUSTERS, int covMatType=EM::COV_MAT_DIAGONAL,\n       const TermCriteria& termCrit=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS,\n                                                 EM::DEFAULT_MAX_ITERS, FLT_EPSILON));\n\n    virtual ~EM();\n    CV_WRAP virtual void clear();\n\n    CV_WRAP virtual bool train(InputArray samples,\n                       OutputArray logLikelihoods=noArray(),\n                       OutputArray labels=noArray(),\n                       OutputArray probs=noArray());\n\n    CV_WRAP virtual bool trainE(InputArray samples,\n                        InputArray means0,\n                        InputArray covs0=noArray(),\n                        InputArray weights0=noArray(),\n                        OutputArray logLikelihoods=noArray(),\n                        OutputArray labels=noArray(),\n                        OutputArray probs=noArray());\n\n    CV_WRAP virtual bool trainM(InputArray samples,\n                        InputArray probs0,\n                        OutputArray logLikelihoods=noArray(),\n                        OutputArray labels=noArray(),\n                        OutputArray probs=noArray());\n\n    CV_WRAP Vec2d predict(InputArray sample,\n                OutputArray probs=noArray()) const;\n\n    CV_WRAP bool isTrained() const;\n\n    AlgorithmInfo* info() const;\n    virtual void read(const FileNode& fn);\n\nprotected:\n\n    virtual void setTrainData(int startStep, const Mat& samples,\n                              const Mat* probs0,\n                              const Mat* means0,\n                              const vector<Mat>* covs0,\n                              const Mat* weights0);\n\n    bool doTrain(int startStep,\n                 OutputArray logLikelihoods,\n                 OutputArray labels,\n                 OutputArray probs);\n    virtual void eStep();\n    virtual void mStep();\n\n    void clusterTrainSamples();\n    void decomposeCovs();\n    void computeLogWeightDivDet();\n\n    Vec2d computeProbabilities(const Mat& sample, Mat* probs) const;\n\n    // all inner matrices have type CV_64FC1\n    CV_PROP_RW int nclusters;\n    CV_PROP_RW int covMatType;\n    CV_PROP_RW int maxIters;\n    CV_PROP_RW double epsilon;\n\n    Mat trainSamples;\n    Mat trainProbs;\n    Mat trainLogLikelihoods;\n    Mat trainLabels;\n\n    CV_PROP Mat weights;\n    CV_PROP Mat means;\n    CV_PROP vector<Mat> covs;\n\n    vector<Mat> covsEigenValues;\n    vector<Mat> covsRotateMats;\n    vector<Mat> invCovsEigenValues;\n    Mat logWeightDivDet;\n};\n} // namespace cv\n\n/****************************************************************************************\\\n*                                      Decision Tree                                     *\n\\****************************************************************************************/\\\nstruct CvPair16u32s\n{\n    unsigned short* u;\n    int* i;\n};\n\n\n#define CV_DTREE_CAT_DIR(idx,subset) \\\n    (2*((subset[(idx)>>5]&(1 << ((idx) & 31)))==0)-1)\n\nstruct CvDTreeSplit\n{\n    int var_idx;\n    int condensed_idx;\n    int inversed;\n    float quality;\n    CvDTreeSplit* next;\n    union\n    {\n        int subset[2];\n        struct\n        {\n            float c;\n            int split_point;\n        }\n        ord;\n    };\n};\n\nstruct CvDTreeNode\n{\n    int class_idx;\n    int Tn;\n    double value;\n\n    CvDTreeNode* parent;\n    CvDTreeNode* left;\n    CvDTreeNode* right;\n\n    CvDTreeSplit* split;\n\n    int sample_count;\n    int depth;\n    int* num_valid;\n    int offset;\n    int buf_idx;\n    double maxlr;\n\n    // global pruning data\n    int complexity;\n    double alpha;\n    double node_risk, tree_risk, tree_error;\n\n    // cross-validation pruning data\n    int* cv_Tn;\n    double* cv_node_risk;\n    double* cv_node_error;\n\n    int get_num_valid(int vi) { return num_valid ? num_valid[vi] : sample_count; }\n    void set_num_valid(int vi, int n) { if( num_valid ) num_valid[vi] = n; }\n};\n\n\nstruct CV_EXPORTS_W_MAP CvDTreeParams\n{\n    CV_PROP_RW int   max_categories;\n    CV_PROP_RW int   max_depth;\n    CV_PROP_RW int   min_sample_count;\n    CV_PROP_RW int   cv_folds;\n    CV_PROP_RW bool  use_surrogates;\n    CV_PROP_RW bool  use_1se_rule;\n    CV_PROP_RW bool  truncate_pruned_tree;\n    CV_PROP_RW float regression_accuracy;\n    const float* priors;\n\n    CvDTreeParams();\n    CvDTreeParams( int max_depth, int min_sample_count,\n                   float regression_accuracy, bool use_surrogates,\n                   int max_categories, int cv_folds,\n                   bool use_1se_rule, bool truncate_pruned_tree,\n                   const float* priors );\n};\n\n\nstruct CV_EXPORTS CvDTreeTrainData\n{\n    CvDTreeTrainData();\n    CvDTreeTrainData( const CvMat* trainData, int tflag,\n                      const CvMat* responses, const CvMat* varIdx=0,\n                      const CvMat* sampleIdx=0, const CvMat* varType=0,\n                      const CvMat* missingDataMask=0,\n                      const CvDTreeParams& params=CvDTreeParams(),\n                      bool _shared=false, bool _add_labels=false );\n    virtual ~CvDTreeTrainData();\n\n    virtual void set_data( const CvMat* trainData, int tflag,\n                          const CvMat* responses, const CvMat* varIdx=0,\n                          const CvMat* sampleIdx=0, const CvMat* varType=0,\n                          const CvMat* missingDataMask=0,\n                          const CvDTreeParams& params=CvDTreeParams(),\n                          bool _shared=false, bool _add_labels=false,\n                          bool _update_data=false );\n    virtual void do_responses_copy();\n\n    virtual void get_vectors( const CvMat* _subsample_idx,\n         float* values, uchar* missing, float* responses, bool get_class_idx=false );\n\n    virtual CvDTreeNode* subsample_data( const CvMat* _subsample_idx );\n\n    virtual void write_params( CvFileStorage* fs ) const;\n    virtual void read_params( CvFileStorage* fs, CvFileNode* node );\n\n    // release all the data\n    virtual void clear();\n\n    int get_num_classes() const;\n    int get_var_type(int vi) const;\n    int get_work_var_count() const {return work_var_count;}\n\n    virtual const float* get_ord_responses( CvDTreeNode* n, float* values_buf, int* sample_indices_buf );\n    virtual const int* get_class_labels( CvDTreeNode* n, int* labels_buf );\n    virtual const int* get_cv_labels( CvDTreeNode* n, int* labels_buf );\n    virtual const int* get_sample_indices( CvDTreeNode* n, int* indices_buf );\n    virtual const int* get_cat_var_data( CvDTreeNode* n, int vi, int* cat_values_buf );\n    virtual void get_ord_var_data( CvDTreeNode* n, int vi, float* ord_values_buf, int* sorted_indices_buf,\n                                   const float** ord_values, const int** sorted_indices, int* sample_indices_buf );\n    virtual int get_child_buf_idx( CvDTreeNode* n );\n\n    ////////////////////////////////////\n\n    virtual bool set_params( const CvDTreeParams& params );\n    virtual CvDTreeNode* new_node( CvDTreeNode* parent, int count,\n                                   int storage_idx, int offset );\n\n    virtual CvDTreeSplit* new_split_ord( int vi, float cmp_val,\n                int split_point, int inversed, float quality );\n    virtual CvDTreeSplit* new_split_cat( int vi, float quality );\n    virtual void free_node_data( CvDTreeNode* node );\n    virtual void free_train_data();\n    virtual void free_node( CvDTreeNode* node );\n\n    int sample_count, var_all, var_count, max_c_count;\n    int ord_var_count, cat_var_count, work_var_count;\n    bool have_labels, have_priors;\n    bool is_classifier;\n    int tflag;\n\n    const CvMat* train_data;\n    const CvMat* responses;\n    CvMat* responses_copy; // used in Boosting\n\n    int buf_count, buf_size; // buf_size is obsolete, please do not use it, use expression ((int64)buf->rows * (int64)buf->cols / buf_count) instead\n    bool shared;\n    int is_buf_16u;\n\n    CvMat* cat_count;\n    CvMat* cat_ofs;\n    CvMat* cat_map;\n\n    CvMat* counts;\n    CvMat* buf;\n    inline size_t get_length_subbuf() const\n    {\n        size_t res = (size_t)(work_var_count + 1) * (size_t)sample_count;\n        return res;\n    }\n\n    CvMat* direction;\n    CvMat* split_buf;\n\n    CvMat* var_idx;\n    CvMat* var_type; // i-th element =\n                     //   k<0  - ordered\n                     //   k>=0 - categorical, see k-th element of cat_* arrays\n    CvMat* priors;\n    CvMat* priors_mult;\n\n    CvDTreeParams params;\n\n    CvMemStorage* tree_storage;\n    CvMemStorage* temp_storage;\n\n    CvDTreeNode* data_root;\n\n    CvSet* node_heap;\n    CvSet* split_heap;\n    CvSet* cv_heap;\n    CvSet* nv_heap;\n\n    cv::RNG* rng;\n};\n\nclass CvDTree;\nclass CvForestTree;\n\nnamespace cv\n{\n    struct DTreeBestSplitFinder;\n    struct ForestTreeBestSplitFinder;\n}\n\nclass CV_EXPORTS_W CvDTree : public CvStatModel\n{\npublic:\n    CV_WRAP CvDTree();\n    virtual ~CvDTree();\n\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvDTreeParams params=CvDTreeParams() );\n\n    virtual bool train( CvMLData* trainData, CvDTreeParams params=CvDTreeParams() );\n\n    // type in {CV_TRAIN_ERROR, CV_TEST_ERROR}\n    virtual float calc_error( CvMLData* trainData, int type, std::vector<float> *resp = 0 );\n\n    virtual bool train( CvDTreeTrainData* trainData, const CvMat* subsampleIdx );\n\n    virtual CvDTreeNode* predict( const CvMat* sample, const CvMat* missingDataMask=0,\n                                  bool preprocessedInput=false ) const;\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvDTreeParams params=CvDTreeParams() );\n\n    CV_WRAP virtual CvDTreeNode* predict( const cv::Mat& sample, const cv::Mat& missingDataMask=cv::Mat(),\n                                  bool preprocessedInput=false ) const;\n    CV_WRAP virtual cv::Mat getVarImportance();\n\n    virtual const CvMat* get_var_importance();\n    CV_WRAP virtual void clear();\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void write( CvFileStorage* fs, const char* name ) const;\n\n    // special read & write methods for trees in the tree ensembles\n    virtual void read( CvFileStorage* fs, CvFileNode* node,\n                       CvDTreeTrainData* data );\n    virtual void write( CvFileStorage* fs ) const;\n\n    const CvDTreeNode* get_root() const;\n    int get_pruned_tree_idx() const;\n    CvDTreeTrainData* get_data();\n\nprotected:\n    friend struct cv::DTreeBestSplitFinder;\n\n    virtual bool do_train( const CvMat* _subsample_idx );\n\n    virtual void try_split_node( CvDTreeNode* n );\n    virtual void split_node_data( CvDTreeNode* n );\n    virtual CvDTreeSplit* find_best_split( CvDTreeNode* n );\n    virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi,\n                            float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi,\n                            float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi,\n                            float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi,\n                            float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_surrogate_split_ord( CvDTreeNode* n, int vi, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_surrogate_split_cat( CvDTreeNode* n, int vi, uchar* ext_buf = 0 );\n    virtual double calc_node_dir( CvDTreeNode* node );\n    virtual void complete_node_dir( CvDTreeNode* node );\n    virtual void cluster_categories( const int* vectors, int vector_count,\n        int var_count, int* sums, int k, int* cluster_labels );\n\n    virtual void calc_node_value( CvDTreeNode* node );\n\n    virtual void prune_cv();\n    virtual double update_tree_rnc( int T, int fold );\n    virtual int cut_tree( int T, int fold, double min_alpha );\n    virtual void free_prune_data(bool cut_tree);\n    virtual void free_tree();\n\n    virtual void write_node( CvFileStorage* fs, CvDTreeNode* node ) const;\n    virtual void write_split( CvFileStorage* fs, CvDTreeSplit* split ) const;\n    virtual CvDTreeNode* read_node( CvFileStorage* fs, CvFileNode* node, CvDTreeNode* parent );\n    virtual CvDTreeSplit* read_split( CvFileStorage* fs, CvFileNode* node );\n    virtual void write_tree_nodes( CvFileStorage* fs ) const;\n    virtual void read_tree_nodes( CvFileStorage* fs, CvFileNode* node );\n\n    CvDTreeNode* root;\n    CvMat* var_importance;\n    CvDTreeTrainData* data;\n\npublic:\n    int pruned_tree_idx;\n};\n\n\n/****************************************************************************************\\\n*                                   Random Trees Classifier                              *\n\\****************************************************************************************/\n\nclass CvRTrees;\n\nclass CV_EXPORTS CvForestTree: public CvDTree\n{\npublic:\n    CvForestTree();\n    virtual ~CvForestTree();\n\n    virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx, CvRTrees* forest );\n\n    virtual int get_var_count() const {return data ? data->var_count : 0;}\n    virtual void read( CvFileStorage* fs, CvFileNode* node, CvRTrees* forest, CvDTreeTrainData* _data );\n\n    /* dummy methods to avoid warnings: BEGIN */\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvDTreeParams params=CvDTreeParams() );\n\n    virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx );\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void read( CvFileStorage* fs, CvFileNode* node,\n                       CvDTreeTrainData* data );\n    /* dummy methods to avoid warnings: END */\n\nprotected:\n    friend struct cv::ForestTreeBestSplitFinder;\n\n    virtual CvDTreeSplit* find_best_split( CvDTreeNode* n );\n    CvRTrees* forest;\n};\n\n\nstruct CV_EXPORTS_W_MAP CvRTParams : public CvDTreeParams\n{\n    //Parameters for the forest\n    CV_PROP_RW bool calc_var_importance; // true <=> RF processes variable importance\n    CV_PROP_RW int nactive_vars;\n    CV_PROP_RW CvTermCriteria term_crit;\n\n    CvRTParams();\n    CvRTParams( int max_depth, int min_sample_count,\n                float regression_accuracy, bool use_surrogates,\n                int max_categories, const float* priors, bool calc_var_importance,\n                int nactive_vars, int max_num_of_trees_in_the_forest,\n                float forest_accuracy, int termcrit_type );\n};\n\n\nclass CV_EXPORTS_W CvRTrees : public CvStatModel\n{\npublic:\n    CV_WRAP CvRTrees();\n    virtual ~CvRTrees();\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvRTParams params=CvRTParams() );\n\n    virtual bool train( CvMLData* data, CvRTParams params=CvRTParams() );\n    virtual float predict( const CvMat* sample, const CvMat* missing = 0 ) const;\n    virtual float predict_prob( const CvMat* sample, const CvMat* missing = 0 ) const;\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvRTParams params=CvRTParams() );\n    CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing = cv::Mat() ) const;\n    CV_WRAP virtual float predict_prob( const cv::Mat& sample, const cv::Mat& missing = cv::Mat() ) const;\n    CV_WRAP virtual cv::Mat getVarImportance();\n\n    CV_WRAP virtual void clear();\n\n    virtual const CvMat* get_var_importance();\n    virtual float get_proximity( const CvMat* sample1, const CvMat* sample2,\n        const CvMat* missing1 = 0, const CvMat* missing2 = 0 ) const;\n\n    virtual float calc_error( CvMLData* data, int type , std::vector<float>* resp = 0 ); // type in {CV_TRAIN_ERROR, CV_TEST_ERROR}\n\n    virtual float get_train_error();\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void write( CvFileStorage* fs, const char* name ) const;\n\n    CvMat* get_active_var_mask();\n    CvRNG* get_rng();\n\n    int get_tree_count() const;\n    CvForestTree* get_tree(int i) const;\n\nprotected:\n    virtual std::string getName() const;\n\n    virtual bool grow_forest( const CvTermCriteria term_crit );\n\n    // array of the trees of the forest\n    CvForestTree** trees;\n    CvDTreeTrainData* data;\n    int ntrees;\n    int nclasses;\n    double oob_error;\n    CvMat* var_importance;\n    int nsamples;\n\n    cv::RNG* rng;\n    CvMat* active_var_mask;\n};\n\n/****************************************************************************************\\\n*                           Extremely randomized trees Classifier                        *\n\\****************************************************************************************/\nstruct CV_EXPORTS CvERTreeTrainData : public CvDTreeTrainData\n{\n    virtual void set_data( const CvMat* trainData, int tflag,\n                          const CvMat* responses, const CvMat* varIdx=0,\n                          const CvMat* sampleIdx=0, const CvMat* varType=0,\n                          const CvMat* missingDataMask=0,\n                          const CvDTreeParams& params=CvDTreeParams(),\n                          bool _shared=false, bool _add_labels=false,\n                          bool _update_data=false );\n    virtual void get_ord_var_data( CvDTreeNode* n, int vi, float* ord_values_buf, int* missing_buf,\n                                   const float** ord_values, const int** missing, int* sample_buf = 0 );\n    virtual const int* get_sample_indices( CvDTreeNode* n, int* indices_buf );\n    virtual const int* get_cv_labels( CvDTreeNode* n, int* labels_buf );\n    virtual const int* get_cat_var_data( CvDTreeNode* n, int vi, int* cat_values_buf );\n    virtual void get_vectors( const CvMat* _subsample_idx, float* values, uchar* missing,\n                              float* responses, bool get_class_idx=false );\n    virtual CvDTreeNode* subsample_data( const CvMat* _subsample_idx );\n    const CvMat* missing_mask;\n};\n\nclass CV_EXPORTS CvForestERTree : public CvForestTree\n{\nprotected:\n    virtual double calc_node_dir( CvDTreeNode* node );\n    virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual void split_node_data( CvDTreeNode* n );\n};\n\nclass CV_EXPORTS_W CvERTrees : public CvRTrees\n{\npublic:\n    CV_WRAP CvERTrees();\n    virtual ~CvERTrees();\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvRTParams params=CvRTParams());\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvRTParams params=CvRTParams());\n    virtual bool train( CvMLData* data, CvRTParams params=CvRTParams() );\nprotected:\n    virtual std::string getName() const;\n    virtual bool grow_forest( const CvTermCriteria term_crit );\n};\n\n\n/****************************************************************************************\\\n*                                   Boosted tree classifier                              *\n\\****************************************************************************************/\n\nstruct CV_EXPORTS_W_MAP CvBoostParams : public CvDTreeParams\n{\n    CV_PROP_RW int boost_type;\n    CV_PROP_RW int weak_count;\n    CV_PROP_RW int split_criteria;\n    CV_PROP_RW double weight_trim_rate;\n\n    CvBoostParams();\n    CvBoostParams( int boost_type, int weak_count, double weight_trim_rate,\n                   int max_depth, bool use_surrogates, const float* priors );\n};\n\n\nclass CvBoost;\n\nclass CV_EXPORTS CvBoostTree: public CvDTree\n{\npublic:\n    CvBoostTree();\n    virtual ~CvBoostTree();\n\n    virtual bool train( CvDTreeTrainData* trainData,\n                        const CvMat* subsample_idx, CvBoost* ensemble );\n\n    virtual void scale( double s );\n    virtual void read( CvFileStorage* fs, CvFileNode* node,\n                       CvBoost* ensemble, CvDTreeTrainData* _data );\n    virtual void clear();\n\n    /* dummy methods to avoid warnings: BEGIN */\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvDTreeParams params=CvDTreeParams() );\n    virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx );\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void read( CvFileStorage* fs, CvFileNode* node,\n                       CvDTreeTrainData* data );\n    /* dummy methods to avoid warnings: END */\n\nprotected:\n\n    virtual void try_split_node( CvDTreeNode* n );\n    virtual CvDTreeSplit* find_surrogate_split_ord( CvDTreeNode* n, int vi, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_surrogate_split_cat( CvDTreeNode* n, int vi, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual void calc_node_value( CvDTreeNode* n );\n    virtual double calc_node_dir( CvDTreeNode* n );\n\n    CvBoost* ensemble;\n};\n\n\nclass CV_EXPORTS_W CvBoost : public CvStatModel\n{\npublic:\n    // Boosting type\n    enum { DISCRETE=0, REAL=1, LOGIT=2, GENTLE=3 };\n\n    // Splitting criteria\n    enum { DEFAULT=0, GINI=1, MISCLASS=3, SQERR=4 };\n\n    CV_WRAP CvBoost();\n    virtual ~CvBoost();\n\n    CvBoost( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvBoostParams params=CvBoostParams() );\n\n    virtual bool train( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvBoostParams params=CvBoostParams(),\n             bool update=false );\n\n    virtual bool train( CvMLData* data,\n             CvBoostParams params=CvBoostParams(),\n             bool update=false );\n\n    virtual float predict( const CvMat* sample, const CvMat* missing=0,\n                           CvMat* weak_responses=0, CvSlice slice=CV_WHOLE_SEQ,\n                           bool raw_mode=false, bool return_sum=false ) const;\n\n    CV_WRAP CvBoost( const cv::Mat& trainData, int tflag,\n            const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n            const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n            const cv::Mat& missingDataMask=cv::Mat(),\n            CvBoostParams params=CvBoostParams() );\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvBoostParams params=CvBoostParams(),\n                       bool update=false );\n\n    CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing=cv::Mat(),\n                                   const cv::Range& slice=cv::Range::all(), bool rawMode=false,\n                                   bool returnSum=false ) const;\n\n    virtual float calc_error( CvMLData* _data, int type , std::vector<float> *resp = 0 ); // type in {CV_TRAIN_ERROR, CV_TEST_ERROR}\n\n    CV_WRAP virtual void prune( CvSlice slice );\n\n    CV_WRAP virtual void clear();\n\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n    virtual void read( CvFileStorage* storage, CvFileNode* node );\n    virtual const CvMat* get_active_vars(bool absolute_idx=true);\n\n    CvSeq* get_weak_predictors();\n\n    CvMat* get_weights();\n    CvMat* get_subtree_weights();\n    CvMat* get_weak_response();\n    const CvBoostParams& get_params() const;\n    const CvDTreeTrainData* get_data() const;\n\nprotected:\n\n    void update_weights_impl( CvBoostTree* tree, double initial_weights[2] );\n\n    virtual bool set_params( const CvBoostParams& params );\n    virtual void update_weights( CvBoostTree* tree );\n    virtual void trim_weights();\n    virtual void write_params( CvFileStorage* fs ) const;\n    virtual void read_params( CvFileStorage* fs, CvFileNode* node );\n\n    CvDTreeTrainData* data;\n    CvBoostParams params;\n    CvSeq* weak;\n\n    CvMat* active_vars;\n    CvMat* active_vars_abs;\n    bool have_active_cat_vars;\n\n    CvMat* orig_response;\n    CvMat* sum_response;\n    CvMat* weak_eval;\n    CvMat* subsample_mask;\n    CvMat* weights;\n    CvMat* subtree_weights;\n    bool have_subsample;\n};\n\n\n/****************************************************************************************\\\n*                                   Gradient Boosted Trees                               *\n\\****************************************************************************************/\n\n// DataType: STRUCT CvGBTreesParams\n// Parameters of GBT (Gradient Boosted trees model), including single\n// tree settings and ensemble parameters.\n//\n// weak_count          - count of trees in the ensemble\n// loss_function_type  - loss function used for ensemble training\n// subsample_portion   - portion of whole training set used for\n//                       every single tree training.\n//                       subsample_portion value is in (0.0, 1.0].\n//                       subsample_portion == 1.0 when whole dataset is\n//                       used on each step. Count of sample used on each\n//                       step is computed as\n//                       int(total_samples_count * subsample_portion).\n// shrinkage           - regularization parameter.\n//                       Each tree prediction is multiplied on shrinkage value.\n\n\nstruct CV_EXPORTS_W_MAP CvGBTreesParams : public CvDTreeParams\n{\n    CV_PROP_RW int weak_count;\n    CV_PROP_RW int loss_function_type;\n    CV_PROP_RW float subsample_portion;\n    CV_PROP_RW float shrinkage;\n\n    CvGBTreesParams();\n    CvGBTreesParams( int loss_function_type, int weak_count, float shrinkage,\n        float subsample_portion, int max_depth, bool use_surrogates );\n};\n\n// DataType: CLASS CvGBTrees\n// Gradient Boosting Trees (GBT) algorithm implementation.\n//\n// data             - training dataset\n// params           - parameters of the CvGBTrees\n// weak             - array[0..(class_count-1)] of CvSeq\n//                    for storing tree ensembles\n// orig_response    - original responses of the training set samples\n// sum_response     - predicitons of the current model on the training dataset.\n//                    this matrix is updated on every iteration.\n// sum_response_tmp - predicitons of the model on the training set on the next\n//                    step. On every iteration values of sum_responses_tmp are\n//                    computed via sum_responses values. When the current\n//                    step is complete sum_response values become equal to\n//                    sum_responses_tmp.\n// sampleIdx       - indices of samples used for training the ensemble.\n//                    CvGBTrees training procedure takes a set of samples\n//                    (train_data) and a set of responses (responses).\n//                    Only pairs (train_data[i], responses[i]), where i is\n//                    in sample_idx are used for training the ensemble.\n// subsample_train  - indices of samples used for training a single decision\n//                    tree on the current step. This indices are countered\n//                    relatively to the sample_idx, so that pairs\n//                    (train_data[sample_idx[i]], responses[sample_idx[i]])\n//                    are used for training a decision tree.\n//                    Training set is randomly splited\n//                    in two parts (subsample_train and subsample_test)\n//                    on every iteration accordingly to the portion parameter.\n// subsample_test   - relative indices of samples from the training set,\n//                    which are not used for training a tree on the current\n//                    step.\n// missing          - mask of the missing values in the training set. This\n//                    matrix has the same size as train_data. 1 - missing\n//                    value, 0 - not a missing value.\n// class_labels     - output class labels map.\n// rng              - random number generator. Used for spliting the\n//                    training set.\n// class_count      - count of output classes.\n//                    class_count == 1 in the case of regression,\n//                    and > 1 in the case of classification.\n// delta            - Huber loss function parameter.\n// base_value       - start point of the gradient descent procedure.\n//                    model prediction is\n//                    f(x) = f_0 + sum_{i=1..weak_count-1}(f_i(x)), where\n//                    f_0 is the base value.\n\n\n\nclass CV_EXPORTS_W CvGBTrees : public CvStatModel\n{\npublic:\n\n    /*\n    // DataType: ENUM\n    // Loss functions implemented in CvGBTrees.\n    //\n    // SQUARED_LOSS\n    // problem: regression\n    // loss = (x - x')^2\n    //\n    // ABSOLUTE_LOSS\n    // problem: regression\n    // loss = abs(x - x')\n    //\n    // HUBER_LOSS\n    // problem: regression\n    // loss = delta*( abs(x - x') - delta/2), if abs(x - x') > delta\n    //           1/2*(x - x')^2, if abs(x - x') <= delta,\n    //           where delta is the alpha-quantile of pseudo responses from\n    //           the training set.\n    //\n    // DEVIANCE_LOSS\n    // problem: classification\n    //\n    */\n    enum {SQUARED_LOSS=0, ABSOLUTE_LOSS, HUBER_LOSS=3, DEVIANCE_LOSS};\n\n\n    /*\n    // Default constructor. Creates a model only (without training).\n    // Should be followed by one form of the train(...) function.\n    //\n    // API\n    // CvGBTrees();\n\n    // INPUT\n    // OUTPUT\n    // RESULT\n    */\n    CV_WRAP CvGBTrees();\n\n\n    /*\n    // Full form constructor. Creates a gradient boosting model and does the\n    // train.\n    //\n    // API\n    // CvGBTrees( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvGBTreesParams params=CvGBTreesParams() );\n\n    // INPUT\n    // trainData    - a set of input feature vectors.\n    //                  size of matrix is\n    //                  <count of samples> x <variables count>\n    //                  or <variables count> x <count of samples>\n    //                  depending on the tflag parameter.\n    //                  matrix values are float.\n    // tflag         - a flag showing how do samples stored in the\n    //                  trainData matrix row by row (tflag=CV_ROW_SAMPLE)\n    //                  or column by column (tflag=CV_COL_SAMPLE).\n    // responses     - a vector of responses corresponding to the samples\n    //                  in trainData.\n    // varIdx       - indices of used variables. zero value means that all\n    //                  variables are active.\n    // sampleIdx    - indices of used samples. zero value means that all\n    //                  samples from trainData are in the training set.\n    // varType      - vector of <variables count> length. gives every\n    //                  variable type CV_VAR_CATEGORICAL or CV_VAR_ORDERED.\n    //                  varType = 0 means all variables are numerical.\n    // missingDataMask  - a mask of misiing values in trainData.\n    //                  missingDataMask = 0 means that there are no missing\n    //                  values.\n    // params         - parameters of GTB algorithm.\n    // OUTPUT\n    // RESULT\n    */\n    CvGBTrees( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvGBTreesParams params=CvGBTreesParams() );\n\n\n    /*\n    // Destructor.\n    */\n    virtual ~CvGBTrees();\n\n\n    /*\n    // Gradient tree boosting model training\n    //\n    // API\n    // virtual bool train( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvGBTreesParams params=CvGBTreesParams(),\n             bool update=false );\n\n    // INPUT\n    // trainData    - a set of input feature vectors.\n    //                  size of matrix is\n    //                  <count of samples> x <variables count>\n    //                  or <variables count> x <count of samples>\n    //                  depending on the tflag parameter.\n    //                  matrix values are float.\n    // tflag         - a flag showing how do samples stored in the\n    //                  trainData matrix row by row (tflag=CV_ROW_SAMPLE)\n    //                  or column by column (tflag=CV_COL_SAMPLE).\n    // responses     - a vector of responses corresponding to the samples\n    //                  in trainData.\n    // varIdx       - indices of used variables. zero value means that all\n    //                  variables are active.\n    // sampleIdx    - indices of used samples. zero value means that all\n    //                  samples from trainData are in the training set.\n    // varType      - vector of <variables count> length. gives every\n    //                  variable type CV_VAR_CATEGORICAL or CV_VAR_ORDERED.\n    //                  varType = 0 means all variables are numerical.\n    // missingDataMask  - a mask of misiing values in trainData.\n    //                  missingDataMask = 0 means that there are no missing\n    //                  values.\n    // params         - parameters of GTB algorithm.\n    // update         - is not supported now. (!)\n    // OUTPUT\n    // RESULT\n    // Error state.\n    */\n    virtual bool train( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvGBTreesParams params=CvGBTreesParams(),\n             bool update=false );\n\n\n    /*\n    // Gradient tree boosting model training\n    //\n    // API\n    // virtual bool train( CvMLData* data,\n             CvGBTreesParams params=CvGBTreesParams(),\n             bool update=false ) {return false;};\n\n    // INPUT\n    // data          - training set.\n    // params        - parameters of GTB algorithm.\n    // update        - is not supported now. (!)\n    // OUTPUT\n    // RESULT\n    // Error state.\n    */\n    virtual bool train( CvMLData* data,\n             CvGBTreesParams params=CvGBTreesParams(),\n             bool update=false );\n\n\n    /*\n    // Response value prediction\n    //\n    // API\n    // virtual float predict_serial( const CvMat* sample, const CvMat* missing=0,\n             CvMat* weak_responses=0, CvSlice slice = CV_WHOLE_SEQ,\n             int k=-1 ) const;\n\n    // INPUT\n    // sample         - input sample of the same type as in the training set.\n    // missing        - missing values mask. missing=0 if there are no\n    //                   missing values in sample vector.\n    // weak_responses  - predictions of all of the trees.\n    //                   not implemented (!)\n    // slice           - part of the ensemble used for prediction.\n    //                   slice = CV_WHOLE_SEQ when all trees are used.\n    // k               - number of ensemble used.\n    //                   k is in {-1,0,1,..,<count of output classes-1>}.\n    //                   in the case of classification problem\n    //                   <count of output classes-1> ensembles are built.\n    //                   If k = -1 ordinary prediction is the result,\n    //                   otherwise function gives the prediction of the\n    //                   k-th ensemble only.\n    // OUTPUT\n    // RESULT\n    // Predicted value.\n    */\n    virtual float predict_serial( const CvMat* sample, const CvMat* missing=0,\n            CvMat* weakResponses=0, CvSlice slice = CV_WHOLE_SEQ,\n            int k=-1 ) const;\n\n    /*\n    // Response value prediction.\n    // Parallel version (in the case of TBB existence)\n    //\n    // API\n    // virtual float predict( const CvMat* sample, const CvMat* missing=0,\n             CvMat* weak_responses=0, CvSlice slice = CV_WHOLE_SEQ,\n             int k=-1 ) const;\n\n    // INPUT\n    // sample         - input sample of the same type as in the training set.\n    // missing        - missing values mask. missing=0 if there are no\n    //                   missing values in sample vector.\n    // weak_responses  - predictions of all of the trees.\n    //                   not implemented (!)\n    // slice           - part of the ensemble used for prediction.\n    //                   slice = CV_WHOLE_SEQ when all trees are used.\n    // k               - number of ensemble used.\n    //                   k is in {-1,0,1,..,<count of output classes-1>}.\n    //                   in the case of classification problem\n    //                   <count of output classes-1> ensembles are built.\n    //                   If k = -1 ordinary prediction is the result,\n    //                   otherwise function gives the prediction of the\n    //                   k-th ensemble only.\n    // OUTPUT\n    // RESULT\n    // Predicted value.\n    */\n    virtual float predict( const CvMat* sample, const CvMat* missing=0,\n            CvMat* weakResponses=0, CvSlice slice = CV_WHOLE_SEQ,\n            int k=-1 ) const;\n\n    /*\n    // Deletes all the data.\n    //\n    // API\n    // virtual void clear();\n\n    // INPUT\n    // OUTPUT\n    // delete data, weak, orig_response, sum_response,\n    //        weak_eval, subsample_train, subsample_test,\n    //        sample_idx, missing, lass_labels\n    // delta = 0.0\n    // RESULT\n    */\n    CV_WRAP virtual void clear();\n\n    /*\n    // Compute error on the train/test set.\n    //\n    // API\n    // virtual float calc_error( CvMLData* _data, int type,\n    //        std::vector<float> *resp = 0 );\n    //\n    // INPUT\n    // data  - dataset\n    // type  - defines which error is to compute: train (CV_TRAIN_ERROR) or\n    //         test (CV_TEST_ERROR).\n    // OUTPUT\n    // resp  - vector of predicitons\n    // RESULT\n    // Error value.\n    */\n    virtual float calc_error( CvMLData* _data, int type,\n            std::vector<float> *resp = 0 );\n\n    /*\n    //\n    // Write parameters of the gtb model and data. Write learned model.\n    //\n    // API\n    // virtual void write( CvFileStorage* fs, const char* name ) const;\n    //\n    // INPUT\n    // fs     - file storage to read parameters from.\n    // name   - model name.\n    // OUTPUT\n    // RESULT\n    */\n    virtual void write( CvFileStorage* fs, const char* name ) const;\n\n\n    /*\n    //\n    // Read parameters of the gtb model and data. Read learned model.\n    //\n    // API\n    // virtual void read( CvFileStorage* fs, CvFileNode* node );\n    //\n    // INPUT\n    // fs     - file storage to read parameters from.\n    // node   - file node.\n    // OUTPUT\n    // RESULT\n    */\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n\n\n    // new-style C++ interface\n    CV_WRAP CvGBTrees( const cv::Mat& trainData, int tflag,\n              const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n              const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n              const cv::Mat& missingDataMask=cv::Mat(),\n              CvGBTreesParams params=CvGBTreesParams() );\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvGBTreesParams params=CvGBTreesParams(),\n                       bool update=false );\n\n    CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing=cv::Mat(),\n                           const cv::Range& slice = cv::Range::all(),\n                           int k=-1 ) const;\n\nprotected:\n\n    /*\n    // Compute the gradient vector components.\n    //\n    // API\n    // virtual void find_gradient( const int k = 0);\n\n    // INPUT\n    // k        - used for classification problem, determining current\n    //            tree ensemble.\n    // OUTPUT\n    // changes components of data->responses\n    // which correspond to samples used for training\n    // on the current step.\n    // RESULT\n    */\n    virtual void find_gradient( const int k = 0);\n\n\n    /*\n    //\n    // Change values in tree leaves according to the used loss function.\n    //\n    // API\n    // virtual void change_values(CvDTree* tree, const int k = 0);\n    //\n    // INPUT\n    // tree      - decision tree to change.\n    // k         - used for classification problem, determining current\n    //             tree ensemble.\n    // OUTPUT\n    // changes 'value' fields of the trees' leaves.\n    // changes sum_response_tmp.\n    // RESULT\n    */\n    virtual void change_values(CvDTree* tree, const int k = 0);\n\n\n    /*\n    //\n    // Find optimal constant prediction value according to the used loss\n    // function.\n    // The goal is to find a constant which gives the minimal summary loss\n    // on the _Idx samples.\n    //\n    // API\n    // virtual float find_optimal_value( const CvMat* _Idx );\n    //\n    // INPUT\n    // _Idx        - indices of the samples from the training set.\n    // OUTPUT\n    // RESULT\n    // optimal constant value.\n    */\n    virtual float find_optimal_value( const CvMat* _Idx );\n\n\n    /*\n    //\n    // Randomly split the whole training set in two parts according\n    // to params.portion.\n    //\n    // API\n    // virtual void do_subsample();\n    //\n    // INPUT\n    // OUTPUT\n    // subsample_train - indices of samples used for training\n    // subsample_test  - indices of samples used for test\n    // RESULT\n    */\n    virtual void do_subsample();\n\n\n    /*\n    //\n    // Internal recursive function giving an array of subtree tree leaves.\n    //\n    // API\n    // void leaves_get( CvDTreeNode** leaves, int& count, CvDTreeNode* node );\n    //\n    // INPUT\n    // node         - current leaf.\n    // OUTPUT\n    // count        - count of leaves in the subtree.\n    // leaves       - array of pointers to leaves.\n    // RESULT\n    */\n    void leaves_get( CvDTreeNode** leaves, int& count, CvDTreeNode* node );\n\n\n    /*\n    //\n    // Get leaves of the tree.\n    //\n    // API\n    // CvDTreeNode** GetLeaves( const CvDTree* dtree, int& len );\n    //\n    // INPUT\n    // dtree            - decision tree.\n    // OUTPUT\n    // len              - count of the leaves.\n    // RESULT\n    // CvDTreeNode**    - array of pointers to leaves.\n    */\n    CvDTreeNode** GetLeaves( const CvDTree* dtree, int& len );\n\n\n    /*\n    //\n    // Is it a regression or a classification.\n    //\n    // API\n    // bool problem_type();\n    //\n    // INPUT\n    // OUTPUT\n    // RESULT\n    // false if it is a classification problem,\n    // true - if regression.\n    */\n    virtual bool problem_type() const;\n\n\n    /*\n    //\n    // Write parameters of the gtb model.\n    //\n    // API\n    // virtual void write_params( CvFileStorage* fs ) const;\n    //\n    // INPUT\n    // fs           - file storage to write parameters to.\n    // OUTPUT\n    // RESULT\n    */\n    virtual void write_params( CvFileStorage* fs ) const;\n\n\n    /*\n    //\n    // Read parameters of the gtb model and data.\n    //\n    // API\n    // virtual void read_params( CvFileStorage* fs );\n    //\n    // INPUT\n    // fs           - file storage to read parameters from.\n    // OUTPUT\n    // params       - parameters of the gtb model.\n    // data         - contains information about the structure\n    //                of the data set (count of variables,\n    //                their types, etc.).\n    // class_labels - output class labels map.\n    // RESULT\n    */\n    virtual void read_params( CvFileStorage* fs, CvFileNode* fnode );\n    int get_len(const CvMat* mat) const;\n\n\n    CvDTreeTrainData* data;\n    CvGBTreesParams params;\n\n    CvSeq** weak;\n    CvMat* orig_response;\n    CvMat* sum_response;\n    CvMat* sum_response_tmp;\n    CvMat* sample_idx;\n    CvMat* subsample_train;\n    CvMat* subsample_test;\n    CvMat* missing;\n    CvMat* class_labels;\n\n    cv::RNG* rng;\n\n    int class_count;\n    float delta;\n    float base_value;\n\n};\n\n\n\n/****************************************************************************************\\\n*                              Artificial Neural Networks (ANN)                          *\n\\****************************************************************************************/\n\n/////////////////////////////////// Multi-Layer Perceptrons //////////////////////////////\n\nstruct CV_EXPORTS_W_MAP CvANN_MLP_TrainParams\n{\n    CvANN_MLP_TrainParams();\n    CvANN_MLP_TrainParams( CvTermCriteria term_crit, int train_method,\n                           double param1, double param2=0 );\n    ~CvANN_MLP_TrainParams();\n\n    enum { BACKPROP=0, RPROP=1 };\n\n    CV_PROP_RW CvTermCriteria term_crit;\n    CV_PROP_RW int train_method;\n\n    // backpropagation parameters\n    CV_PROP_RW double bp_dw_scale, bp_moment_scale;\n\n    // rprop parameters\n    CV_PROP_RW double rp_dw0, rp_dw_plus, rp_dw_minus, rp_dw_min, rp_dw_max;\n};\n\n\nclass CV_EXPORTS_W CvANN_MLP : public CvStatModel\n{\npublic:\n    CV_WRAP CvANN_MLP();\n    CvANN_MLP( const CvMat* layerSizes,\n               int activateFunc=CvANN_MLP::SIGMOID_SYM,\n               double fparam1=0, double fparam2=0 );\n\n    virtual ~CvANN_MLP();\n\n    virtual void create( const CvMat* layerSizes,\n                         int activateFunc=CvANN_MLP::SIGMOID_SYM,\n                         double fparam1=0, double fparam2=0 );\n\n    virtual int train( const CvMat* inputs, const CvMat* outputs,\n                       const CvMat* sampleWeights, const CvMat* sampleIdx=0,\n                       CvANN_MLP_TrainParams params = CvANN_MLP_TrainParams(),\n                       int flags=0 );\n    virtual float predict( const CvMat* inputs, CV_OUT CvMat* outputs ) const;\n\n    CV_WRAP CvANN_MLP( const cv::Mat& layerSizes,\n              int activateFunc=CvANN_MLP::SIGMOID_SYM,\n              double fparam1=0, double fparam2=0 );\n\n    CV_WRAP virtual void create( const cv::Mat& layerSizes,\n                        int activateFunc=CvANN_MLP::SIGMOID_SYM,\n                        double fparam1=0, double fparam2=0 );\n\n    CV_WRAP virtual int train( const cv::Mat& inputs, const cv::Mat& outputs,\n                      const cv::Mat& sampleWeights, const cv::Mat& sampleIdx=cv::Mat(),\n                      CvANN_MLP_TrainParams params = CvANN_MLP_TrainParams(),\n                      int flags=0 );\n\n    CV_WRAP virtual float predict( const cv::Mat& inputs, CV_OUT cv::Mat& outputs ) const;\n\n    CV_WRAP virtual void clear();\n\n    // possible activation functions\n    enum { IDENTITY = 0, SIGMOID_SYM = 1, GAUSSIAN = 2 };\n\n    // available training flags\n    enum { UPDATE_WEIGHTS = 1, NO_INPUT_SCALE = 2, NO_OUTPUT_SCALE = 4 };\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n\n    int get_layer_count() { return layer_sizes ? layer_sizes->cols : 0; }\n    const CvMat* get_layer_sizes() { return layer_sizes; }\n    double* get_weights(int layer)\n    {\n        return layer_sizes && weights &&\n            (unsigned)layer <= (unsigned)layer_sizes->cols ? weights[layer] : 0;\n    }\n\n    virtual void calc_activ_func_deriv( CvMat* xf, CvMat* deriv, const double* bias ) const;\n\nprotected:\n\n    virtual bool prepare_to_train( const CvMat* _inputs, const CvMat* _outputs,\n            const CvMat* _sample_weights, const CvMat* sampleIdx,\n            CvVectors* _ivecs, CvVectors* _ovecs, double** _sw, int _flags );\n\n    // sequential random backpropagation\n    virtual int train_backprop( CvVectors _ivecs, CvVectors _ovecs, const double* _sw );\n\n    // RPROP algorithm\n    virtual int train_rprop( CvVectors _ivecs, CvVectors _ovecs, const double* _sw );\n\n    virtual void calc_activ_func( CvMat* xf, const double* bias ) const;\n    virtual void set_activ_func( int _activ_func=SIGMOID_SYM,\n                                 double _f_param1=0, double _f_param2=0 );\n    virtual void init_weights();\n    virtual void scale_input( const CvMat* _src, CvMat* _dst ) const;\n    virtual void scale_output( const CvMat* _src, CvMat* _dst ) const;\n    virtual void calc_input_scale( const CvVectors* vecs, int flags );\n    virtual void calc_output_scale( const CvVectors* vecs, int flags );\n\n    virtual void write_params( CvFileStorage* fs ) const;\n    virtual void read_params( CvFileStorage* fs, CvFileNode* node );\n\n    CvMat* layer_sizes;\n    CvMat* wbuf;\n    CvMat* sample_weights;\n    double** weights;\n    double f_param1, f_param2;\n    double min_val, max_val, min_val1, max_val1;\n    int activ_func;\n    int max_count, max_buf_sz;\n    CvANN_MLP_TrainParams params;\n    cv::RNG* rng;\n};\n\n/****************************************************************************************\\\n*                           Auxilary functions declarations                              *\n\\****************************************************************************************/\n\n/* Generates <sample> from multivariate normal distribution, where <mean> - is an\n   average row vector, <cov> - symmetric covariation matrix */\nCVAPI(void) cvRandMVNormal( CvMat* mean, CvMat* cov, CvMat* sample,\n                           CvRNG* rng CV_DEFAULT(0) );\n\n/* Generates sample from gaussian mixture distribution */\nCVAPI(void) cvRandGaussMixture( CvMat* means[],\n                               CvMat* covs[],\n                               float weights[],\n                               int clsnum,\n                               CvMat* sample,\n                               CvMat* sampClasses CV_DEFAULT(0) );\n\n#define CV_TS_CONCENTRIC_SPHERES 0\n\n/* creates test set */\nCVAPI(void) cvCreateTestSet( int type, CvMat** samples,\n                 int num_samples,\n                 int num_features,\n                 CvMat** responses,\n                 int num_classes, ... );\n\n/****************************************************************************************\\\n*                                      Data                                             *\n\\****************************************************************************************/\n\n#define CV_COUNT     0\n#define CV_PORTION   1\n\nstruct CV_EXPORTS CvTrainTestSplit\n{\n    CvTrainTestSplit();\n    CvTrainTestSplit( int train_sample_count, bool mix = true);\n    CvTrainTestSplit( float train_sample_portion, bool mix = true);\n\n    union\n    {\n        int count;\n        float portion;\n    } train_sample_part;\n    int train_sample_part_mode;\n\n    bool mix;\n};\n\nclass CV_EXPORTS CvMLData\n{\npublic:\n    CvMLData();\n    virtual ~CvMLData();\n\n    // returns:\n    // 0 - OK\n    // -1 - file can not be opened or is not correct\n    int read_csv( const char* filename );\n\n    const CvMat* get_values() const;\n    const CvMat* get_responses();\n    const CvMat* get_missing() const;\n\n    void set_response_idx( int idx ); // old response become predictors, new response_idx = idx\n                                      // if idx < 0 there will be no response\n    int get_response_idx() const;\n\n    void set_train_test_split( const CvTrainTestSplit * spl );\n    const CvMat* get_train_sample_idx() const;\n    const CvMat* get_test_sample_idx() const;\n    void mix_train_and_test_idx();\n\n    const CvMat* get_var_idx();\n    void chahge_var_idx( int vi, bool state ); // misspelled (saved for back compitability),\n                                               // use change_var_idx\n    void change_var_idx( int vi, bool state ); // state == true to set vi-variable as predictor\n\n    const CvMat* get_var_types();\n    int get_var_type( int var_idx ) const;\n    // following 2 methods enable to change vars type\n    // use these methods to assign CV_VAR_CATEGORICAL type for categorical variable\n    // with numerical labels; in the other cases var types are correctly determined automatically\n    void set_var_types( const char* str );  // str examples:\n                                            // \"ord[0-17],cat[18]\", \"ord[0,2,4,10-12], cat[1,3,5-9,13,14]\",\n                                            // \"cat\", \"ord\" (all vars are categorical/ordered)\n    void change_var_type( int var_idx, int type); // type in { CV_VAR_ORDERED, CV_VAR_CATEGORICAL }\n\n    void set_delimiter( char ch );\n    char get_delimiter() const;\n\n    void set_miss_ch( char ch );\n    char get_miss_ch() const;\n\n    const std::map<std::string, int>& get_class_labels_map() const;\n\nprotected:\n    virtual void clear();\n\n    void str_to_flt_elem( const char* token, float& flt_elem, int& type);\n    void free_train_test_idx();\n\n    char delimiter;\n    char miss_ch;\n    //char flt_separator;\n\n    CvMat* values;\n    CvMat* missing;\n    CvMat* var_types;\n    CvMat* var_idx_mask;\n\n    CvMat* response_out; // header\n    CvMat* var_idx_out; // mat\n    CvMat* var_types_out; // mat\n\n    int response_idx;\n\n    int train_sample_count;\n    bool mix;\n\n    int total_class_count;\n    std::map<std::string, int> class_map;\n\n    CvMat* train_sample_idx;\n    CvMat* test_sample_idx;\n    int* sample_idx; // data of train_sample_idx and test_sample_idx\n\n    cv::RNG* rng;\n};\n\n\nnamespace cv\n{\n\ntypedef CvStatModel StatModel;\ntypedef CvParamGrid ParamGrid;\ntypedef CvNormalBayesClassifier NormalBayesClassifier;\ntypedef CvKNearest KNearest;\ntypedef CvSVMParams SVMParams;\ntypedef CvSVMKernel SVMKernel;\ntypedef CvSVMSolver SVMSolver;\ntypedef CvSVM SVM;\ntypedef CvDTreeParams DTreeParams;\ntypedef CvMLData TrainData;\ntypedef CvDTree DecisionTree;\ntypedef CvForestTree ForestTree;\ntypedef CvRTParams RandomTreeParams;\ntypedef CvRTrees RandomTrees;\ntypedef CvERTreeTrainData ERTreeTRainData;\ntypedef CvForestERTree ERTree;\ntypedef CvERTrees ERTrees;\ntypedef CvBoostParams BoostParams;\ntypedef CvBoostTree BoostTree;\ntypedef CvBoost Boost;\ntypedef CvANN_MLP_TrainParams ANN_MLP_TrainParams;\ntypedef CvANN_MLP NeuralNet_MLP;\ntypedef CvGBTreesParams GradientBoostingTreeParams;\ntypedef CvGBTrees GradientBoostingTrees;\n\ntemplate<> CV_EXPORTS void Ptr<CvDTreeSplit>::delete_obj();\n\nCV_EXPORTS bool initModule_ml(void);\n\n}\n\n#endif // __cplusplus\n#endif // __OPENCV_ML_HPP__\n\n/* End of file. */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/nonfree/features2d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_NONFREE_FEATURES_2D_HPP__\n#define __OPENCV_NONFREE_FEATURES_2D_HPP__\n\n#include \"opencv2/features2d/features2d.hpp\"\n\n#ifdef __cplusplus\n\nnamespace cv\n{\n\n/*!\n SIFT implementation.\n\n The class implements SIFT algorithm by D. Lowe.\n*/\nclass CV_EXPORTS_W SIFT : public Feature2D\n{\npublic:\n    CV_WRAP explicit SIFT( int nfeatures=0, int nOctaveLayers=3,\n          double contrastThreshold=0.04, double edgeThreshold=10,\n          double sigma=1.6);\n\n    //! returns the descriptor size in floats (128)\n    CV_WRAP int descriptorSize() const;\n\n    //! returns the descriptor type\n    CV_WRAP int descriptorType() const;\n\n    //! finds the keypoints using SIFT algorithm\n    void operator()(InputArray img, InputArray mask,\n                    vector<KeyPoint>& keypoints) const;\n    //! finds the keypoints and computes descriptors for them using SIFT algorithm.\n    //! Optionally it can compute descriptors for the user-provided keypoints\n    void operator()(InputArray img, InputArray mask,\n                    vector<KeyPoint>& keypoints,\n                    OutputArray descriptors,\n                    bool useProvidedKeypoints=false) const;\n\n    AlgorithmInfo* info() const;\n\n    void buildGaussianPyramid( const Mat& base, vector<Mat>& pyr, int nOctaves ) const;\n    void buildDoGPyramid( const vector<Mat>& pyr, vector<Mat>& dogpyr ) const;\n    void findScaleSpaceExtrema( const vector<Mat>& gauss_pyr, const vector<Mat>& dog_pyr,\n                                vector<KeyPoint>& keypoints ) const;\n\nprotected:\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n    void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n\n    CV_PROP_RW int nfeatures;\n    CV_PROP_RW int nOctaveLayers;\n    CV_PROP_RW double contrastThreshold;\n    CV_PROP_RW double edgeThreshold;\n    CV_PROP_RW double sigma;\n};\n\ntypedef SIFT SiftFeatureDetector;\ntypedef SIFT SiftDescriptorExtractor;\n\n/*!\n SURF implementation.\n\n The class implements SURF algorithm by H. Bay et al.\n */\nclass CV_EXPORTS_W SURF : public Feature2D\n{\npublic:\n    //! the default constructor\n    CV_WRAP SURF();\n    //! the full constructor taking all the necessary parameters\n    explicit CV_WRAP SURF(double hessianThreshold,\n                  int nOctaves=4, int nOctaveLayers=2,\n                  bool extended=true, bool upright=false);\n\n    //! returns the descriptor size in float's (64 or 128)\n    CV_WRAP int descriptorSize() const;\n\n    //! returns the descriptor type\n    CV_WRAP int descriptorType() const;\n\n    //! finds the keypoints using fast hessian detector used in SURF\n    void operator()(InputArray img, InputArray mask,\n                    CV_OUT vector<KeyPoint>& keypoints) const;\n    //! finds the keypoints and computes their descriptors. Optionally it can compute descriptors for the user-provided keypoints\n    void operator()(InputArray img, InputArray mask,\n                    CV_OUT vector<KeyPoint>& keypoints,\n                    OutputArray descriptors,\n                    bool useProvidedKeypoints=false) const;\n\n    AlgorithmInfo* info() const;\n\n    CV_PROP_RW double hessianThreshold;\n    CV_PROP_RW int nOctaves;\n    CV_PROP_RW int nOctaveLayers;\n    CV_PROP_RW bool extended;\n    CV_PROP_RW bool upright;\n\nprotected:\n\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n    void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n};\n\ntypedef SURF SurfFeatureDetector;\ntypedef SURF SurfDescriptorExtractor;\n\n} /* namespace cv */\n\n#endif /* __cplusplus */\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/nonfree/gpu.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_NONFREE_GPU_HPP__\n#define __OPENCV_NONFREE_GPU_HPP__\n\n#include \"opencv2/core/gpumat.hpp\"\n\nnamespace cv { namespace gpu {\n\nclass CV_EXPORTS SURF_GPU\n{\npublic:\n    enum KeypointLayout\n    {\n        X_ROW = 0,\n        Y_ROW,\n        LAPLACIAN_ROW,\n        OCTAVE_ROW,\n        SIZE_ROW,\n        ANGLE_ROW,\n        HESSIAN_ROW,\n        ROWS_COUNT\n    };\n\n    //! the default constructor\n    SURF_GPU();\n    //! the full constructor taking all the necessary parameters\n    explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4,\n         int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f, bool _upright = false);\n\n    //! returns the descriptor size in float's (64 or 128)\n    int descriptorSize() const;\n\n    //! upload host keypoints to device memory\n    void uploadKeypoints(const std::vector<KeyPoint>& keypoints, GpuMat& keypointsGPU);\n    //! download keypoints from device to host memory\n    void downloadKeypoints(const GpuMat& keypointsGPU, std::vector<KeyPoint>& keypoints);\n\n    //! download descriptors from device to host memory\n    void downloadDescriptors(const GpuMat& descriptorsGPU, std::vector<float>& descriptors);\n\n    //! finds the keypoints using fast hessian detector used in SURF\n    //! supports CV_8UC1 images\n    //! keypoints will have nFeature cols and 6 rows\n    //! keypoints.ptr<float>(X_ROW)[i] will contain x coordinate of i'th feature\n    //! keypoints.ptr<float>(Y_ROW)[i] will contain y coordinate of i'th feature\n    //! keypoints.ptr<float>(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature\n    //! keypoints.ptr<float>(OCTAVE_ROW)[i] will contain octave of i'th feature\n    //! keypoints.ptr<float>(SIZE_ROW)[i] will contain size of i'th feature\n    //! keypoints.ptr<float>(ANGLE_ROW)[i] will contain orientation of i'th feature\n    //! keypoints.ptr<float>(HESSIAN_ROW)[i] will contain response of i'th feature\n    void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints);\n    //! finds the keypoints and computes their descriptors.\n    //! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction\n    void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints, GpuMat& descriptors,\n        bool useProvidedKeypoints = false);\n\n    void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints);\n    void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, GpuMat& descriptors,\n        bool useProvidedKeypoints = false);\n\n    void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, std::vector<float>& descriptors,\n        bool useProvidedKeypoints = false);\n\n    void releaseMemory();\n\n    // SURF parameters\n    double hessianThreshold;\n    int nOctaves;\n    int nOctaveLayers;\n    bool extended;\n    bool upright;\n\n    //! max keypoints = min(keypointsRatio * img.size().area(), 65535)\n    float keypointsRatio;\n\n    GpuMat sum, mask1, maskSum, intBuffer;\n\n    GpuMat det, trace;\n\n    GpuMat maxPosBuffer;\n};\n\n} // namespace gpu\n\n} // namespace cv\n\n#endif // __OPENCV_NONFREE_GPU_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/nonfree/nonfree.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_NONFREE_HPP__\n#define __OPENCV_NONFREE_HPP__\n\n#include \"opencv2/nonfree/features2d.hpp\"\n\nnamespace cv\n{\n\nCV_EXPORTS_W bool initModule_nonfree();\n\n}\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/nonfree/ocl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n// By downloading, copying, installing or using the software you agree to this license.\n// If you do not agree to this license, do not download, install,\n// copy or use the software.\n//\n//\n// License Agreement\n// For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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// * Redistribution's of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// * Redistribution's in binary form must reproduce the above copyright notice,\n// this list of conditions and the following disclaimer in the documentation\n// and/or other materials provided with the distribution.\n//\n// * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_NONFREE_OCL_HPP__\n#define __OPENCV_NONFREE_OCL_HPP__\n\n#include \"opencv2/ocl/ocl.hpp\"\n\nnamespace cv\n{\n    namespace ocl\n    {\n        //! Speeded up robust features, port from GPU module.\n        ////////////////////////////////// SURF //////////////////////////////////////////\n\n        class CV_EXPORTS SURF_OCL : public cv::Feature2D\n        {\n        public:\n            enum KeypointLayout\n            {\n                X_ROW = 0,\n                Y_ROW,\n                LAPLACIAN_ROW,\n                OCTAVE_ROW,\n                SIZE_ROW,\n                ANGLE_ROW,\n                HESSIAN_ROW,\n                ROWS_COUNT\n            };\n\n            //! the default constructor\n            SURF_OCL();\n            //! the full constructor taking all the necessary parameters\n            explicit SURF_OCL(double _hessianThreshold, int _nOctaves = 4,\n                              int _nOctaveLayers = 2, bool _extended = true, float _keypointsRatio = 0.01f, bool _upright = false);\n\n            //! returns the descriptor size in float's (64 or 128)\n            int descriptorSize() const;\n\n            int descriptorType() const;\n\n            //! upload host keypoints to device memory\n            void uploadKeypoints(const vector<cv::KeyPoint> &keypoints, oclMat &keypointsocl);\n            //! download keypoints from device to host memory\n            void downloadKeypoints(const oclMat &keypointsocl, vector<KeyPoint> &keypoints);\n            //! download descriptors from device to host memory\n            void downloadDescriptors(const oclMat &descriptorsocl, vector<float> &descriptors);\n            //! finds the keypoints using fast hessian detector used in SURF\n            //! supports CV_8UC1 images\n            //! keypoints will have nFeature cols and 6 rows\n            //! keypoints.ptr<float>(X_ROW)[i] will contain x coordinate of i'th feature\n            //! keypoints.ptr<float>(Y_ROW)[i] will contain y coordinate of i'th feature\n            //! keypoints.ptr<float>(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature\n            //! keypoints.ptr<float>(OCTAVE_ROW)[i] will contain octave of i'th feature\n            //! keypoints.ptr<float>(SIZE_ROW)[i] will contain size of i'th feature\n            //! keypoints.ptr<float>(ANGLE_ROW)[i] will contain orientation of i'th feature\n            //! keypoints.ptr<float>(HESSIAN_ROW)[i] will contain response of i'th feature\n            void operator()(const oclMat &img, const oclMat &mask, oclMat &keypoints);\n            //! finds the keypoints and computes their descriptors.\n            //! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction\n            void operator()(const oclMat &img, const oclMat &mask, oclMat &keypoints, oclMat &descriptors,\n                            bool useProvidedKeypoints = false);\n            void operator()(const oclMat &img, const oclMat &mask, std::vector<KeyPoint> &keypoints);\n            void operator()(const oclMat &img, const oclMat &mask, std::vector<KeyPoint> &keypoints, oclMat &descriptors,\n                            bool useProvidedKeypoints = false);\n            void operator()(const oclMat &img, const oclMat &mask, std::vector<KeyPoint> &keypoints, std::vector<float> &descriptors,\n                            bool useProvidedKeypoints = false);\n\n            //! finds the keypoints using fast hessian detector used in SURF\n            void operator()(InputArray img, InputArray mask,\n                            CV_OUT vector<KeyPoint>& keypoints) const;\n            //! finds the keypoints and computes their descriptors. Optionally it can compute descriptors for the user-provided keypoints\n            void operator()(InputArray img, InputArray mask,\n                            CV_OUT vector<KeyPoint>& keypoints,\n                            OutputArray descriptors,\n                            bool useProvidedKeypoints=false) const;\n\n            AlgorithmInfo* info() const;\n\n            void releaseMemory();\n\n            // SURF parameters\n            float hessianThreshold;\n            int nOctaves;\n            int nOctaveLayers;\n            bool extended;\n            bool upright;\n            //! max keypoints = min(keypointsRatio * img.size().area(), 65535)\n            float keypointsRatio;\n            oclMat sum, mask1, maskSum, intBuffer;\n            oclMat det, trace;\n            oclMat maxPosBuffer;\n        protected:\n            void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask) const;\n            void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const;\n        };\n    }\n}\n\n#endif //__OPENCV_NONFREE_OCL_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/objdetect/objdetect.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OBJDETECT_HPP__\n#define __OPENCV_OBJDETECT_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\n#ifdef __cplusplus\n#include <map>\n#include <deque>\n\nextern \"C\" {\n#endif\n\n/****************************************************************************************\\\n*                         Haar-like Object Detection functions                           *\n\\****************************************************************************************/\n\n#define CV_HAAR_MAGIC_VAL    0x42500000\n#define CV_TYPE_NAME_HAAR    \"opencv-haar-classifier\"\n\n#define CV_IS_HAAR_CLASSIFIER( haar )                                                    \\\n    ((haar) != NULL &&                                                                   \\\n    (((const CvHaarClassifierCascade*)(haar))->flags & CV_MAGIC_MASK)==CV_HAAR_MAGIC_VAL)\n\n#define CV_HAAR_FEATURE_MAX  3\n\ntypedef struct CvHaarFeature\n{\n    int tilted;\n    struct\n    {\n        CvRect r;\n        float weight;\n    } rect[CV_HAAR_FEATURE_MAX];\n} CvHaarFeature;\n\ntypedef struct CvHaarClassifier\n{\n    int count;\n    CvHaarFeature* haar_feature;\n    float* threshold;\n    int* left;\n    int* right;\n    float* alpha;\n} CvHaarClassifier;\n\ntypedef struct CvHaarStageClassifier\n{\n    int  count;\n    float threshold;\n    CvHaarClassifier* classifier;\n\n    int next;\n    int child;\n    int parent;\n} CvHaarStageClassifier;\n\ntypedef struct CvHidHaarClassifierCascade CvHidHaarClassifierCascade;\n\ntypedef struct CvHaarClassifierCascade\n{\n    int  flags;\n    int  count;\n    CvSize orig_window_size;\n    CvSize real_window_size;\n    double scale;\n    CvHaarStageClassifier* stage_classifier;\n    CvHidHaarClassifierCascade* hid_cascade;\n} CvHaarClassifierCascade;\n\ntypedef struct CvAvgComp\n{\n    CvRect rect;\n    int neighbors;\n} CvAvgComp;\n\n/* Loads haar classifier cascade from a directory.\n   It is obsolete: convert your cascade to xml and use cvLoad instead */\nCVAPI(CvHaarClassifierCascade*) cvLoadHaarClassifierCascade(\n                    const char* directory, CvSize orig_window_size);\n\nCVAPI(void) cvReleaseHaarClassifierCascade( CvHaarClassifierCascade** cascade );\n\n#define CV_HAAR_DO_CANNY_PRUNING    1\n#define CV_HAAR_SCALE_IMAGE         2\n#define CV_HAAR_FIND_BIGGEST_OBJECT 4\n#define CV_HAAR_DO_ROUGH_SEARCH     8\n\n//CVAPI(CvSeq*) cvHaarDetectObjectsForROC( const CvArr* image,\n//                     CvHaarClassifierCascade* cascade, CvMemStorage* storage,\n//                     CvSeq** rejectLevels, CvSeq** levelWeightds,\n//                     double scale_factor CV_DEFAULT(1.1),\n//                     int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),\n//                     CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)),\n//                     bool outputRejectLevels = false );\n\n\nCVAPI(CvSeq*) cvHaarDetectObjects( const CvArr* image,\n                     CvHaarClassifierCascade* cascade, CvMemStorage* storage,\n                     double scale_factor CV_DEFAULT(1.1),\n                     int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),\n                     CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)));\n\n/* sets images for haar classifier cascade */\nCVAPI(void) cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade,\n                                                const CvArr* sum, const CvArr* sqsum,\n                                                const CvArr* tilted_sum, double scale );\n\n/* runs the cascade on the specified window */\nCVAPI(int) cvRunHaarClassifierCascade( const CvHaarClassifierCascade* cascade,\n                                       CvPoint pt, int start_stage CV_DEFAULT(0));\n\n\n/****************************************************************************************\\\n*                         Latent SVM Object Detection functions                          *\n\\****************************************************************************************/\n\n// DataType: STRUCT position\n// Structure describes the position of the filter in the feature pyramid\n// l - level in the feature pyramid\n// (x, y) - coordinate in level l\ntypedef struct CvLSVMFilterPosition\n{\n    int x;\n    int y;\n    int l;\n} CvLSVMFilterPosition;\n\n// DataType: STRUCT filterObject\n// Description of the filter, which corresponds to the part of the object\n// V               - ideal (penalty = 0) position of the partial filter\n//                   from the root filter position (V_i in the paper)\n// penaltyFunction - vector describes penalty function (d_i in the paper)\n//                   pf[0] * x + pf[1] * y + pf[2] * x^2 + pf[3] * y^2\n// FILTER DESCRIPTION\n//   Rectangular map (sizeX x sizeY),\n//   every cell stores feature vector (dimension = p)\n// H               - matrix of feature vectors\n//                   to set and get feature vectors (i,j)\n//                   used formula H[(j * sizeX + i) * p + k], where\n//                   k - component of feature vector in cell (i, j)\n// END OF FILTER DESCRIPTION\ntypedef struct CvLSVMFilterObject{\n    CvLSVMFilterPosition V;\n    float fineFunction[4];\n    int sizeX;\n    int sizeY;\n    int numFeatures;\n    float *H;\n} CvLSVMFilterObject;\n\n// data type: STRUCT CvLatentSvmDetector\n// structure contains internal representation of trained Latent SVM detector\n// num_filters          - total number of filters (root plus part) in model\n// num_components       - number of components in model\n// num_part_filters     - array containing number of part filters for each component\n// filters              - root and part filters for all model components\n// b                    - biases for all model components\n// score_threshold      - confidence level threshold\ntypedef struct CvLatentSvmDetector\n{\n    int num_filters;\n    int num_components;\n    int* num_part_filters;\n    CvLSVMFilterObject** filters;\n    float* b;\n    float score_threshold;\n}\nCvLatentSvmDetector;\n\n// data type: STRUCT CvObjectDetection\n// structure contains the bounding box and confidence level for detected object\n// rect                 - bounding box for a detected object\n// score                - confidence level\ntypedef struct CvObjectDetection\n{\n    CvRect rect;\n    float score;\n} CvObjectDetection;\n\n//////////////// Object Detection using Latent SVM //////////////\n\n\n/*\n// load trained detector from a file\n//\n// API\n// CvLatentSvmDetector* cvLoadLatentSvmDetector(const char* filename);\n// INPUT\n// filename             - path to the file containing the parameters of\n                        - trained Latent SVM detector\n// OUTPUT\n// trained Latent SVM detector in internal representation\n*/\nCVAPI(CvLatentSvmDetector*) cvLoadLatentSvmDetector(const char* filename);\n\n/*\n// release memory allocated for CvLatentSvmDetector structure\n//\n// API\n// void cvReleaseLatentSvmDetector(CvLatentSvmDetector** detector);\n// INPUT\n// detector             - CvLatentSvmDetector structure to be released\n// OUTPUT\n*/\nCVAPI(void) cvReleaseLatentSvmDetector(CvLatentSvmDetector** detector);\n\n/*\n// find rectangular regions in the given image that are likely\n// to contain objects and corresponding confidence levels\n//\n// API\n// CvSeq* cvLatentSvmDetectObjects(const IplImage* image,\n//                                  CvLatentSvmDetector* detector,\n//                                  CvMemStorage* storage,\n//                                  float overlap_threshold = 0.5f,\n//                                  int numThreads = -1);\n// INPUT\n// image                - image to detect objects in\n// detector             - Latent SVM detector in internal representation\n// storage              - memory storage to store the resultant sequence\n//                          of the object candidate rectangles\n// overlap_threshold    - threshold for the non-maximum suppression algorithm\n                           = 0.5f [here will be the reference to original paper]\n// OUTPUT\n// sequence of detected objects (bounding boxes and confidence levels stored in CvObjectDetection structures)\n*/\nCVAPI(CvSeq*) cvLatentSvmDetectObjects(IplImage* image,\n                                CvLatentSvmDetector* detector,\n                                CvMemStorage* storage,\n                                float overlap_threshold CV_DEFAULT(0.5f),\n                                int numThreads CV_DEFAULT(-1));\n\n#ifdef __cplusplus\n}\n\nCV_EXPORTS CvSeq* cvHaarDetectObjectsForROC( const CvArr* image,\n                     CvHaarClassifierCascade* cascade, CvMemStorage* storage,\n                     std::vector<int>& rejectLevels, std::vector<double>& levelWeightds,\n                     double scale_factor CV_DEFAULT(1.1),\n                     int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),\n                     CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)),\n                     bool outputRejectLevels = false );\n\nnamespace cv\n{\n\n///////////////////////////// Object Detection ////////////////////////////\n\n/*\n * This is a class wrapping up the structure CvLatentSvmDetector and functions working with it.\n * The class goals are:\n * 1) provide c++ interface;\n * 2) make it possible to load and detect more than one class (model) unlike CvLatentSvmDetector.\n */\nclass CV_EXPORTS LatentSvmDetector\n{\npublic:\n    struct CV_EXPORTS ObjectDetection\n    {\n        ObjectDetection();\n        ObjectDetection( const Rect& rect, float score, int classID=-1 );\n        Rect rect;\n        float score;\n        int classID;\n    };\n\n    LatentSvmDetector();\n    LatentSvmDetector( const vector<string>& filenames, const vector<string>& classNames=vector<string>() );\n    virtual ~LatentSvmDetector();\n\n    virtual void clear();\n    virtual bool empty() const;\n    bool load( const vector<string>& filenames, const vector<string>& classNames=vector<string>() );\n\n    virtual void detect( const Mat& image,\n                         vector<ObjectDetection>& objectDetections,\n                         float overlapThreshold=0.5f,\n                         int numThreads=-1 );\n\n    const vector<string>& getClassNames() const;\n    size_t getClassCount() const;\n\nprivate:\n    vector<CvLatentSvmDetector*> detectors;\n    vector<string> classNames;\n};\n\n// class for grouping object candidates, detected by Cascade Classifier, HOG etc.\n// instance of the class is to be passed to cv::partition (see cxoperations.hpp)\nclass CV_EXPORTS SimilarRects\n{\npublic:\n    SimilarRects(double _eps) : eps(_eps) {}\n    inline bool operator()(const Rect& r1, const Rect& r2) const\n    {\n        double delta = eps*(std::min(r1.width, r2.width) + std::min(r1.height, r2.height))*0.5;\n        return std::abs(r1.x - r2.x) <= delta &&\n            std::abs(r1.y - r2.y) <= delta &&\n            std::abs(r1.x + r1.width - r2.x - r2.width) <= delta &&\n            std::abs(r1.y + r1.height - r2.y - r2.height) <= delta;\n    }\n    double eps;\n};\n\nCV_EXPORTS void groupRectangles(CV_OUT CV_IN_OUT vector<Rect>& rectList, int groupThreshold, double eps=0.2);\nCV_EXPORTS_W void groupRectangles(CV_OUT CV_IN_OUT vector<Rect>& rectList, CV_OUT vector<int>& weights, int groupThreshold, double eps=0.2);\nCV_EXPORTS void groupRectangles( vector<Rect>& rectList, int groupThreshold, double eps, vector<int>* weights, vector<double>* levelWeights );\nCV_EXPORTS void groupRectangles(vector<Rect>& rectList, vector<int>& rejectLevels,\n                                vector<double>& levelWeights, int groupThreshold, double eps=0.2);\nCV_EXPORTS void groupRectangles_meanshift(vector<Rect>& rectList, vector<double>& foundWeights, vector<double>& foundScales,\n                                          double detectThreshold = 0.0, Size winDetSize = Size(64, 128));\n\n\nclass CV_EXPORTS FeatureEvaluator\n{\npublic:\n    enum { HAAR = 0, LBP = 1, HOG = 2 };\n    virtual ~FeatureEvaluator();\n\n    virtual bool read(const FileNode& node);\n    virtual Ptr<FeatureEvaluator> clone() const;\n    virtual int getFeatureType() const;\n\n    virtual bool setImage(const Mat& img, Size origWinSize);\n    virtual bool setWindow(Point p);\n\n    virtual double calcOrd(int featureIdx) const;\n    virtual int calcCat(int featureIdx) const;\n\n    static Ptr<FeatureEvaluator> create(int type);\n};\n\ntemplate<> CV_EXPORTS void Ptr<CvHaarClassifierCascade>::delete_obj();\n\nenum\n{\n    CASCADE_DO_CANNY_PRUNING=1,\n    CASCADE_SCALE_IMAGE=2,\n    CASCADE_FIND_BIGGEST_OBJECT=4,\n    CASCADE_DO_ROUGH_SEARCH=8\n};\n\nclass CV_EXPORTS_W CascadeClassifier\n{\npublic:\n    CV_WRAP CascadeClassifier();\n    CV_WRAP CascadeClassifier( const string& filename );\n    virtual ~CascadeClassifier();\n\n    CV_WRAP virtual bool empty() const;\n    CV_WRAP bool load( const string& filename );\n    virtual bool read( const FileNode& node );\n    CV_WRAP virtual void detectMultiScale( const Mat& image,\n                                   CV_OUT vector<Rect>& objects,\n                                   double scaleFactor=1.1,\n                                   int minNeighbors=3, int flags=0,\n                                   Size minSize=Size(),\n                                   Size maxSize=Size() );\n\n    CV_WRAP virtual void detectMultiScale( const Mat& image,\n                                   CV_OUT vector<Rect>& objects,\n                                   vector<int>& rejectLevels,\n                                   vector<double>& levelWeights,\n                                   double scaleFactor=1.1,\n                                   int minNeighbors=3, int flags=0,\n                                   Size minSize=Size(),\n                                   Size maxSize=Size(),\n                                   bool outputRejectLevels=false );\n\n\n    bool isOldFormatCascade() const;\n    virtual Size getOriginalWindowSize() const;\n    int getFeatureType() const;\n    bool setImage( const Mat& );\n\nprotected:\n    //virtual bool detectSingleScale( const Mat& image, int stripCount, Size processingRectSize,\n    //                                int stripSize, int yStep, double factor, vector<Rect>& candidates );\n\n    virtual bool detectSingleScale( const Mat& image, int stripCount, Size processingRectSize,\n                                    int stripSize, int yStep, double factor, vector<Rect>& candidates,\n                                    vector<int>& rejectLevels, vector<double>& levelWeights, bool outputRejectLevels=false);\n\nprotected:\n    enum { BOOST = 0 };\n    enum { DO_CANNY_PRUNING = 1, SCALE_IMAGE = 2,\n           FIND_BIGGEST_OBJECT = 4, DO_ROUGH_SEARCH = 8 };\n\n    friend class CascadeClassifierInvoker;\n\n    template<class FEval>\n    friend int predictOrdered( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &featureEvaluator, double& weight);\n\n    template<class FEval>\n    friend int predictCategorical( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &featureEvaluator, double& weight);\n\n    template<class FEval>\n    friend int predictOrderedStump( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &featureEvaluator, double& weight);\n\n    template<class FEval>\n    friend int predictCategoricalStump( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &featureEvaluator, double& weight);\n\n    bool setImage( Ptr<FeatureEvaluator>& feval, const Mat& image);\n    virtual int runAt( Ptr<FeatureEvaluator>& feval, Point pt, double& weight );\n\n    class Data\n    {\n    public:\n        struct CV_EXPORTS DTreeNode\n        {\n            int featureIdx;\n            float threshold; // for ordered features only\n            int left;\n            int right;\n        };\n\n        struct CV_EXPORTS DTree\n        {\n            int nodeCount;\n        };\n\n        struct CV_EXPORTS Stage\n        {\n            int first;\n            int ntrees;\n            float threshold;\n        };\n\n        bool read(const FileNode &node);\n\n        bool isStumpBased;\n\n        int stageType;\n        int featureType;\n        int ncategories;\n        Size origWinSize;\n\n        vector<Stage> stages;\n        vector<DTree> classifiers;\n        vector<DTreeNode> nodes;\n        vector<float> leaves;\n        vector<int> subsets;\n    };\n\n    Data data;\n    Ptr<FeatureEvaluator> featureEvaluator;\n    Ptr<CvHaarClassifierCascade> oldCascade;\n\npublic:\n    class CV_EXPORTS MaskGenerator\n    {\n    public:\n        virtual ~MaskGenerator() {}\n        virtual cv::Mat generateMask(const cv::Mat& src)=0;\n        virtual void initializeMask(const cv::Mat& /*src*/) {};\n    };\n    void setMaskGenerator(Ptr<MaskGenerator> maskGenerator);\n    Ptr<MaskGenerator> getMaskGenerator();\n\n    void setFaceDetectionMaskGenerator();\n\nprotected:\n    Ptr<MaskGenerator> maskGenerator;\n};\n\n\n//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////\n\n// struct for detection region of interest (ROI)\nstruct DetectionROI\n{\n   // scale(size) of the bounding box\n   double scale;\n   // set of requrested locations to be evaluated\n   vector<cv::Point> locations;\n   // vector that will contain confidence values for each location\n   vector<double> confidences;\n};\n\nstruct CV_EXPORTS_W HOGDescriptor\n{\npublic:\n    enum { L2Hys=0 };\n    enum { DEFAULT_NLEVELS=64 };\n\n    CV_WRAP HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),\n        cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),\n        histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true),\n        nlevels(HOGDescriptor::DEFAULT_NLEVELS)\n    {}\n\n    CV_WRAP HOGDescriptor(Size _winSize, Size _blockSize, Size _blockStride,\n                  Size _cellSize, int _nbins, int _derivAperture=1, double _winSigma=-1,\n                  int _histogramNormType=HOGDescriptor::L2Hys,\n                  double _L2HysThreshold=0.2, bool _gammaCorrection=false,\n                  int _nlevels=HOGDescriptor::DEFAULT_NLEVELS)\n    : winSize(_winSize), blockSize(_blockSize), blockStride(_blockStride), cellSize(_cellSize),\n    nbins(_nbins), derivAperture(_derivAperture), winSigma(_winSigma),\n    histogramNormType(_histogramNormType), L2HysThreshold(_L2HysThreshold),\n    gammaCorrection(_gammaCorrection), nlevels(_nlevels)\n    {}\n\n    CV_WRAP HOGDescriptor(const String& filename)\n    {\n        load(filename);\n    }\n\n    HOGDescriptor(const HOGDescriptor& d)\n    {\n        d.copyTo(*this);\n    }\n\n    virtual ~HOGDescriptor() {}\n\n    CV_WRAP size_t getDescriptorSize() const;\n    CV_WRAP bool checkDetectorSize() const;\n    CV_WRAP double getWinSigma() const;\n\n    CV_WRAP virtual void setSVMDetector(InputArray _svmdetector);\n\n    virtual bool read(FileNode& fn);\n    virtual void write(FileStorage& fs, const String& objname) const;\n\n    CV_WRAP virtual bool load(const String& filename, const String& objname=String());\n    CV_WRAP virtual void save(const String& filename, const String& objname=String()) const;\n    virtual void copyTo(HOGDescriptor& c) const;\n\n    CV_WRAP virtual void compute(const Mat& img,\n                         CV_OUT vector<float>& descriptors,\n                         Size winStride=Size(), Size padding=Size(),\n                         const vector<Point>& locations=vector<Point>()) const;\n    //with found weights output\n    CV_WRAP virtual void detect(const Mat& img, CV_OUT vector<Point>& foundLocations,\n                        CV_OUT vector<double>& weights,\n                        double hitThreshold=0, Size winStride=Size(),\n                        Size padding=Size(),\n                        const vector<Point>& searchLocations=vector<Point>()) const;\n    //without found weights output\n    virtual void detect(const Mat& img, CV_OUT vector<Point>& foundLocations,\n                        double hitThreshold=0, Size winStride=Size(),\n                        Size padding=Size(),\n                        const vector<Point>& searchLocations=vector<Point>()) const;\n    //with result weights output\n    CV_WRAP virtual void detectMultiScale(const Mat& img, CV_OUT vector<Rect>& foundLocations,\n                                  CV_OUT vector<double>& foundWeights, double hitThreshold=0,\n                                  Size winStride=Size(), Size padding=Size(), double scale=1.05,\n                                  double finalThreshold=2.0,bool useMeanshiftGrouping = false) const;\n    //without found weights output\n    virtual void detectMultiScale(const Mat& img, CV_OUT vector<Rect>& foundLocations,\n                                  double hitThreshold=0, Size winStride=Size(),\n                                  Size padding=Size(), double scale=1.05,\n                                  double finalThreshold=2.0, bool useMeanshiftGrouping = false) const;\n\n    CV_WRAP virtual void computeGradient(const Mat& img, CV_OUT Mat& grad, CV_OUT Mat& angleOfs,\n                                 Size paddingTL=Size(), Size paddingBR=Size()) const;\n\n    CV_WRAP static vector<float> getDefaultPeopleDetector();\n    CV_WRAP static vector<float> getDaimlerPeopleDetector();\n\n    CV_PROP Size winSize;\n    CV_PROP Size blockSize;\n    CV_PROP Size blockStride;\n    CV_PROP Size cellSize;\n    CV_PROP int nbins;\n    CV_PROP int derivAperture;\n    CV_PROP double winSigma;\n    CV_PROP int histogramNormType;\n    CV_PROP double L2HysThreshold;\n    CV_PROP bool gammaCorrection;\n    CV_PROP vector<float> svmDetector;\n    CV_PROP int nlevels;\n\n\n   // evaluate specified ROI and return confidence value for each location\n   void detectROI(const cv::Mat& img, const vector<cv::Point> &locations,\n                                   CV_OUT std::vector<cv::Point>& foundLocations, CV_OUT std::vector<double>& confidences,\n                                   double hitThreshold = 0, cv::Size winStride = Size(),\n                                   cv::Size padding = Size()) const;\n\n   // evaluate specified ROI and return confidence value for each location in multiple scales\n   void detectMultiScaleROI(const cv::Mat& img,\n                                                       CV_OUT std::vector<cv::Rect>& foundLocations,\n                                                       std::vector<DetectionROI>& locations,\n                                                       double hitThreshold = 0,\n                                                       int groupThreshold = 0) const;\n\n   // read/parse Dalal's alt model file\n   void readALTModel(std::string modelfile);\n   void groupRectangles(vector<cv::Rect>& rectList, vector<double>& weights, int groupThreshold, double eps) const;\n};\n\n\nCV_EXPORTS_W void findDataMatrix(InputArray image,\n                                 CV_OUT vector<string>& codes,\n                                 OutputArray corners=noArray(),\n                                 OutputArrayOfArrays dmtx=noArray());\nCV_EXPORTS_W void drawDataMatrixCodes(InputOutputArray image,\n                                      const vector<string>& codes,\n                                      InputArray corners);\n}\n\n/****************************************************************************************\\\n*                                Datamatrix                                              *\n\\****************************************************************************************/\n\nstruct CV_EXPORTS CvDataMatrixCode {\n  char msg[4];\n  CvMat *original;\n  CvMat *corners;\n};\n\nCV_EXPORTS std::deque<CvDataMatrixCode> cvFindDataMatrix(CvMat *im);\n\n/****************************************************************************************\\\n*                                 LINE-MOD                                               *\n\\****************************************************************************************/\n\nnamespace cv {\nnamespace linemod {\n\nusing cv::FileNode;\nusing cv::FileStorage;\nusing cv::Mat;\nusing cv::noArray;\nusing cv::OutputArrayOfArrays;\nusing cv::Point;\nusing cv::Ptr;\nusing cv::Rect;\nusing cv::Size;\n\n/// @todo Convert doxy comments to rst\n\n/**\n * \\brief Discriminant feature described by its location and label.\n */\nstruct CV_EXPORTS Feature\n{\n  int x; ///< x offset\n  int y; ///< y offset\n  int label; ///< Quantization\n\n  Feature() : x(0), y(0), label(0) {}\n  Feature(int x, int y, int label);\n\n  void read(const FileNode& fn);\n  void write(FileStorage& fs) const;\n};\n\ninline Feature::Feature(int _x, int _y, int _label) : x(_x), y(_y), label(_label) {}\n\nstruct CV_EXPORTS Template\n{\n  int width;\n  int height;\n  int pyramid_level;\n  std::vector<Feature> features;\n\n  void read(const FileNode& fn);\n  void write(FileStorage& fs) const;\n};\n\n/**\n * \\brief Represents a modality operating over an image pyramid.\n */\nclass QuantizedPyramid\n{\npublic:\n  // Virtual destructor\n  virtual ~QuantizedPyramid() {}\n\n  /**\n   * \\brief Compute quantized image at current pyramid level for online detection.\n   *\n   * \\param[out] dst The destination 8-bit image. For each pixel at most one bit is set,\n   *                 representing its classification.\n   */\n  virtual void quantize(Mat& dst) const =0;\n\n  /**\n   * \\brief Extract most discriminant features at current pyramid level to form a new template.\n   *\n   * \\param[out] templ The new template.\n   */\n  virtual bool extractTemplate(Template& templ) const =0;\n\n  /**\n   * \\brief Go to the next pyramid level.\n   *\n   * \\todo Allow pyramid scale factor other than 2\n   */\n  virtual void pyrDown() =0;\n\nprotected:\n  /// Candidate feature with a score\n  struct Candidate\n  {\n    Candidate(int x, int y, int label, float score);\n\n    /// Sort candidates with high score to the front\n    bool operator<(const Candidate& rhs) const\n    {\n      return score > rhs.score;\n    }\n\n    Feature f;\n    float score;\n  };\n\n  /**\n   * \\brief Choose candidate features so that they are not bunched together.\n   *\n   * \\param[in]  candidates   Candidate features sorted by score.\n   * \\param[out] features     Destination vector of selected features.\n   * \\param[in]  num_features Number of candidates to select.\n   * \\param[in]  distance     Hint for desired distance between features.\n   */\n  static void selectScatteredFeatures(const std::vector<Candidate>& candidates,\n                                      std::vector<Feature>& features,\n                                      size_t num_features, float distance);\n};\n\ninline QuantizedPyramid::Candidate::Candidate(int x, int y, int label, float _score) : f(x, y, label), score(_score) {}\n\n/**\n * \\brief Interface for modalities that plug into the LINE template matching representation.\n *\n * \\todo Max response, to allow optimization of summing (255/MAX) features as uint8\n */\nclass CV_EXPORTS Modality\n{\npublic:\n  // Virtual destructor\n  virtual ~Modality() {}\n\n  /**\n   * \\brief Form a quantized image pyramid from a source image.\n   *\n   * \\param[in] src  The source image. Type depends on the modality.\n   * \\param[in] mask Optional mask. If not empty, unmasked pixels are set to zero\n   *                 in quantized image and cannot be extracted as features.\n   */\n  Ptr<QuantizedPyramid> process(const Mat& src,\n                    const Mat& mask = Mat()) const\n  {\n    return processImpl(src, mask);\n  }\n\n  virtual std::string name() const =0;\n\n  virtual void read(const FileNode& fn) =0;\n  virtual void write(FileStorage& fs) const =0;\n\n  /**\n   * \\brief Create modality by name.\n   *\n   * The following modality types are supported:\n   * - \"ColorGradient\"\n   * - \"DepthNormal\"\n   */\n  static Ptr<Modality> create(const std::string& modality_type);\n\n  /**\n   * \\brief Load a modality from file.\n   */\n  static Ptr<Modality> create(const FileNode& fn);\n\nprotected:\n  // Indirection is because process() has a default parameter.\n  virtual Ptr<QuantizedPyramid> processImpl(const Mat& src,\n                        const Mat& mask) const =0;\n};\n\n/**\n * \\brief Modality that computes quantized gradient orientations from a color image.\n */\nclass CV_EXPORTS ColorGradient : public Modality\n{\npublic:\n  /**\n   * \\brief Default constructor. Uses reasonable default parameter values.\n   */\n  ColorGradient();\n\n  /**\n   * \\brief Constructor.\n   *\n   * \\param weak_threshold   When quantizing, discard gradients with magnitude less than this.\n   * \\param num_features     How many features a template must contain.\n   * \\param strong_threshold Consider as candidate features only gradients whose norms are\n   *                         larger than this.\n   */\n  ColorGradient(float weak_threshold, size_t num_features, float strong_threshold);\n\n  virtual std::string name() const;\n\n  virtual void read(const FileNode& fn);\n  virtual void write(FileStorage& fs) const;\n\n  float weak_threshold;\n  size_t num_features;\n  float strong_threshold;\n\nprotected:\n  virtual Ptr<QuantizedPyramid> processImpl(const Mat& src,\n                        const Mat& mask) const;\n};\n\n/**\n * \\brief Modality that computes quantized surface normals from a dense depth map.\n */\nclass CV_EXPORTS DepthNormal : public Modality\n{\npublic:\n  /**\n   * \\brief Default constructor. Uses reasonable default parameter values.\n   */\n  DepthNormal();\n\n  /**\n   * \\brief Constructor.\n   *\n   * \\param distance_threshold   Ignore pixels beyond this distance.\n   * \\param difference_threshold When computing normals, ignore contributions of pixels whose\n   *                             depth difference with the central pixel is above this threshold.\n   * \\param num_features         How many features a template must contain.\n   * \\param extract_threshold    Consider as candidate feature only if there are no differing\n   *                             orientations within a distance of extract_threshold.\n   */\n  DepthNormal(int distance_threshold, int difference_threshold, size_t num_features,\n              int extract_threshold);\n\n  virtual std::string name() const;\n\n  virtual void read(const FileNode& fn);\n  virtual void write(FileStorage& fs) const;\n\n  int distance_threshold;\n  int difference_threshold;\n  size_t num_features;\n  int extract_threshold;\n\nprotected:\n  virtual Ptr<QuantizedPyramid> processImpl(const Mat& src,\n                        const Mat& mask) const;\n};\n\n/**\n * \\brief Debug function to colormap a quantized image for viewing.\n */\nvoid colormap(const Mat& quantized, Mat& dst);\n\n/**\n * \\brief Represents a successful template match.\n */\nstruct CV_EXPORTS Match\n{\n  Match()\n  {\n  }\n\n  Match(int x, int y, float similarity, const std::string& class_id, int template_id);\n\n  /// Sort matches with high similarity to the front\n  bool operator<(const Match& rhs) const\n  {\n    // Secondarily sort on template_id for the sake of duplicate removal\n    if (similarity != rhs.similarity)\n      return similarity > rhs.similarity;\n    else\n      return template_id < rhs.template_id;\n  }\n\n  bool operator==(const Match& rhs) const\n  {\n    return x == rhs.x && y == rhs.y && similarity == rhs.similarity && class_id == rhs.class_id;\n  }\n\n  int x;\n  int y;\n  float similarity;\n  std::string class_id;\n  int template_id;\n};\n\ninline  Match::Match(int _x, int _y, float _similarity, const std::string& _class_id, int _template_id)\n    : x(_x), y(_y), similarity(_similarity), class_id(_class_id), template_id(_template_id)\n  {\n  }\n\n/**\n * \\brief Object detector using the LINE template matching algorithm with any set of\n * modalities.\n */\nclass CV_EXPORTS Detector\n{\npublic:\n  /**\n   * \\brief Empty constructor, initialize with read().\n   */\n  Detector();\n\n  /**\n   * \\brief Constructor.\n   *\n   * \\param modalities       Modalities to use (color gradients, depth normals, ...).\n   * \\param T_pyramid        Value of the sampling step T at each pyramid level. The\n   *                         number of pyramid levels is T_pyramid.size().\n   */\n  Detector(const std::vector< Ptr<Modality> >& modalities, const std::vector<int>& T_pyramid);\n\n  /**\n   * \\brief Detect objects by template matching.\n   *\n   * Matches globally at the lowest pyramid level, then refines locally stepping up the pyramid.\n   *\n   * \\param      sources   Source images, one for each modality.\n   * \\param      threshold Similarity threshold, a percentage between 0 and 100.\n   * \\param[out] matches   Template matches, sorted by similarity score.\n   * \\param      class_ids If non-empty, only search for the desired object classes.\n   * \\param[out] quantized_images Optionally return vector<Mat> of quantized images.\n   * \\param      masks     The masks for consideration during matching. The masks should be CV_8UC1\n   *                       where 255 represents a valid pixel.  If non-empty, the vector must be\n   *                       the same size as sources.  Each element must be\n   *                       empty or the same size as its corresponding source.\n   */\n  void match(const std::vector<Mat>& sources, float threshold, std::vector<Match>& matches,\n             const std::vector<std::string>& class_ids = std::vector<std::string>(),\n             OutputArrayOfArrays quantized_images = noArray(),\n             const std::vector<Mat>& masks = std::vector<Mat>()) const;\n\n  /**\n   * \\brief Add new object template.\n   *\n   * \\param      sources      Source images, one for each modality.\n   * \\param      class_id     Object class ID.\n   * \\param      object_mask  Mask separating object from background.\n   * \\param[out] bounding_box Optionally return bounding box of the extracted features.\n   *\n   * \\return Template ID, or -1 if failed to extract a valid template.\n   */\n  int addTemplate(const std::vector<Mat>& sources, const std::string& class_id,\n          const Mat& object_mask, Rect* bounding_box = NULL);\n\n  /**\n   * \\brief Add a new object template computed by external means.\n   */\n  int addSyntheticTemplate(const std::vector<Template>& templates, const std::string& class_id);\n\n  /**\n   * \\brief Get the modalities used by this detector.\n   *\n   * You are not permitted to add/remove modalities, but you may dynamic_cast them to\n   * tweak parameters.\n   */\n  const std::vector< Ptr<Modality> >& getModalities() const { return modalities; }\n\n  /**\n   * \\brief Get sampling step T at pyramid_level.\n   */\n  int getT(int pyramid_level) const { return T_at_level[pyramid_level]; }\n\n  /**\n   * \\brief Get number of pyramid levels used by this detector.\n   */\n  int pyramidLevels() const { return pyramid_levels; }\n\n  /**\n   * \\brief Get the template pyramid identified by template_id.\n   *\n   * For example, with 2 modalities (Gradient, Normal) and two pyramid levels\n   * (L0, L1), the order is (GradientL0, NormalL0, GradientL1, NormalL1).\n   */\n  const std::vector<Template>& getTemplates(const std::string& class_id, int template_id) const;\n\n  int numTemplates() const;\n  int numTemplates(const std::string& class_id) const;\n  int numClasses() const { return static_cast<int>(class_templates.size()); }\n\n  std::vector<std::string> classIds() const;\n\n  void read(const FileNode& fn);\n  void write(FileStorage& fs) const;\n\n  std::string readClass(const FileNode& fn, const std::string &class_id_override = \"\");\n  void writeClass(const std::string& class_id, FileStorage& fs) const;\n\n  void readClasses(const std::vector<std::string>& class_ids,\n                   const std::string& format = \"templates_%s.yml.gz\");\n  void writeClasses(const std::string& format = \"templates_%s.yml.gz\") const;\n\nprotected:\n  std::vector< Ptr<Modality> > modalities;\n  int pyramid_levels;\n  std::vector<int> T_at_level;\n\n  typedef std::vector<Template> TemplatePyramid;\n  typedef std::map<std::string, std::vector<TemplatePyramid> > TemplatesMap;\n  TemplatesMap class_templates;\n\n  typedef std::vector<Mat> LinearMemories;\n  // Indexed as [pyramid level][modality][quantized label]\n  typedef std::vector< std::vector<LinearMemories> > LinearMemoryPyramid;\n\n  void matchClass(const LinearMemoryPyramid& lm_pyramid,\n                  const std::vector<Size>& sizes,\n                  float threshold, std::vector<Match>& matches,\n                  const std::string& class_id,\n                  const std::vector<TemplatePyramid>& template_pyramids) const;\n};\n\n/**\n * \\brief Factory function for detector using LINE algorithm with color gradients.\n *\n * Default parameter settings suitable for VGA images.\n */\nCV_EXPORTS Ptr<Detector> getDefaultLINE();\n\n/**\n * \\brief Factory function for detector using LINE-MOD algorithm with color gradients\n * and depth normals.\n *\n * Default parameter settings suitable for VGA images.\n */\nCV_EXPORTS Ptr<Detector> getDefaultLINEMOD();\n\n} // namespace linemod\n} // namespace cv\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/opencv.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_ALL_HPP__\n#define __OPENCV_ALL_HPP__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/flann/miniflann.hpp\"\n#include \"opencv2/imgproc/imgproc_c.h\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/photo/photo.hpp\"\n//#include \"opencv2/video/video.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/objdetect/objdetect.hpp\"\n#include \"opencv2/calib3d/calib3d.hpp\"\n#include \"opencv2/ml/ml.hpp\"\n#include \"opencv2/highgui/highgui_c.h\"\n#include \"opencv2/highgui/highgui.hpp\"\n#include \"opencv2/contrib/contrib.hpp\"\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/opencv_modules.hpp",
    "content": "/*\n *      ** File generated automatically, do not modify **\n *\n * This file defines the list of modules available in current build configuration\n *\n *\n*/\n\n#define HAVE_OPENCV_CALIB3D\n#define HAVE_OPENCV_CONTRIB\n#define HAVE_OPENCV_CORE\n#define HAVE_OPENCV_FEATURES2D\n#define HAVE_OPENCV_FLANN\n#define HAVE_OPENCV_HIGHGUI\n#define HAVE_OPENCV_IMGPROC\n#define HAVE_OPENCV_LEGACY\n#define HAVE_OPENCV_ML\n#define HAVE_OPENCV_NONFREE\n#define HAVE_OPENCV_OBJDETECT\n#define HAVE_OPENCV_PHOTO\n#define HAVE_OPENCV_STITCHING\n#define HAVE_OPENCV_VIDEO\n#define HAVE_OPENCV_VIDEOSTAB\n#define HAVE_OPENCV_WORLD\n\n\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/photo/photo.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_PHOTO_HPP__\n#define __OPENCV_PHOTO_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n\n#include \"opencv2/photo/photo_c.h\"\n\n#ifdef __cplusplus\n\n/*! \\namespace cv\n Namespace where all the C++ OpenCV functionality resides\n */\nnamespace cv\n{\n\n//! the inpainting algorithm\nenum\n{\n    INPAINT_NS=CV_INPAINT_NS, // Navier-Stokes algorithm\n    INPAINT_TELEA=CV_INPAINT_TELEA // A. Telea algorithm\n};\n\n//! restores the damaged image areas using one of the available intpainting algorithms\nCV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask,\n                           OutputArray dst, double inpaintRadius, int flags );\n\n\nCV_EXPORTS_W void fastNlMeansDenoising( InputArray src, OutputArray dst, float h = 3,\n                                        int templateWindowSize = 7, int searchWindowSize = 21);\n\nCV_EXPORTS_W void fastNlMeansDenoisingColored( InputArray src, OutputArray dst,\n                                               float h = 3, float hColor = 3,\n                                               int templateWindowSize = 7, int searchWindowSize = 21);\n\nCV_EXPORTS_W void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs, OutputArray dst,\n                                             int imgToDenoiseIndex, int temporalWindowSize,\n                                             float h = 3, int templateWindowSize = 7, int searchWindowSize = 21);\n\nCV_EXPORTS_W void fastNlMeansDenoisingColoredMulti( InputArrayOfArrays srcImgs, OutputArray dst,\n                                                    int imgToDenoiseIndex, int temporalWindowSize,\n                                                    float h = 3, float hColor = 3,\n                                                    int templateWindowSize = 7, int searchWindowSize = 21);\n\n}\n\n#endif //__cplusplus\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/photo/photo_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_PHOTO_C_H__\n#define __OPENCV_PHOTO_C_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Inpainting algorithms */\nenum\n{\n    CV_INPAINT_NS      =0,\n    CV_INPAINT_TELEA   =1\n};\n\n\n/* Inpaints the selected region in the image */\nCVAPI(void) cvInpaint( const CvArr* src, const CvArr* inpaint_mask,\n                       CvArr* dst, double inpaintRange, int flags );\n\n\n#ifdef __cplusplus\n} //extern \"C\"\n#endif\n\n#endif //__OPENCV_PHOTO_C_H__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/autocalib.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_AUTOCALIB_HPP__\n#define __OPENCV_STITCHING_AUTOCALIB_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"matchers.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n// See \"Construction of Panoramic Image Mosaics with Global and Local Alignment\"\n// by Heung-Yeung Shum and Richard Szeliski.\nvoid CV_EXPORTS focalsFromHomography(const Mat &H, double &f0, double &f1, bool &f0_ok, bool &f1_ok);\n\nvoid CV_EXPORTS estimateFocal(const std::vector<ImageFeatures> &features,\n                              const std::vector<MatchesInfo> &pairwise_matches,\n                              std::vector<double> &focals);\n\nbool CV_EXPORTS calibrateRotatingCamera(const std::vector<Mat> &Hs, Mat &K);\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_AUTOCALIB_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/blenders.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_BLENDERS_HPP__\n#define __OPENCV_STITCHING_BLENDERS_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n\n// Simple blender which puts one image over another\nclass CV_EXPORTS Blender\n{\npublic:\n    virtual ~Blender() {}\n\n    enum { NO, FEATHER, MULTI_BAND };\n    static Ptr<Blender> createDefault(int type, bool try_gpu = false);\n\n    void prepare(const std::vector<Point> &corners, const std::vector<Size> &sizes);\n    virtual void prepare(Rect dst_roi);\n    virtual void feed(const Mat &img, const Mat &mask, Point tl);\n    virtual void blend(Mat &dst, Mat &dst_mask);\n\nprotected:\n    Mat dst_, dst_mask_;\n    Rect dst_roi_;\n};\n\n\nclass CV_EXPORTS FeatherBlender : public Blender\n{\npublic:\n    FeatherBlender(float sharpness = 0.02f);\n\n    float sharpness() const { return sharpness_; }\n    void setSharpness(float val) { sharpness_ = val; }\n\n    void prepare(Rect dst_roi);\n    void feed(const Mat &img, const Mat &mask, Point tl);\n    void blend(Mat &dst, Mat &dst_mask);\n\n    // Creates weight maps for fixed set of source images by their masks and top-left corners.\n    // Final image can be obtained by simple weighting of the source images.\n    Rect createWeightMaps(const std::vector<Mat> &masks, const std::vector<Point> &corners,\n                          std::vector<Mat> &weight_maps);\n\nprivate:\n    float sharpness_;\n    Mat weight_map_;\n    Mat dst_weight_map_;\n};\n\ninline FeatherBlender::FeatherBlender(float _sharpness) { setSharpness(_sharpness); }\n\n\nclass CV_EXPORTS MultiBandBlender : public Blender\n{\npublic:\n    MultiBandBlender(int try_gpu = false, int num_bands = 5, int weight_type = CV_32F);\n\n    int numBands() const { return actual_num_bands_; }\n    void setNumBands(int val) { actual_num_bands_ = val; }\n\n    void prepare(Rect dst_roi);\n    void feed(const Mat &img, const Mat &mask, Point tl);\n    void blend(Mat &dst, Mat &dst_mask);\n\nprivate:\n    int actual_num_bands_, num_bands_;\n    std::vector<Mat> dst_pyr_laplace_;\n    std::vector<Mat> dst_band_weights_;\n    Rect dst_roi_final_;\n    bool can_use_gpu_;\n    int weight_type_; //CV_32F or CV_16S\n};\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\nvoid CV_EXPORTS normalizeUsingWeightMap(const Mat& weight, Mat& src);\n\nvoid CV_EXPORTS createWeightMap(const Mat& mask, float sharpness, Mat& weight);\n\nvoid CV_EXPORTS createLaplacePyr(const Mat &img, int num_levels, std::vector<Mat>& pyr);\nvoid CV_EXPORTS createLaplacePyrGpu(const Mat &img, int num_levels, std::vector<Mat>& pyr);\n\n// Restores source image\nvoid CV_EXPORTS restoreImageFromLaplacePyr(std::vector<Mat>& pyr);\nvoid CV_EXPORTS restoreImageFromLaplacePyrGpu(std::vector<Mat>& pyr);\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_BLENDERS_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/camera.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_CAMERA_HPP__\n#define __OPENCV_STITCHING_CAMERA_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nstruct CV_EXPORTS CameraParams\n{\n    CameraParams();\n    CameraParams(const CameraParams& other);\n    const CameraParams& operator =(const CameraParams& other);\n    Mat K() const;\n\n    double focal; // Focal length\n    double aspect; // Aspect ratio\n    double ppx; // Principal point X\n    double ppy; // Principal point Y\n    Mat R; // Rotation\n    Mat t; // Translation\n};\n\n} // namespace detail\n} // namespace cv\n\n#endif // #ifndef __OPENCV_STITCHING_CAMERA_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/exposure_compensate.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n#define __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS ExposureCompensator\n{\npublic:\n    virtual ~ExposureCompensator() {}\n\n    enum { NO, GAIN, GAIN_BLOCKS };\n    static Ptr<ExposureCompensator> createDefault(int type);\n\n    void feed(const std::vector<Point> &corners, const std::vector<Mat> &images,\n              const std::vector<Mat> &masks);\n    virtual void feed(const std::vector<Point> &corners, const std::vector<Mat> &images,\n                      const std::vector<std::pair<Mat,uchar> > &masks) = 0;\n    virtual void apply(int index, Point corner, Mat &image, const Mat &mask) = 0;\n};\n\n\nclass CV_EXPORTS NoExposureCompensator : public ExposureCompensator\n{\npublic:\n    void feed(const std::vector<Point> &/*corners*/, const std::vector<Mat> &/*images*/,\n              const std::vector<std::pair<Mat,uchar> > &/*masks*/) {};\n    void apply(int /*index*/, Point /*corner*/, Mat &/*image*/, const Mat &/*mask*/) {};\n};\n\n\nclass CV_EXPORTS GainCompensator : public ExposureCompensator\n{\npublic:\n    void feed(const std::vector<Point> &corners, const std::vector<Mat> &images,\n              const std::vector<std::pair<Mat,uchar> > &masks);\n    void apply(int index, Point corner, Mat &image, const Mat &mask);\n    std::vector<double> gains() const;\n\nprivate:\n    Mat_<double> gains_;\n};\n\n\nclass CV_EXPORTS BlocksGainCompensator : public ExposureCompensator\n{\npublic:\n    BlocksGainCompensator(int bl_width = 32, int bl_height = 32)\n            : bl_width_(bl_width), bl_height_(bl_height) {}\n    void feed(const std::vector<Point> &corners, const std::vector<Mat> &images,\n              const std::vector<std::pair<Mat,uchar> > &masks);\n    void apply(int index, Point corner, Mat &image, const Mat &mask);\n\nprivate:\n    int bl_width_, bl_height_;\n    std::vector<Mat_<float> > gain_maps_;\n};\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/matchers.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_MATCHERS_HPP__\n#define __OPENCV_STITCHING_MATCHERS_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/gpumat.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n\n#include \"opencv2/opencv_modules.hpp\"\n\n#if defined(HAVE_OPENCV_NONFREE)\n    #include \"opencv2/nonfree/gpu.hpp\"\n#endif\n\nnamespace cv {\nnamespace detail {\n\nstruct CV_EXPORTS ImageFeatures\n{\n    int img_idx;\n    Size img_size;\n    std::vector<KeyPoint> keypoints;\n    Mat descriptors;\n};\n\n\nclass CV_EXPORTS FeaturesFinder\n{\npublic:\n    virtual ~FeaturesFinder() {}\n    void operator ()(const Mat &image, ImageFeatures &features);\n    void operator ()(const Mat &image, ImageFeatures &features, const std::vector<cv::Rect> &rois);\n    virtual void collectGarbage() {}\n\nprotected:\n    virtual void find(const Mat &image, ImageFeatures &features) = 0;\n};\n\n\nclass CV_EXPORTS SurfFeaturesFinder : public FeaturesFinder\n{\npublic:\n    SurfFeaturesFinder(double hess_thresh = 300., int num_octaves = 3, int num_layers = 4,\n                       int num_octaves_descr = /*4*/3, int num_layers_descr = /*2*/4);\n\nprivate:\n    void find(const Mat &image, ImageFeatures &features);\n\n    Ptr<FeatureDetector> detector_;\n    Ptr<DescriptorExtractor> extractor_;\n    Ptr<Feature2D> surf;\n};\n\nclass CV_EXPORTS OrbFeaturesFinder : public FeaturesFinder\n{\npublic:\n    OrbFeaturesFinder(Size _grid_size = Size(3,1), int nfeatures=1500, float scaleFactor=1.3f, int nlevels=5);\n\nprivate:\n    void find(const Mat &image, ImageFeatures &features);\n\n    Ptr<ORB> orb;\n    Size grid_size;\n};\n\n\n#if defined(HAVE_OPENCV_NONFREE)\nclass CV_EXPORTS SurfFeaturesFinderGpu : public FeaturesFinder\n{\npublic:\n    SurfFeaturesFinderGpu(double hess_thresh = 300., int num_octaves = 3, int num_layers = 4,\n                          int num_octaves_descr = 4, int num_layers_descr = 2);\n\n    void collectGarbage();\n\nprivate:\n    void find(const Mat &image, ImageFeatures &features);\n\n    gpu::GpuMat image_;\n    gpu::GpuMat gray_image_;\n    gpu::SURF_GPU surf_;\n    gpu::GpuMat keypoints_;\n    gpu::GpuMat descriptors_;\n    int num_octaves_, num_layers_;\n    int num_octaves_descr_, num_layers_descr_;\n};\n#endif\n\n\nstruct CV_EXPORTS MatchesInfo\n{\n    MatchesInfo();\n    MatchesInfo(const MatchesInfo &other);\n    const MatchesInfo& operator =(const MatchesInfo &other);\n\n    int src_img_idx, dst_img_idx;       // Images indices (optional)\n    std::vector<DMatch> matches;\n    std::vector<uchar> inliers_mask;    // Geometrically consistent matches mask\n    int num_inliers;                    // Number of geometrically consistent matches\n    Mat H;                              // Estimated homography\n    double confidence;                  // Confidence two images are from the same panorama\n};\n\n\nclass CV_EXPORTS FeaturesMatcher\n{\npublic:\n    virtual ~FeaturesMatcher() {}\n\n    void operator ()(const ImageFeatures &features1, const ImageFeatures &features2,\n                     MatchesInfo& matches_info) { match(features1, features2, matches_info); }\n\n    void operator ()(const std::vector<ImageFeatures> &features, std::vector<MatchesInfo> &pairwise_matches,\n                     const cv::Mat &mask = cv::Mat());\n\n    bool isThreadSafe() const { return is_thread_safe_; }\n\n    virtual void collectGarbage() {}\n\nprotected:\n    FeaturesMatcher(bool is_thread_safe = false) : is_thread_safe_(is_thread_safe) {}\n\n    virtual void match(const ImageFeatures &features1, const ImageFeatures &features2,\n                       MatchesInfo& matches_info) = 0;\n\n    bool is_thread_safe_;\n};\n\n\nclass CV_EXPORTS BestOf2NearestMatcher : public FeaturesMatcher\n{\npublic:\n    BestOf2NearestMatcher(bool try_use_gpu = false, float match_conf = 0.3f, int num_matches_thresh1 = 6,\n                          int num_matches_thresh2 = 6);\n\n    void collectGarbage();\n\nprotected:\n    void match(const ImageFeatures &features1, const ImageFeatures &features2, MatchesInfo &matches_info);\n\n    int num_matches_thresh1_;\n    int num_matches_thresh2_;\n    Ptr<FeaturesMatcher> impl_;\n};\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_MATCHERS_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/motion_estimators.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n#define __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"matchers.hpp\"\n#include \"util.hpp\"\n#include \"camera.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS Estimator\n{\npublic:\n    virtual ~Estimator() {}\n\n    void operator ()(const std::vector<ImageFeatures> &features, const std::vector<MatchesInfo> &pairwise_matches,\n                     std::vector<CameraParams> &cameras)\n        { estimate(features, pairwise_matches, cameras); }\n\nprotected:\n    virtual void estimate(const std::vector<ImageFeatures> &features, const std::vector<MatchesInfo> &pairwise_matches,\n                          std::vector<CameraParams> &cameras) = 0;\n};\n\n\nclass CV_EXPORTS HomographyBasedEstimator : public Estimator\n{\npublic:\n    HomographyBasedEstimator(bool is_focals_estimated = false)\n        : is_focals_estimated_(is_focals_estimated) {}\n\nprivate:\n    void estimate(const std::vector<ImageFeatures> &features, const std::vector<MatchesInfo> &pairwise_matches,\n                  std::vector<CameraParams> &cameras);\n\n    bool is_focals_estimated_;\n};\n\n\nclass CV_EXPORTS BundleAdjusterBase : public Estimator\n{\npublic:\n    const Mat refinementMask() const { return refinement_mask_.clone(); }\n    void setRefinementMask(const Mat &mask)\n    {\n        CV_Assert(mask.type() == CV_8U && mask.size() == Size(3, 3));\n        refinement_mask_ = mask.clone();\n    }\n\n    double confThresh() const { return conf_thresh_; }\n    void setConfThresh(double conf_thresh) { conf_thresh_ = conf_thresh; }\n\n    CvTermCriteria termCriteria() { return term_criteria_; }\n    void setTermCriteria(const CvTermCriteria& term_criteria) { term_criteria_ = term_criteria; }\n\nprotected:\n    BundleAdjusterBase(int num_params_per_cam, int num_errs_per_measurement)\n        : num_params_per_cam_(num_params_per_cam),\n          num_errs_per_measurement_(num_errs_per_measurement)\n    {\n        setRefinementMask(Mat::ones(3, 3, CV_8U));\n        setConfThresh(1.);\n        setTermCriteria(cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 1000, DBL_EPSILON));\n    }\n\n    // Runs bundle adjustment\n    virtual void estimate(const std::vector<ImageFeatures> &features,\n                          const std::vector<MatchesInfo> &pairwise_matches,\n                          std::vector<CameraParams> &cameras);\n\n    virtual void setUpInitialCameraParams(const std::vector<CameraParams> &cameras) = 0;\n    virtual void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const = 0;\n    virtual void calcError(Mat &err) = 0;\n    virtual void calcJacobian(Mat &jac) = 0;\n\n    // 3x3 8U mask, where 0 means don't refine respective parameter, != 0 means refine\n    Mat refinement_mask_;\n\n    int num_images_;\n    int total_num_matches_;\n\n    int num_params_per_cam_;\n    int num_errs_per_measurement_;\n\n    const ImageFeatures *features_;\n    const MatchesInfo *pairwise_matches_;\n\n    // Threshold to filter out poorly matched image pairs\n    double conf_thresh_;\n\n    //Levenberg–Marquardt algorithm termination criteria\n    CvTermCriteria term_criteria_;\n\n    // Camera parameters matrix (CV_64F)\n    Mat cam_params_;\n\n    // Connected images pairs\n    std::vector<std::pair<int,int> > edges_;\n};\n\n\n// Minimizes reprojection error.\n// It can estimate focal length, aspect ratio, principal point.\n// You can affect only on them via the refinement mask.\nclass CV_EXPORTS BundleAdjusterReproj : public BundleAdjusterBase\n{\npublic:\n    BundleAdjusterReproj() : BundleAdjusterBase(7, 2) {}\n\nprivate:\n    void setUpInitialCameraParams(const std::vector<CameraParams> &cameras);\n    void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const;\n    void calcError(Mat &err);\n    void calcJacobian(Mat &jac);\n\n    Mat err1_, err2_;\n};\n\n\n// Minimizes sun of ray-to-ray distances.\n// It can estimate focal length. It ignores the refinement mask for now.\nclass CV_EXPORTS BundleAdjusterRay : public BundleAdjusterBase\n{\npublic:\n    BundleAdjusterRay() : BundleAdjusterBase(4, 3) {}\n\nprivate:\n    void setUpInitialCameraParams(const std::vector<CameraParams> &cameras);\n    void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const;\n    void calcError(Mat &err);\n    void calcJacobian(Mat &jac);\n\n    Mat err1_, err2_;\n};\n\n\nenum WaveCorrectKind\n{\n    WAVE_CORRECT_HORIZ,\n    WAVE_CORRECT_VERT\n};\n\nvoid CV_EXPORTS waveCorrect(std::vector<Mat> &rmats, WaveCorrectKind kind);\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\n// Returns matches graph representation in DOT language\nstd::string CV_EXPORTS matchesGraphAsString(std::vector<std::string> &pathes, std::vector<MatchesInfo> &pairwise_matches,\n                                            float conf_threshold);\n\nstd::vector<int> CV_EXPORTS leaveBiggestComponent(std::vector<ImageFeatures> &features, std::vector<MatchesInfo> &pairwise_matches,\n                                                  float conf_threshold);\n\nvoid CV_EXPORTS findMaxSpanningTree(int num_images, const std::vector<MatchesInfo> &pairwise_matches,\n                                    Graph &span_tree, std::vector<int> &centers);\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/seam_finders.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n#define __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n\n#include <set>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/gpumat.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS SeamFinder\n{\npublic:\n    virtual ~SeamFinder() {}\n    virtual void find(const std::vector<Mat> &src, const std::vector<Point> &corners,\n                      std::vector<Mat> &masks) = 0;\n};\n\n\nclass CV_EXPORTS NoSeamFinder : public SeamFinder\n{\npublic:\n    void find(const std::vector<Mat>&, const std::vector<Point>&, std::vector<Mat>&) {}\n};\n\n\nclass CV_EXPORTS PairwiseSeamFinder : public SeamFinder\n{\npublic:\n    virtual void find(const std::vector<Mat> &src, const std::vector<Point> &corners,\n                      std::vector<Mat> &masks);\n\nprotected:\n    void run();\n    virtual void findInPair(size_t first, size_t second, Rect roi) = 0;\n\n    std::vector<Mat> images_;\n    std::vector<Size> sizes_;\n    std::vector<Point> corners_;\n    std::vector<Mat> masks_;\n};\n\n\nclass CV_EXPORTS VoronoiSeamFinder : public PairwiseSeamFinder\n{\npublic:\n    virtual void find(const std::vector<Size> &size, const std::vector<Point> &corners,\n                      std::vector<Mat> &masks);\nprivate:\n    void findInPair(size_t first, size_t second, Rect roi);\n};\n\n\nclass CV_EXPORTS DpSeamFinder : public SeamFinder\n{\npublic:\n    enum CostFunction { COLOR, COLOR_GRAD };\n\n    DpSeamFinder(CostFunction costFunc = COLOR);\n\n    CostFunction costFunction() const { return costFunc_; }\n    void setCostFunction(CostFunction val) { costFunc_ = val; }\n\n    virtual void find(const std::vector<Mat> &src, const std::vector<Point> &corners,\n                      std::vector<Mat> &masks);\n\nprivate:\n    enum ComponentState\n    {\n        FIRST = 1, SECOND = 2, INTERS = 4,\n        INTERS_FIRST = INTERS | FIRST,\n        INTERS_SECOND = INTERS | SECOND\n    };\n\n    class ImagePairLess\n    {\n    public:\n        ImagePairLess(const std::vector<Mat> &images, const std::vector<Point> &corners)\n            : src_(&images[0]), corners_(&corners[0]) {}\n\n        bool operator() (const std::pair<size_t, size_t> &l, const std::pair<size_t, size_t> &r) const\n        {\n            Point c1 = corners_[l.first] + Point(src_[l.first].cols / 2, src_[l.first].rows / 2);\n            Point c2 = corners_[l.second] + Point(src_[l.second].cols / 2, src_[l.second].rows / 2);\n            int d1 = (c1 - c2).dot(c1 - c2);\n\n            c1 = corners_[r.first] + Point(src_[r.first].cols / 2, src_[r.first].rows / 2);\n            c2 = corners_[r.second] + Point(src_[r.second].cols / 2, src_[r.second].rows / 2);\n            int d2 = (c1 - c2).dot(c1 - c2);\n\n            return d1 < d2;\n        }\n\n    private:\n        const Mat *src_;\n        const Point *corners_;\n    };\n\n    class ClosePoints\n    {\n    public:\n        ClosePoints(int minDist) : minDist_(minDist) {}\n\n        bool operator() (const Point &p1, const Point &p2) const\n        {\n            int dist2 = (p1.x-p2.x) * (p1.x-p2.x) + (p1.y-p2.y) * (p1.y-p2.y);\n            return dist2 < minDist_ * minDist_;\n        }\n\n    private:\n        int minDist_;\n    };\n\n    void process(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2, Mat &mask1, Mat &mask2);\n\n    void findComponents();\n\n    void findEdges();\n\n    void resolveConflicts(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2, Mat &mask1, Mat &mask2);\n\n    void computeGradients(const Mat &image1, const Mat &image2);\n\n    bool hasOnlyOneNeighbor(int comp);\n\n    bool closeToContour(int y, int x, const Mat_<uchar> &contourMask);\n\n    bool getSeamTips(int comp1, int comp2, Point &p1, Point &p2);\n\n    void computeCosts(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2,\n            int comp, Mat_<float> &costV, Mat_<float> &costH);\n\n    bool estimateSeam(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2, int comp,\n            Point p1, Point p2, std::vector<Point> &seam, bool &isHorizontal);\n\n    void updateLabelsUsingSeam(\n            int comp1, int comp2, const std::vector<Point> &seam, bool isHorizontalSeam);\n\n    CostFunction costFunc_;\n\n    // processing images pair data\n    Point unionTl_, unionBr_;\n    Size unionSize_;\n    Mat_<uchar> mask1_, mask2_;\n    Mat_<uchar> contour1mask_, contour2mask_;\n    Mat_<float> gradx1_, grady1_;\n    Mat_<float> gradx2_, grady2_;\n\n    // components data\n    int ncomps_;\n    Mat_<int> labels_;\n    std::vector<ComponentState> states_;\n    std::vector<Point> tls_, brs_;\n    std::vector<std::vector<Point> > contours_;\n    std::set<std::pair<int, int> > edges_;\n};\n\n\nclass CV_EXPORTS GraphCutSeamFinderBase\n{\npublic:\n    enum { COST_COLOR, COST_COLOR_GRAD };\n};\n\n\nclass CV_EXPORTS GraphCutSeamFinder : public GraphCutSeamFinderBase, public SeamFinder\n{\npublic:\n    GraphCutSeamFinder(int cost_type = COST_COLOR_GRAD, float terminal_cost = 10000.f,\n                       float bad_region_penalty = 1000.f);\n\n    ~GraphCutSeamFinder();\n\n    void find(const std::vector<Mat> &src, const std::vector<Point> &corners,\n              std::vector<Mat> &masks);\n\nprivate:\n    // To avoid GCGraph dependency\n    class Impl;\n    Ptr<PairwiseSeamFinder> impl_;\n};\n\n\nclass CV_EXPORTS GraphCutSeamFinderGpu : public GraphCutSeamFinderBase, public PairwiseSeamFinder\n{\npublic:\n    GraphCutSeamFinderGpu(int cost_type = COST_COLOR_GRAD, float terminal_cost = 10000.f,\n                          float bad_region_penalty = 1000.f)\n                          : cost_type_(cost_type), terminal_cost_(terminal_cost),\n                            bad_region_penalty_(bad_region_penalty) {}\n\n    void find(const std::vector<cv::Mat> &src, const std::vector<cv::Point> &corners,\n              std::vector<cv::Mat> &masks);\n    void findInPair(size_t first, size_t second, Rect roi);\n\nprivate:\n    void setGraphWeightsColor(const cv::Mat &img1, const cv::Mat &img2, const cv::Mat &mask1, const cv::Mat &mask2,\n                              cv::Mat &terminals, cv::Mat &leftT, cv::Mat &rightT, cv::Mat &top, cv::Mat &bottom);\n    void setGraphWeightsColorGrad(const cv::Mat &img1, const cv::Mat &img2, const cv::Mat &dx1, const cv::Mat &dx2,\n                                  const cv::Mat &dy1, const cv::Mat &dy2, const cv::Mat &mask1, const cv::Mat &mask2,\n                                  cv::Mat &terminals, cv::Mat &leftT, cv::Mat &rightT, cv::Mat &top, cv::Mat &bottom);\n    std::vector<Mat> dx_, dy_;\n    int cost_type_;\n    float terminal_cost_;\n    float bad_region_penalty_;\n};\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/util.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_UTIL_HPP__\n#define __OPENCV_STITCHING_UTIL_HPP__\n\n#include <list>\n#include \"opencv2/core/core.hpp\"\n\n#define ENABLE_LOG 0\n\n// TODO remove LOG macros, add logging class\n#if ENABLE_LOG\n#ifdef ANDROID\n  #include <iostream>\n  #include <sstream>\n  #include <android/log.h>\n  #define LOG_STITCHING_MSG(msg) \\\n    do { \\\n        std::stringstream _os; \\\n        _os << msg; \\\n       __android_log_print(ANDROID_LOG_DEBUG, \"STITCHING\", \"%s\", _os.str().c_str()); \\\n    } while(0);\n#else\n  #include <iostream>\n  #define LOG_STITCHING_MSG(msg) for(;;) { std::cout << msg; std::cout.flush(); break; }\n#endif\n#else\n  #define LOG_STITCHING_MSG(msg)\n#endif\n\n#define LOG_(_level, _msg)                     \\\n    for(;;)                                    \\\n    {                                          \\\n        if ((_level) >= ::cv::detail::stitchingLogLevel()) \\\n        {                                      \\\n            LOG_STITCHING_MSG(_msg);           \\\n        }                                      \\\n    break;                                 \\\n    }\n\n\n#define LOG(msg) LOG_(1, msg)\n#define LOG_CHAT(msg) LOG_(0, msg)\n\n#define LOGLN(msg) LOG(msg << std::endl)\n#define LOGLN_CHAT(msg) LOG_CHAT(msg << std::endl)\n\n//#if DEBUG_LOG_CHAT\n//  #define LOG_CHAT(msg) LOG(msg)\n//  #define LOGLN_CHAT(msg) LOGLN(msg)\n//#else\n//  #define LOG_CHAT(msg) do{}while(0)\n//  #define LOGLN_CHAT(msg) do{}while(0)\n//#endif\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS DisjointSets\n{\npublic:\n    DisjointSets(int elem_count = 0) { createOneElemSets(elem_count); }\n\n    void createOneElemSets(int elem_count);\n    int findSetByElem(int elem);\n    int mergeSets(int set1, int set2);\n\n    std::vector<int> parent;\n    std::vector<int> size;\n\nprivate:\n    std::vector<int> rank_;\n};\n\n\nstruct CV_EXPORTS GraphEdge\n{\n    GraphEdge(int from, int to, float weight);\n    bool operator <(const GraphEdge& other) const { return weight < other.weight; }\n    bool operator >(const GraphEdge& other) const { return weight > other.weight; }\n\n    int from, to;\n    float weight;\n};\n\ninline GraphEdge::GraphEdge(int _from, int _to, float _weight) : from(_from), to(_to), weight(_weight) {}\n\n\nclass CV_EXPORTS Graph\n{\npublic:\n    Graph(int num_vertices = 0) { create(num_vertices); }\n    void create(int num_vertices) { edges_.assign(num_vertices, std::list<GraphEdge>()); }\n    int numVertices() const { return static_cast<int>(edges_.size()); }\n    void addEdge(int from, int to, float weight);\n    template <typename B> B forEach(B body) const;\n    template <typename B> B walkBreadthFirst(int from, B body) const;\n\nprivate:\n    std::vector< std::list<GraphEdge> > edges_;\n};\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\nCV_EXPORTS bool overlapRoi(Point tl1, Point tl2, Size sz1, Size sz2, Rect &roi);\nCV_EXPORTS Rect resultRoi(const std::vector<Point> &corners, const std::vector<Mat> &images);\nCV_EXPORTS Rect resultRoi(const std::vector<Point> &corners, const std::vector<Size> &sizes);\nCV_EXPORTS Point resultTl(const std::vector<Point> &corners);\n\n// Returns random 'count' element subset of the {0,1,...,size-1} set\nCV_EXPORTS void selectRandomSubset(int count, int size, std::vector<int> &subset);\n\nCV_EXPORTS int& stitchingLogLevel();\n\n} // namespace detail\n} // namespace cv\n\n#include \"util_inl.hpp\"\n\n#endif // __OPENCV_STITCHING_UTIL_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/util_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_UTIL_INL_HPP__\n#define __OPENCV_STITCHING_UTIL_INL_HPP__\n\n#include <queue>\n#include \"opencv2/core/core.hpp\"\n#include \"util.hpp\" // Make your IDE see declarations\n\nnamespace cv {\nnamespace detail {\n\ntemplate <typename B>\nB Graph::forEach(B body) const\n{\n    for (int i = 0; i < numVertices(); ++i)\n    {\n        std::list<GraphEdge>::const_iterator edge = edges_[i].begin();\n        for (; edge != edges_[i].end(); ++edge)\n            body(*edge);\n    }\n    return body;\n}\n\n\ntemplate <typename B>\nB Graph::walkBreadthFirst(int from, B body) const\n{\n    std::vector<bool> was(numVertices(), false);\n    std::queue<int> vertices;\n\n    was[from] = true;\n    vertices.push(from);\n\n    while (!vertices.empty())\n    {\n        int vertex = vertices.front();\n        vertices.pop();\n\n        std::list<GraphEdge>::const_iterator edge = edges_[vertex].begin();\n        for (; edge != edges_[vertex].end(); ++edge)\n        {\n            if (!was[edge->to])\n            {\n                body(*edge);\n                was[edge->to] = true;\n                vertices.push(edge->to);\n            }\n        }\n    }\n\n    return body;\n}\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Some auxiliary math functions\n\nstatic inline\nfloat normL2(const Point3f& a)\n{\n    return a.x * a.x + a.y * a.y + a.z * a.z;\n}\n\n\nstatic inline\nfloat normL2(const Point3f& a, const Point3f& b)\n{\n    return normL2(a - b);\n}\n\n\nstatic inline\ndouble normL2sq(const Mat &r)\n{\n    return r.dot(r);\n}\n\n\nstatic inline int sqr(int x) { return x * x; }\nstatic inline float sqr(float x) { return x * x; }\nstatic inline double sqr(double x) { return x * x; }\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_UTIL_INL_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/warpers.hpp",
    "content": " /*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPERS_HPP__\n#define __OPENCV_STITCHING_WARPERS_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/gpumat.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS RotationWarper\n{\npublic:\n    virtual ~RotationWarper() {}\n\n    virtual Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R) = 0;\n\n    virtual Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap) = 0;\n\n    virtual Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                       Mat &dst) = 0;\n\n    virtual void warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                              Size dst_size, Mat &dst) = 0;\n\n    virtual Rect warpRoi(Size src_size, const Mat &K, const Mat &R) = 0;\n\n    float getScale() const { return 1.f; }\n    void setScale(float) {}\n};\n\n\nstruct CV_EXPORTS ProjectorBase\n{\n    void setCameraParams(const Mat &K = Mat::eye(3, 3, CV_32F),\n                         const Mat &R = Mat::eye(3, 3, CV_32F),\n                         const Mat &T = Mat::zeros(3, 1, CV_32F));\n\n    float scale;\n    float k[9];\n    float rinv[9];\n    float r_kinv[9];\n    float k_rinv[9];\n    float t[3];\n};\n\n\ntemplate <class P>\nclass CV_EXPORTS RotationWarperBase : public RotationWarper\n{\npublic:\n    Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R);\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap);\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               Mat &dst);\n\n    void warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                      Size dst_size, Mat &dst);\n\n    Rect warpRoi(Size src_size, const Mat &K, const Mat &R);\n\n    float getScale() const { return projector_.scale; }\n    void setScale(float val) { projector_.scale = val; }\n\nprotected:\n\n    // Detects ROI of the destination image. It's correct for any projection.\n    virtual void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n\n    // Detects ROI of the destination image by walking over image border.\n    // Correctness for any projection isn't guaranteed.\n    void detectResultRoiByBorder(Size src_size, Point &dst_tl, Point &dst_br);\n\n    P projector_;\n};\n\n\nstruct CV_EXPORTS PlaneProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PlaneWarper : public RotationWarperBase<PlaneProjector>\n{\npublic:\n    PlaneWarper(float scale = 1.f) { projector_.scale = scale; }\n\n    void setScale(float scale) { projector_.scale = scale; }\n\n    Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R, const Mat &T);\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, const Mat &T, Mat &xmap, Mat &ymap);\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, const Mat &T, int interp_mode, int border_mode,\n               Mat &dst);\n\n    Rect warpRoi(Size src_size, const Mat &K, const Mat &R, const Mat &T);\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\n\nstruct CV_EXPORTS SphericalProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n// Projects image onto unit sphere with origin at (0, 0, 0).\n// Poles are located at (0, -1, 0) and (0, 1, 0) points.\nclass CV_EXPORTS SphericalWarper : public RotationWarperBase<SphericalProjector>\n{\npublic:\n    SphericalWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\n\nstruct CV_EXPORTS CylindricalProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n// Projects image onto x * x + z * z = 1 cylinder\nclass CV_EXPORTS CylindricalWarper : public RotationWarperBase<CylindricalProjector>\n{\npublic:\n    CylindricalWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<CylindricalProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\n\nstruct CV_EXPORTS FisheyeProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS FisheyeWarper : public RotationWarperBase<FisheyeProjector>\n{\npublic:\n    FisheyeWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS StereographicProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS StereographicWarper : public RotationWarperBase<StereographicProjector>\n{\npublic:\n    StereographicWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS CompressedRectilinearProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CompressedRectilinearWarper : public RotationWarperBase<CompressedRectilinearProjector>\n{\npublic:\n    CompressedRectilinearWarper(float scale, float A = 1, float B = 1)\n    {\n        projector_.a = A;\n        projector_.b = B;\n        projector_.scale = scale;\n    }\n};\n\n\nstruct CV_EXPORTS CompressedRectilinearPortraitProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CompressedRectilinearPortraitWarper : public RotationWarperBase<CompressedRectilinearPortraitProjector>\n{\npublic:\n   CompressedRectilinearPortraitWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n};\n\n\nstruct CV_EXPORTS PaniniProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PaniniWarper : public RotationWarperBase<PaniniProjector>\n{\npublic:\n   PaniniWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n};\n\n\nstruct CV_EXPORTS PaniniPortraitProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PaniniPortraitWarper : public RotationWarperBase<PaniniPortraitProjector>\n{\npublic:\n   PaniniPortraitWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n\n};\n\n\nstruct CV_EXPORTS MercatorProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS MercatorWarper : public RotationWarperBase<MercatorProjector>\n{\npublic:\n    MercatorWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS TransverseMercatorProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS TransverseMercatorWarper : public RotationWarperBase<TransverseMercatorProjector>\n{\npublic:\n    TransverseMercatorWarper(float scale) { projector_.scale = scale; }\n};\n\n\nclass CV_EXPORTS PlaneWarperGpu : public PlaneWarper\n{\npublic:\n    PlaneWarperGpu(float scale = 1.f) : PlaneWarper(scale) {}\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, const Mat &T, Mat &xmap, Mat &ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, T, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               Mat &dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, const Mat &T, int interp_mode, int border_mode,\n               Mat &dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, T, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, gpu::GpuMat &xmap, gpu::GpuMat &ymap);\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, const Mat &T, gpu::GpuMat &xmap, gpu::GpuMat &ymap);\n\n    Point warp(const gpu::GpuMat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               gpu::GpuMat &dst);\n\n    Point warp(const gpu::GpuMat &src, const Mat &K, const Mat &R, const Mat &T, int interp_mode, int border_mode,\n               gpu::GpuMat &dst);\n\nprivate:\n    gpu::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nclass CV_EXPORTS SphericalWarperGpu : public SphericalWarper\n{\npublic:\n    SphericalWarperGpu(float scale) : SphericalWarper(scale) {}\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               Mat &dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, gpu::GpuMat &xmap, gpu::GpuMat &ymap);\n\n    Point warp(const gpu::GpuMat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               gpu::GpuMat &dst);\n\nprivate:\n    gpu::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nclass CV_EXPORTS CylindricalWarperGpu : public CylindricalWarper\n{\npublic:\n    CylindricalWarperGpu(float scale) : CylindricalWarper(scale) {}\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               Mat &dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, gpu::GpuMat &xmap, gpu::GpuMat &ymap);\n\n    Point warp(const gpu::GpuMat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               gpu::GpuMat &dst);\n\nprivate:\n    gpu::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nstruct SphericalPortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n// Projects image onto unit sphere with origin at (0, 0, 0).\n// Poles are located NOT at (0, -1, 0) and (0, 1, 0) points, BUT at (1, 0, 0) and (-1, 0, 0) points.\nclass CV_EXPORTS SphericalPortraitWarper : public RotationWarperBase<SphericalPortraitProjector>\n{\npublic:\n    SphericalPortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\nstruct CylindricalPortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CylindricalPortraitWarper : public RotationWarperBase<CylindricalPortraitProjector>\n{\npublic:\n    CylindricalPortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<CylindricalPortraitProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\nstruct PlanePortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PlanePortraitWarper : public RotationWarperBase<PlanePortraitProjector>\n{\npublic:\n    PlanePortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<PlanePortraitProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\n} // namespace detail\n} // namespace cv\n\n#include \"warpers_inl.hpp\"\n\n#endif // __OPENCV_STITCHING_WARPERS_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/warpers_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPERS_INL_HPP__\n#define __OPENCV_STITCHING_WARPERS_INL_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"warpers.hpp\" // Make your IDE see declarations\n\nnamespace cv {\nnamespace detail {\n\ntemplate <class P>\nPoint2f RotationWarperBase<P>::warpPoint(const Point2f &pt, const Mat &K, const Mat &R)\n{\n    projector_.setCameraParams(K, R);\n    Point2f uv;\n    projector_.mapForward(pt.x, pt.y, uv.x, uv.y);\n    return uv;\n}\n\n\ntemplate <class P>\nRect RotationWarperBase<P>::buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)\n{\n    projector_.setCameraParams(K, R);\n\n    Point dst_tl, dst_br;\n    detectResultRoi(src_size, dst_tl, dst_br);\n\n    xmap.create(dst_br.y - dst_tl.y + 1, dst_br.x - dst_tl.x + 1, CV_32F);\n    ymap.create(dst_br.y - dst_tl.y + 1, dst_br.x - dst_tl.x + 1, CV_32F);\n\n    float x, y;\n    for (int v = dst_tl.y; v <= dst_br.y; ++v)\n    {\n        for (int u = dst_tl.x; u <= dst_br.x; ++u)\n        {\n            projector_.mapBackward(static_cast<float>(u), static_cast<float>(v), x, y);\n            xmap.at<float>(v - dst_tl.y, u - dst_tl.x) = x;\n            ymap.at<float>(v - dst_tl.y, u - dst_tl.x) = y;\n        }\n    }\n\n    return Rect(dst_tl, dst_br);\n}\n\n\ntemplate <class P>\nPoint RotationWarperBase<P>::warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                                  Mat &dst)\n{\n    Mat xmap, ymap;\n    Rect dst_roi = buildMaps(src.size(), K, R, xmap, ymap);\n\n    dst.create(dst_roi.height + 1, dst_roi.width + 1, src.type());\n    remap(src, dst, xmap, ymap, interp_mode, border_mode);\n\n    return dst_roi.tl();\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                                         Size dst_size, Mat &dst)\n{\n    projector_.setCameraParams(K, R);\n\n    Point src_tl, src_br;\n    detectResultRoi(dst_size, src_tl, src_br);\n    CV_Assert(src_br.x - src_tl.x + 1 == src.cols && src_br.y - src_tl.y + 1 == src.rows);\n\n    Mat xmap(dst_size, CV_32F);\n    Mat ymap(dst_size, CV_32F);\n\n    float u, v;\n    for (int y = 0; y < dst_size.height; ++y)\n    {\n        for (int x = 0; x < dst_size.width; ++x)\n        {\n            projector_.mapForward(static_cast<float>(x), static_cast<float>(y), u, v);\n            xmap.at<float>(y, x) = u - src_tl.x;\n            ymap.at<float>(y, x) = v - src_tl.y;\n        }\n    }\n\n    dst.create(dst_size, src.type());\n    remap(src, dst, xmap, ymap, interp_mode, border_mode);\n}\n\n\ntemplate <class P>\nRect RotationWarperBase<P>::warpRoi(Size src_size, const Mat &K, const Mat &R)\n{\n    projector_.setCameraParams(K, R);\n\n    Point dst_tl, dst_br;\n    detectResultRoi(src_size, dst_tl, dst_br);\n\n    return Rect(dst_tl, Point(dst_br.x + 1, dst_br.y + 1));\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n{\n    float tl_uf = std::numeric_limits<float>::max();\n    float tl_vf = std::numeric_limits<float>::max();\n    float br_uf = -std::numeric_limits<float>::max();\n    float br_vf = -std::numeric_limits<float>::max();\n\n    float u, v;\n    for (int y = 0; y < src_size.height; ++y)\n    {\n        for (int x = 0; x < src_size.width; ++x)\n        {\n            projector_.mapForward(static_cast<float>(x), static_cast<float>(y), u, v);\n            tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n            br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n        }\n    }\n\n    dst_tl.x = static_cast<int>(tl_uf);\n    dst_tl.y = static_cast<int>(tl_vf);\n    dst_br.x = static_cast<int>(br_uf);\n    dst_br.y = static_cast<int>(br_vf);\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::detectResultRoiByBorder(Size src_size, Point &dst_tl, Point &dst_br)\n{\n    float tl_uf = std::numeric_limits<float>::max();\n    float tl_vf = std::numeric_limits<float>::max();\n    float br_uf = -std::numeric_limits<float>::max();\n    float br_vf = -std::numeric_limits<float>::max();\n\n    float u, v;\n    for (float x = 0; x < src_size.width; ++x)\n    {\n        projector_.mapForward(static_cast<float>(x), 0, u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n\n        projector_.mapForward(static_cast<float>(x), static_cast<float>(src_size.height - 1), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n    }\n    for (int y = 0; y < src_size.height; ++y)\n    {\n        projector_.mapForward(0, static_cast<float>(y), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n\n        projector_.mapForward(static_cast<float>(src_size.width - 1), static_cast<float>(y), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n    }\n\n    dst_tl.x = static_cast<int>(tl_uf);\n    dst_tl.y = static_cast<int>(tl_vf);\n    dst_br.x = static_cast<int>(br_uf);\n    dst_br.y = static_cast<int>(br_vf);\n}\n\n\ninline\nvoid PlaneProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    x_ = t[0] + x_ / z_ * (1 - t[2]);\n    y_ = t[1] + y_ / z_ * (1 - t[2]);\n\n    u = scale * x_;\n    v = scale * y_;\n}\n\n\ninline\nvoid PlaneProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u = u / scale - t[0];\n    v = v / scale - t[1];\n\n    float z;\n    x = k_rinv[0] * u + k_rinv[1] * v + k_rinv[2] * (1 - t[2]);\n    y = k_rinv[3] * u + k_rinv[4] * v + k_rinv[5] * (1 - t[2]);\n    z = k_rinv[6] * u + k_rinv[7] * v + k_rinv[8] * (1 - t[2]);\n\n    x /= z;\n    y /= z;\n}\n\n\ninline\nvoid SphericalProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    u = scale * atan2f(x_, z_);\n    float w = y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_);\n    v = scale * (static_cast<float>(CV_PI) - acosf(w == w ? w : 0));\n}\n\n\ninline\nvoid SphericalProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float sinv = sinf(static_cast<float>(CV_PI) - v);\n    float x_ = sinv * sinf(u);\n    float y_ = cosf(static_cast<float>(CV_PI) - v);\n    float z_ = sinv * cosf(u);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\n\ninline\nvoid CylindricalProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    u = scale * atan2f(x_, z_);\n    v = scale * y_ / sqrtf(x_ * x_ + z_ * z_);\n}\n\n\ninline\nvoid CylindricalProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float x_ = sinf(u);\n    float y_ = v;\n    float z_ = cosf(u);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid FisheyeProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = (float)CV_PI - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * v_ * cosf(u_);\n    v = scale * v_ * sinf(u_);\n}\n\ninline\nvoid FisheyeProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float u_ = atan2f(v, u);\n    float v_ = sqrtf(u*u + v*v);\n\n    float sinv = sinf((float)CV_PI - v_);\n    float x_ = sinv * sinf(u_);\n    float y_ = cosf((float)CV_PI - v_);\n    float z_ = sinv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid StereographicProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = (float)CV_PI - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float r = sinf(v_) / (1 - cosf(v_));\n\n    u = scale * r * cos(u_);\n    v = scale * r * sin(u_);\n}\n\ninline\nvoid StereographicProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float u_ = atan2f(v, u);\n    float r = sqrtf(u*u + v*v);\n    float v_ = 2 * atanf(1.f / r);\n\n    float sinv = sinf((float)CV_PI - v_);\n    float x_ = sinv * sinf(u_);\n    float y_ = cosf((float)CV_PI - v_);\n    float z_ = sinv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CompressedRectilinearProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * a * tanf(u_ / a);\n    v = scale * b * tanf(v_) / cosf(u_);\n}\n\ninline\nvoid CompressedRectilinearProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float aatg = a * atanf(u / a);\n    float u_ = aatg;\n    float v_ = atanf(v * cosf(aatg) / b);\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CompressedRectilinearPortraitProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float y_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float x_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = - scale * a * tanf(u_ / a);\n    v = scale * b * tanf(v_) / cosf(u_);\n}\n\ninline\nvoid CompressedRectilinearPortraitProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= - scale;\n    v /= scale;\n\n    float aatg = a * atanf(u / a);\n    float u_ = aatg;\n    float v_ = atanf(v * cosf( aatg ) / b);\n\n    float cosv = cosf(v_);\n    float y_ = cosv * sinf(u_);\n    float x_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PaniniProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float tg = a * tanf(u_ / a);\n    u = scale * tg;\n\n    float sinu = sinf(u_);\n    if ( fabs(sinu) < 1E-7 )\n        v = scale * b * tanf(v_);\n    else\n        v = scale * b * tg * tanf(v_) / sinu;\n}\n\ninline\nvoid PaniniProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float lamda = a * atanf(u / a);\n    float u_ = lamda;\n\n    float v_;\n    if ( fabs(lamda) > 1E-7)\n        v_ = atanf(v * sinf(lamda) / (b * a * tanf(lamda / a)));\n    else\n        v_ = atanf(v / b);\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PaniniPortraitProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float y_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float x_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float tg = a * tanf(u_ / a);\n    u = - scale * tg;\n\n    float sinu = sinf( u_ );\n    if ( fabs(sinu) < 1E-7 )\n        v = scale * b * tanf(v_);\n    else\n        v = scale * b * tg * tanf(v_) / sinu;\n}\n\ninline\nvoid PaniniPortraitProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= - scale;\n    v /= scale;\n\n    float lamda = a * atanf(u / a);\n    float u_ = lamda;\n\n    float v_;\n    if ( fabs(lamda) > 1E-7)\n        v_ = atanf(v * sinf(lamda) / (b * a * tanf(lamda/a)));\n    else\n        v_ = atanf(v / b);\n\n    float cosv = cosf(v_);\n    float y_ = cosv * sinf(u_);\n    float x_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid MercatorProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * u_;\n    v = scale * logf( tanf( (float)(CV_PI/4) + v_/2 ) );\n}\n\ninline\nvoid MercatorProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float v_ = atanf( sinhf(v) );\n    float u_ = u;\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid TransverseMercatorProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float B = cosf(v_) * sinf(u_);\n\n    u = scale / 2 * logf( (1+B) / (1-B) );\n    v = scale * atan2f(tanf(v_), cosf(u_));\n}\n\ninline\nvoid TransverseMercatorProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float v_ = asinf( sinf(v) / coshf(u) );\n    float u_ = atan2f( sinhf(u), cos(v) );\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid SphericalPortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n    float u, v;\n\n    u = scale * atan2f(x_, z_);\n    v = scale * (static_cast<float>(CV_PI) - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_)));\n\n    u0 = -u;//v;\n    v0 = v;//u;\n}\n\n\ninline\nvoid SphericalPortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;//v0;\n    v = v0;//u0;\n\n    u /= scale;\n    v /= scale;\n\n    float sinv = sinf(static_cast<float>(CV_PI) - v);\n    float x0_ = sinv * sinf(u);\n    float y0_ = cosf(static_cast<float>(CV_PI) - v);\n    float z_ = sinv * cosf(u);\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CylindricalPortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_  = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n    float u, v;\n\n    u = scale * atan2f(x_, z_);\n    v = scale * y_ / sqrtf(x_ * x_ + z_ * z_);\n\n    u0 = -u;//v;\n    v0 = v;//u;\n}\n\n\ninline\nvoid CylindricalPortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;//v0;\n    v = v0;//u0;\n\n    u /= scale;\n    v /= scale;\n\n    float x0_ = sinf(u);\n    float y0_ = v;\n    float z_  = cosf(u);\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PlanePortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_  = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    x_ = t[0] + x_ / z_ * (1 - t[2]);\n    y_ = t[1] + y_ / z_ * (1 - t[2]);\n\n    float u,v;\n    u = scale * x_;\n    v = scale * y_;\n\n    u0 = -u;\n    v0 = v;\n}\n\n\ninline\nvoid PlanePortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;\n    v = v0;\n\n    u = u / scale - t[0];\n    v = v / scale - t[1];\n\n    float z;\n    x = k_rinv[0] * v + k_rinv[1] * u + k_rinv[2] * (1 - t[2]);\n    y = k_rinv[3] * v + k_rinv[4] * u + k_rinv[5] * (1 - t[2]);\n    z = k_rinv[6] * v + k_rinv[7] * u + k_rinv[8] * (1 - t[2]);\n\n    x /= z;\n    y /= z;\n}\n\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_WARPERS_INL_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/stitcher.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_STITCHER_HPP__\n#define __OPENCV_STITCHING_STITCHER_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/stitching/warpers.hpp\"\n#include \"opencv2/stitching/detail/matchers.hpp\"\n#include \"opencv2/stitching/detail/motion_estimators.hpp\"\n#include \"opencv2/stitching/detail/exposure_compensate.hpp\"\n#include \"opencv2/stitching/detail/seam_finders.hpp\"\n#include \"opencv2/stitching/detail/blenders.hpp\"\n#include \"opencv2/stitching/detail/camera.hpp\"\n\nnamespace cv {\n\nclass CV_EXPORTS Stitcher\n{\npublic:\n    enum { ORIG_RESOL = -1 };\n    enum Status { OK, ERR_NEED_MORE_IMGS };\n\n    // Creates stitcher with default parameters\n    static Stitcher createDefault(bool try_use_gpu = false);\n\n    double registrationResol() const { return registr_resol_; }\n    void setRegistrationResol(double resol_mpx) { registr_resol_ = resol_mpx; }\n\n    double seamEstimationResol() const { return seam_est_resol_; }\n    void setSeamEstimationResol(double resol_mpx) { seam_est_resol_ = resol_mpx; }\n\n    double compositingResol() const { return compose_resol_; }\n    void setCompositingResol(double resol_mpx) { compose_resol_ = resol_mpx; }\n\n    double panoConfidenceThresh() const { return conf_thresh_; }\n    void setPanoConfidenceThresh(double conf_thresh) { conf_thresh_ = conf_thresh; }\n\n    bool waveCorrection() const { return do_wave_correct_; }\n    void setWaveCorrection(bool flag) { do_wave_correct_ = flag; }\n\n    detail::WaveCorrectKind waveCorrectKind() const { return wave_correct_kind_; }\n    void setWaveCorrectKind(detail::WaveCorrectKind kind) { wave_correct_kind_ = kind; }\n\n    Ptr<detail::FeaturesFinder> featuresFinder() { return features_finder_; }\n    const Ptr<detail::FeaturesFinder> featuresFinder() const { return features_finder_; }\n    void setFeaturesFinder(Ptr<detail::FeaturesFinder> features_finder)\n        { features_finder_ = features_finder; }\n\n    Ptr<detail::FeaturesMatcher> featuresMatcher() { return features_matcher_; }\n    const Ptr<detail::FeaturesMatcher> featuresMatcher() const { return features_matcher_; }\n    void setFeaturesMatcher(Ptr<detail::FeaturesMatcher> features_matcher)\n        { features_matcher_ = features_matcher; }\n\n    const cv::Mat& matchingMask() const { return matching_mask_; }\n    void setMatchingMask(const cv::Mat &mask)\n    {\n        CV_Assert(mask.type() == CV_8U && mask.cols == mask.rows);\n        matching_mask_ = mask.clone();\n    }\n\n    Ptr<detail::BundleAdjusterBase> bundleAdjuster() { return bundle_adjuster_; }\n    const Ptr<detail::BundleAdjusterBase> bundleAdjuster() const { return bundle_adjuster_; }\n    void setBundleAdjuster(Ptr<detail::BundleAdjusterBase> bundle_adjuster)\n        { bundle_adjuster_ = bundle_adjuster; }\n\n    Ptr<WarperCreator> warper() { return warper_; }\n    const Ptr<WarperCreator> warper() const { return warper_; }\n    void setWarper(Ptr<WarperCreator> creator) { warper_ = creator; }\n\n    Ptr<detail::ExposureCompensator> exposureCompensator() { return exposure_comp_; }\n    const Ptr<detail::ExposureCompensator> exposureCompensator() const { return exposure_comp_; }\n    void setExposureCompensator(Ptr<detail::ExposureCompensator> exposure_comp)\n        { exposure_comp_ = exposure_comp; }\n\n    Ptr<detail::SeamFinder> seamFinder() { return seam_finder_; }\n    const Ptr<detail::SeamFinder> seamFinder() const { return seam_finder_; }\n    void setSeamFinder(Ptr<detail::SeamFinder> seam_finder) { seam_finder_ = seam_finder; }\n\n    Ptr<detail::Blender> blender() { return blender_; }\n    const Ptr<detail::Blender> blender() const { return blender_; }\n    void setBlender(Ptr<detail::Blender> b) { blender_ = b; }\n\n    Status estimateTransform(InputArray images);\n    Status estimateTransform(InputArray images, const std::vector<std::vector<Rect> > &rois);\n\n    Status composePanorama(OutputArray pano);\n    Status composePanorama(InputArray images, OutputArray pano);\n\n    Status stitch(InputArray images, OutputArray pano);\n    Status stitch(InputArray images, const std::vector<std::vector<Rect> > &rois, OutputArray pano);\n\n    std::vector<int> component() const { return indices_; }\n    std::vector<detail::CameraParams> cameras() const { return cameras_; }\n    double workScale() const { return work_scale_; }\n\nprivate:\n    Stitcher() {}\n\n    Status matchImages();\n    void estimateCameraParams();\n\n    double registr_resol_;\n    double seam_est_resol_;\n    double compose_resol_;\n    double conf_thresh_;\n    Ptr<detail::FeaturesFinder> features_finder_;\n    Ptr<detail::FeaturesMatcher> features_matcher_;\n    cv::Mat matching_mask_;\n    Ptr<detail::BundleAdjusterBase> bundle_adjuster_;\n    bool do_wave_correct_;\n    detail::WaveCorrectKind wave_correct_kind_;\n    Ptr<WarperCreator> warper_;\n    Ptr<detail::ExposureCompensator> exposure_comp_;\n    Ptr<detail::SeamFinder> seam_finder_;\n    Ptr<detail::Blender> blender_;\n\n    std::vector<cv::Mat> imgs_;\n    std::vector<std::vector<cv::Rect> > rois_;\n    std::vector<cv::Size> full_img_sizes_;\n    std::vector<detail::ImageFeatures> features_;\n    std::vector<detail::MatchesInfo> pairwise_matches_;\n    std::vector<cv::Mat> seam_est_imgs_;\n    std::vector<int> indices_;\n    std::vector<detail::CameraParams> cameras_;\n    double work_scale_;\n    double seam_scale_;\n    double seam_work_aspect_;\n    double warped_image_scale_;\n};\n\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_STITCHER_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/stitching/warpers.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n#define __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n\n#include \"opencv2/stitching/detail/warpers.hpp\"\n\nnamespace cv {\n\nclass WarperCreator\n{\npublic:\n    virtual ~WarperCreator() {}\n    virtual Ptr<detail::RotationWarper> create(float scale) const = 0;\n};\n\n\nclass PlaneWarper : public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::PlaneWarper(scale); }\n};\n\n\nclass CylindricalWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::CylindricalWarper(scale); }\n};\n\n\nclass SphericalWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::SphericalWarper(scale); }\n};\n\nclass FisheyeWarper : public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::FisheyeWarper(scale); }\n};\n\nclass StereographicWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::StereographicWarper(scale); }\n};\n\nclass CompressedRectilinearWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    CompressedRectilinearWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::CompressedRectilinearWarper(scale, a, b); }\n};\n\nclass CompressedRectilinearPortraitWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    CompressedRectilinearPortraitWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::CompressedRectilinearPortraitWarper(scale, a, b); }\n};\n\nclass PaniniWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    PaniniWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::PaniniWarper(scale, a, b); }\n};\n\nclass PaniniPortraitWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    PaniniPortraitWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::PaniniPortraitWarper(scale, a, b); }\n};\n\nclass MercatorWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::MercatorWarper(scale); }\n};\n\nclass TransverseMercatorWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::TransverseMercatorWarper(scale); }\n};\n\n\n\nclass PlaneWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::PlaneWarperGpu(scale); }\n};\n\n\nclass CylindricalWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::CylindricalWarperGpu(scale); }\n};\n\n\nclass SphericalWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::SphericalWarperGpu(scale); }\n};\n\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/video/background_segm.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_BACKGROUND_SEGM_HPP__\n#define __OPENCV_BACKGROUND_SEGM_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include <list>\nnamespace cv\n{\n\n/*!\n The Base Class for Background/Foreground Segmentation\n\n The class is only used to define the common interface for\n the whole family of background/foreground segmentation algorithms.\n*/\nclass CV_EXPORTS_W BackgroundSubtractor : public Algorithm\n{\npublic:\n    //! the virtual destructor\n    virtual ~BackgroundSubtractor();\n    //! the update operator that takes the next video frame and returns the current foreground mask as 8-bit binary image.\n    CV_WRAP_AS(apply) virtual void operator()(InputArray image, OutputArray fgmask,\n                                              double learningRate=0);\n\n    //! computes a background image\n    virtual void getBackgroundImage(OutputArray backgroundImage) const;\n};\n\n\n/*!\n Gaussian Mixture-based Backbround/Foreground Segmentation Algorithm\n\n The class implements the following algorithm:\n \"An improved adaptive background mixture model for real-time tracking with shadow detection\"\n P. KadewTraKuPong and R. Bowden,\n Proc. 2nd European Workshp on Advanced Video-Based Surveillance Systems, 2001.\"\n http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf\n\n*/\nclass CV_EXPORTS_W BackgroundSubtractorMOG : public BackgroundSubtractor\n{\npublic:\n    //! the default constructor\n    CV_WRAP BackgroundSubtractorMOG();\n    //! the full constructor that takes the length of the history, the number of gaussian mixtures, the background ratio parameter and the noise strength\n    CV_WRAP BackgroundSubtractorMOG(int history, int nmixtures, double backgroundRatio, double noiseSigma=0);\n    //! the destructor\n    virtual ~BackgroundSubtractorMOG();\n    //! the update operator\n    virtual void operator()(InputArray image, OutputArray fgmask, double learningRate=0);\n\n    //! re-initiaization method\n    virtual void initialize(Size frameSize, int frameType);\n\n    virtual AlgorithmInfo* info() const;\n\nprotected:\n    Size frameSize;\n    int frameType;\n    Mat bgmodel;\n    int nframes;\n    int history;\n    int nmixtures;\n    double varThreshold;\n    double backgroundRatio;\n    double noiseSigma;\n};\n\n\n/*!\n The class implements the following algorithm:\n \"Improved adaptive Gausian mixture model for background subtraction\"\n Z.Zivkovic\n International Conference Pattern Recognition, UK, August, 2004.\n http://www.zoranz.net/Publications/zivkovic2004ICPR.pdf\n*/\nclass CV_EXPORTS_W BackgroundSubtractorMOG2 : public BackgroundSubtractor\n{\npublic:\n    //! the default constructor\n    CV_WRAP BackgroundSubtractorMOG2();\n    //! the full constructor that takes the length of the history, the number of gaussian mixtures, the background ratio parameter and the noise strength\n    CV_WRAP BackgroundSubtractorMOG2(int history,  float varThreshold, bool bShadowDetection=true);\n    //! the destructor\n    virtual ~BackgroundSubtractorMOG2();\n    //! the update operator\n    virtual void operator()(InputArray image, OutputArray fgmask, double learningRate=-1);\n\n    //! computes a background image which are the mean of all background gaussians\n    virtual void getBackgroundImage(OutputArray backgroundImage) const;\n\n    //! re-initiaization method\n    virtual void initialize(Size frameSize, int frameType);\n\n    virtual AlgorithmInfo* info() const;\n\nprotected:\n    Size frameSize;\n    int frameType;\n    Mat bgmodel;\n    Mat bgmodelUsedModes;//keep track of number of modes per pixel\n    int nframes;\n    int history;\n    int nmixtures;\n    //! here it is the maximum allowed number of mixture components.\n    //! Actual number is determined dynamically per pixel\n    double varThreshold;\n    // threshold on the squared Mahalanobis distance to decide if it is well described\n    // by the background model or not. Related to Cthr from the paper.\n    // This does not influence the update of the background. A typical value could be 4 sigma\n    // and that is varThreshold=4*4=16; Corresponds to Tb in the paper.\n\n    /////////////////////////\n    // less important parameters - things you might change but be carefull\n    ////////////////////////\n    float backgroundRatio;\n    // corresponds to fTB=1-cf from the paper\n    // TB - threshold when the component becomes significant enough to be included into\n    // the background model. It is the TB=1-cf from the paper. So I use cf=0.1 => TB=0.\n    // For alpha=0.001 it means that the mode should exist for approximately 105 frames before\n    // it is considered foreground\n    // float noiseSigma;\n    float varThresholdGen;\n    //correspondts to Tg - threshold on the squared Mahalan. dist. to decide\n    //when a sample is close to the existing components. If it is not close\n    //to any a new component will be generated. I use 3 sigma => Tg=3*3=9.\n    //Smaller Tg leads to more generated components and higher Tg might make\n    //lead to small number of components but they can grow too large\n    float fVarInit;\n    float fVarMin;\n    float fVarMax;\n    //initial variance  for the newly generated components.\n    //It will will influence the speed of adaptation. A good guess should be made.\n    //A simple way is to estimate the typical standard deviation from the images.\n    //I used here 10 as a reasonable value\n    // min and max can be used to further control the variance\n    float fCT;//CT - complexity reduction prior\n    //this is related to the number of samples needed to accept that a component\n    //actually exists. We use CT=0.05 of all the samples. By setting CT=0 you get\n    //the standard Stauffer&Grimson algorithm (maybe not exact but very similar)\n\n    //shadow detection parameters\n    bool bShadowDetection;//default 1 - do shadow detection\n    unsigned char nShadowDetection;//do shadow detection - insert this value as the detection result - 127 default value\n    float fTau;\n    // Tau - shadow threshold. The shadow is detected if the pixel is darker\n    //version of the background. Tau is a threshold on how much darker the shadow can be.\n    //Tau= 0.5 means that if pixel is more than 2 times darker then it is not shadow\n    //See: Prati,Mikic,Trivedi,Cucchiarra,\"Detecting Moving Shadows...\",IEEE PAMI,2003.\n};\n\n/**\n * Background Subtractor module. Takes a series of images and returns a sequence of mask (8UC1)\n * images of the same size, where 255 indicates Foreground and 0 represents Background.\n * This class implements an algorithm described in \"Visual Tracking of Human Visitors under\n * Variable-Lighting Conditions for a Responsive Audio Art Installation,\" A. Godbehere,\n * A. Matsukawa, K. Goldberg, American Control Conference, Montreal, June 2012.\n */\nclass CV_EXPORTS BackgroundSubtractorGMG: public cv::BackgroundSubtractor\n{\npublic:\n    BackgroundSubtractorGMG();\n    virtual ~BackgroundSubtractorGMG();\n    virtual AlgorithmInfo* info() const;\n\n    /**\n     * Validate parameters and set up data structures for appropriate image size.\n     * Must call before running on data.\n     * @param frameSize input frame size\n     * @param min       minimum value taken on by pixels in image sequence. Usually 0\n     * @param max       maximum value taken on by pixels in image sequence. e.g. 1.0 or 255\n     */\n    void initialize(cv::Size frameSize, double min, double max);\n\n    /**\n     * Performs single-frame background subtraction and builds up a statistical background image\n     * model.\n     * @param image Input image\n     * @param fgmask Output mask image representing foreground and background pixels\n     */\n    virtual void operator()(InputArray image, OutputArray fgmask, double learningRate=-1.0);\n\n    /**\n     * Releases all inner buffers.\n     */\n    void release();\n\n    //! Total number of distinct colors to maintain in histogram.\n    int     maxFeatures;\n    //! Set between 0.0 and 1.0, determines how quickly features are \"forgotten\" from histograms.\n    double  learningRate;\n    //! Number of frames of video to use to initialize histograms.\n    int     numInitializationFrames;\n    //! Number of discrete levels in each channel to be used in histograms.\n    int     quantizationLevels;\n    //! Prior probability that any given pixel is a background pixel. A sensitivity parameter.\n    double  backgroundPrior;\n    //! Value above which pixel is determined to be FG.\n    double  decisionThreshold;\n    //! Smoothing radius, in pixels, for cleaning up FG image.\n    int     smoothingRadius;\n    //! Perform background model update\n    bool updateBackgroundModel;\n\nprivate:\n    double maxVal_;\n    double minVal_;\n\n    cv::Size frameSize_;\n    int frameNum_;\n\n    cv::Mat_<int> nfeatures_;\n    cv::Mat_<unsigned int> colors_;\n    cv::Mat_<float> weights_;\n\n    cv::Mat buf_;\n};\n\n}\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/video/tracking.hpp",
    "content": "/*! \\file tracking.hpp\n \\brief The Object and Feature Tracking\n */\n\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_TRACKING_HPP__\n#define __OPENCV_TRACKING_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/****************************************************************************************\\\n*                                  Motion Analysis                                       *\n\\****************************************************************************************/\n\n/************************************ optical flow ***************************************/\n\n#define  CV_LKFLOW_PYR_A_READY       1\n#define  CV_LKFLOW_PYR_B_READY       2\n#define  CV_LKFLOW_INITIAL_GUESSES   4\n#define  CV_LKFLOW_GET_MIN_EIGENVALS 8\n\n/* It is Lucas & Kanade method, modified to use pyramids.\n   Also it does several iterations to get optical flow for\n   every point at every pyramid level.\n   Calculates optical flow between two images for certain set of points (i.e.\n   it is a \"sparse\" optical flow, which is opposite to the previous 3 methods) */\nCVAPI(void)  cvCalcOpticalFlowPyrLK( const CvArr*  prev, const CvArr*  curr,\n                                     CvArr*  prev_pyr, CvArr*  curr_pyr,\n                                     const CvPoint2D32f* prev_features,\n                                     CvPoint2D32f* curr_features,\n                                     int       count,\n                                     CvSize    win_size,\n                                     int       level,\n                                     char*     status,\n                                     float*    track_error,\n                                     CvTermCriteria criteria,\n                                     int       flags );\n\n\n/* Modification of a previous sparse optical flow algorithm to calculate\n   affine flow */\nCVAPI(void)  cvCalcAffineFlowPyrLK( const CvArr*  prev, const CvArr*  curr,\n                                    CvArr*  prev_pyr, CvArr*  curr_pyr,\n                                    const CvPoint2D32f* prev_features,\n                                    CvPoint2D32f* curr_features,\n                                    float* matrices, int  count,\n                                    CvSize win_size, int  level,\n                                    char* status, float* track_error,\n                                    CvTermCriteria criteria, int flags );\n\n/* Estimate rigid transformation between 2 images or 2 point sets */\nCVAPI(int)  cvEstimateRigidTransform( const CvArr* A, const CvArr* B,\n                                      CvMat* M, int full_affine );\n\n/* Estimate optical flow for each pixel using the two-frame G. Farneback algorithm */\nCVAPI(void) cvCalcOpticalFlowFarneback( const CvArr* prev, const CvArr* next,\n                                        CvArr* flow, double pyr_scale, int levels,\n                                        int winsize, int iterations, int poly_n,\n                                        double poly_sigma, int flags );\n\n/********************************* motion templates *************************************/\n\n/****************************************************************************************\\\n*        All the motion template functions work only with single channel images.         *\n*        Silhouette image must have depth IPL_DEPTH_8U or IPL_DEPTH_8S                   *\n*        Motion history image must have depth IPL_DEPTH_32F,                             *\n*        Gradient mask - IPL_DEPTH_8U or IPL_DEPTH_8S,                                   *\n*        Motion orientation image - IPL_DEPTH_32F                                        *\n*        Segmentation mask - IPL_DEPTH_32F                                               *\n*        All the angles are in degrees, all the times are in milliseconds                *\n\\****************************************************************************************/\n\n/* Updates motion history image given motion silhouette */\nCVAPI(void)    cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi,\n                                      double timestamp, double duration );\n\n/* Calculates gradient of the motion history image and fills\n   a mask indicating where the gradient is valid */\nCVAPI(void)    cvCalcMotionGradient( const CvArr* mhi, CvArr* mask, CvArr* orientation,\n                                     double delta1, double delta2,\n                                     int aperture_size CV_DEFAULT(3));\n\n/* Calculates average motion direction within a selected motion region\n   (region can be selected by setting ROIs and/or by composing a valid gradient mask\n   with the region mask) */\nCVAPI(double)  cvCalcGlobalOrientation( const CvArr* orientation, const CvArr* mask,\n                                        const CvArr* mhi, double timestamp,\n                                        double duration );\n\n/* Splits a motion history image into a few parts corresponding to separate independent motions\n   (e.g. left hand, right hand) */\nCVAPI(CvSeq*)  cvSegmentMotion( const CvArr* mhi, CvArr* seg_mask,\n                                CvMemStorage* storage,\n                                double timestamp, double seg_thresh );\n\n/****************************************************************************************\\\n*                                       Tracking                                         *\n\\****************************************************************************************/\n\n/* Implements CAMSHIFT algorithm - determines object position, size and orientation\n   from the object histogram back project (extension of meanshift) */\nCVAPI(int)  cvCamShift( const CvArr* prob_image, CvRect  window,\n                        CvTermCriteria criteria, CvConnectedComp* comp,\n                        CvBox2D* box CV_DEFAULT(NULL) );\n\n/* Implements MeanShift algorithm - determines object position\n   from the object histogram back project */\nCVAPI(int)  cvMeanShift( const CvArr* prob_image, CvRect  window,\n                         CvTermCriteria criteria, CvConnectedComp* comp );\n\n/*\nstandard Kalman filter (in G. Welch' and G. Bishop's notation):\n\n  x(k)=A*x(k-1)+B*u(k)+w(k)  p(w)~N(0,Q)\n  z(k)=H*x(k)+v(k),   p(v)~N(0,R)\n*/\ntypedef struct CvKalman\n{\n    int MP;                     /* number of measurement vector dimensions */\n    int DP;                     /* number of state vector dimensions */\n    int CP;                     /* number of control vector dimensions */\n\n    /* backward compatibility fields */\n#if 1\n    float* PosterState;         /* =state_pre->data.fl */\n    float* PriorState;          /* =state_post->data.fl */\n    float* DynamMatr;           /* =transition_matrix->data.fl */\n    float* MeasurementMatr;     /* =measurement_matrix->data.fl */\n    float* MNCovariance;        /* =measurement_noise_cov->data.fl */\n    float* PNCovariance;        /* =process_noise_cov->data.fl */\n    float* KalmGainMatr;        /* =gain->data.fl */\n    float* PriorErrorCovariance;/* =error_cov_pre->data.fl */\n    float* PosterErrorCovariance;/* =error_cov_post->data.fl */\n    float* Temp1;               /* temp1->data.fl */\n    float* Temp2;               /* temp2->data.fl */\n#endif\n\n    CvMat* state_pre;           /* predicted state (x'(k)):\n                                    x(k)=A*x(k-1)+B*u(k) */\n    CvMat* state_post;          /* corrected state (x(k)):\n                                    x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) */\n    CvMat* transition_matrix;   /* state transition matrix (A) */\n    CvMat* control_matrix;      /* control matrix (B)\n                                   (it is not used if there is no control)*/\n    CvMat* measurement_matrix;  /* measurement matrix (H) */\n    CvMat* process_noise_cov;   /* process noise covariance matrix (Q) */\n    CvMat* measurement_noise_cov; /* measurement noise covariance matrix (R) */\n    CvMat* error_cov_pre;       /* priori error estimate covariance matrix (P'(k)):\n                                    P'(k)=A*P(k-1)*At + Q)*/\n    CvMat* gain;                /* Kalman gain matrix (K(k)):\n                                    K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)*/\n    CvMat* error_cov_post;      /* posteriori error estimate covariance matrix (P(k)):\n                                    P(k)=(I-K(k)*H)*P'(k) */\n    CvMat* temp1;               /* temporary matrices */\n    CvMat* temp2;\n    CvMat* temp3;\n    CvMat* temp4;\n    CvMat* temp5;\n} CvKalman;\n\n/* Creates Kalman filter and sets A, B, Q, R and state to some initial values */\nCVAPI(CvKalman*) cvCreateKalman( int dynam_params, int measure_params,\n                                 int control_params CV_DEFAULT(0));\n\n/* Releases Kalman filter state */\nCVAPI(void)  cvReleaseKalman( CvKalman** kalman);\n\n/* Updates Kalman filter by time (predicts future state of the system) */\nCVAPI(const CvMat*)  cvKalmanPredict( CvKalman* kalman,\n                                      const CvMat* control CV_DEFAULT(NULL));\n\n/* Updates Kalman filter by measurement\n   (corrects state of the system and internal matrices) */\nCVAPI(const CvMat*)  cvKalmanCorrect( CvKalman* kalman, const CvMat* measurement );\n\n#define cvKalmanUpdateByTime  cvKalmanPredict\n#define cvKalmanUpdateByMeasurement cvKalmanCorrect\n\n#ifdef __cplusplus\n}\n\nnamespace cv\n{\n\n//! updates motion history image using the current silhouette\nCV_EXPORTS_W void updateMotionHistory( InputArray silhouette, InputOutputArray mhi,\n                                       double timestamp, double duration );\n\n//! computes the motion gradient orientation image from the motion history image\nCV_EXPORTS_W void calcMotionGradient( InputArray mhi, OutputArray mask,\n                                      OutputArray orientation,\n                                      double delta1, double delta2,\n                                      int apertureSize=3 );\n\n//! computes the global orientation of the selected motion history image part\nCV_EXPORTS_W double calcGlobalOrientation( InputArray orientation, InputArray mask,\n                                           InputArray mhi, double timestamp,\n                                           double duration );\n\nCV_EXPORTS_W void segmentMotion(InputArray mhi, OutputArray segmask,\n                                CV_OUT vector<Rect>& boundingRects,\n                                double timestamp, double segThresh);\n\n//! updates the object tracking window using CAMSHIFT algorithm\nCV_EXPORTS_W RotatedRect CamShift( InputArray probImage, CV_OUT CV_IN_OUT Rect& window,\n                                   TermCriteria criteria );\n\n//! updates the object tracking window using meanshift algorithm\nCV_EXPORTS_W int meanShift( InputArray probImage, CV_OUT CV_IN_OUT Rect& window,\n                            TermCriteria criteria );\n\n/*!\n Kalman filter.\n\n The class implements standard Kalman filter \\url{http://en.wikipedia.org/wiki/Kalman_filter}.\n However, you can modify KalmanFilter::transitionMatrix, KalmanFilter::controlMatrix and\n KalmanFilter::measurementMatrix to get the extended Kalman filter functionality.\n*/\nclass CV_EXPORTS_W KalmanFilter\n{\npublic:\n    //! the default constructor\n    CV_WRAP KalmanFilter();\n    //! the full constructor taking the dimensionality of the state, of the measurement and of the control vector\n    CV_WRAP KalmanFilter(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);\n    //! re-initializes Kalman filter. The previous content is destroyed.\n    void init(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);\n\n    //! computes predicted state\n    CV_WRAP const Mat& predict(const Mat& control=Mat());\n    //! updates the predicted state from the measurement\n    CV_WRAP const Mat& correct(const Mat& measurement);\n\n    Mat statePre;           //!< predicted state (x'(k)): x(k)=A*x(k-1)+B*u(k)\n    Mat statePost;          //!< corrected state (x(k)): x(k)=x'(k)+K(k)*(z(k)-H*x'(k))\n    Mat transitionMatrix;   //!< state transition matrix (A)\n    Mat controlMatrix;      //!< control matrix (B) (not used if there is no control)\n    Mat measurementMatrix;  //!< measurement matrix (H)\n    Mat processNoiseCov;    //!< process noise covariance matrix (Q)\n    Mat measurementNoiseCov;//!< measurement noise covariance matrix (R)\n    Mat errorCovPre;        //!< priori error estimate covariance matrix (P'(k)): P'(k)=A*P(k-1)*At + Q)*/\n    Mat gain;               //!< Kalman gain matrix (K(k)): K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)\n    Mat errorCovPost;       //!< posteriori error estimate covariance matrix (P(k)): P(k)=(I-K(k)*H)*P'(k)\n\n    // temporary matrices\n    Mat temp1;\n    Mat temp2;\n    Mat temp3;\n    Mat temp4;\n    Mat temp5;\n};\n\nenum\n{\n    OPTFLOW_USE_INITIAL_FLOW = CV_LKFLOW_INITIAL_GUESSES,\n    OPTFLOW_LK_GET_MIN_EIGENVALS = CV_LKFLOW_GET_MIN_EIGENVALS,\n    OPTFLOW_FARNEBACK_GAUSSIAN = 256\n};\n\n//! constructs a pyramid which can be used as input for calcOpticalFlowPyrLK\nCV_EXPORTS_W int buildOpticalFlowPyramid(InputArray img, OutputArrayOfArrays pyramid,\n                                         Size winSize, int maxLevel, bool withDerivatives = true,\n                                         int pyrBorder = BORDER_REFLECT_101, int derivBorder = BORDER_CONSTANT,\n                                         bool tryReuseInputImage = true);\n\n//! computes sparse optical flow using multi-scale Lucas-Kanade algorithm\nCV_EXPORTS_W void calcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg,\n                           InputArray prevPts, CV_OUT InputOutputArray nextPts,\n                           OutputArray status, OutputArray err,\n                           Size winSize=Size(21,21), int maxLevel=3,\n                           TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01),\n                           int flags=0, double minEigThreshold=1e-4);\n\n//! computes dense optical flow using Farneback algorithm\nCV_EXPORTS_W void calcOpticalFlowFarneback( InputArray prev, InputArray next,\n                           CV_OUT InputOutputArray flow, double pyr_scale, int levels, int winsize,\n                           int iterations, int poly_n, double poly_sigma, int flags );\n\n//! estimates the best-fit Euqcidean, similarity, affine or perspective transformation\n// that maps one 2D point set to another or one image to another.\nCV_EXPORTS_W Mat estimateRigidTransform( InputArray src, InputArray dst,\n                                         bool fullAffine);\n\n//! computes dense optical flow using Simple Flow algorithm\nCV_EXPORTS_W void calcOpticalFlowSF(Mat& from,\n                                    Mat& to,\n                                    Mat& flow,\n                                    int layers,\n                                    int averaging_block_size,\n                                    int max_flow);\n\nCV_EXPORTS_W void calcOpticalFlowSF(Mat& from,\n                                    Mat& to,\n                                    Mat& flow,\n                                    int layers,\n                                    int averaging_block_size,\n                                    int max_flow,\n                                    double sigma_dist,\n                                    double sigma_color,\n                                    int postprocess_window,\n                                    double sigma_dist_fix,\n                                    double sigma_color_fix,\n                                    double occ_thr,\n                                    int upscale_averaging_radius,\n                                    double upscale_sigma_dist,\n                                    double upscale_sigma_color,\n                                    double speed_up_thr);\n\nclass CV_EXPORTS DenseOpticalFlow : public Algorithm\n{\npublic:\n    virtual void calc(InputArray I0, InputArray I1, InputOutputArray flow) = 0;\n    virtual void collectGarbage() = 0;\n};\n\n// Implementation of the Zach, Pock and Bischof Dual TV-L1 Optical Flow method\n//\n// see reference:\n//   [1] C. Zach, T. Pock and H. Bischof, \"A Duality Based Approach for Realtime TV-L1 Optical Flow\".\n//   [2] Javier Sanchez, Enric Meinhardt-Llopis and Gabriele Facciolo. \"TV-L1 Optical Flow Estimation\".\nCV_EXPORTS Ptr<DenseOpticalFlow> createOptFlow_DualTVL1();\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/video/video.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEO_HPP__\n#define __OPENCV_VIDEO_HPP__\n\n#include \"opencv2/video/tracking.hpp\"\n#include \"opencv2/video/background_segm.hpp\"\n\n#ifdef __cplusplus\nnamespace cv\n{\n\nCV_EXPORTS bool initModule_video(void);\n\n}\n#endif\n\n#endif //__OPENCV_VIDEO_HPP__\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/deblurring.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_DEBLURRING_HPP__\n#define __OPENCV_VIDEOSTAB_DEBLURRING_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nCV_EXPORTS float calcBlurriness(const Mat &frame);\n\nclass CV_EXPORTS DeblurerBase\n{\npublic:\n    DeblurerBase() : radius_(0), frames_(0), motions_(0) {}\n\n    virtual ~DeblurerBase() {}\n\n    virtual void setRadius(int val) { radius_ = val; }\n    virtual int radius() const { return radius_; }\n\n    virtual void setFrames(const std::vector<Mat> &val) { frames_ = &val; }\n    virtual const std::vector<Mat>& frames() const { return *frames_; }\n\n    virtual void setMotions(const std::vector<Mat> &val) { motions_ = &val; }\n    virtual const std::vector<Mat>& motions() const { return *motions_; }\n\n    virtual void setBlurrinessRates(const std::vector<float> &val) { blurrinessRates_ = &val; }\n    virtual const std::vector<float>& blurrinessRates() const { return *blurrinessRates_; }\n\n    virtual void update() {}\n\n    virtual void deblur(int idx, Mat &frame) = 0;\n\nprotected:\n    int radius_;\n    const std::vector<Mat> *frames_;\n    const std::vector<Mat> *motions_;\n    const std::vector<float> *blurrinessRates_;\n};\n\nclass CV_EXPORTS NullDeblurer : public DeblurerBase\n{\npublic:\n    virtual void deblur(int /*idx*/, Mat &/*frame*/) {}\n};\n\nclass CV_EXPORTS WeightingDeblurer : public DeblurerBase\n{\npublic:\n    WeightingDeblurer();\n\n    void setSensitivity(float val) { sensitivity_ = val; }\n    float sensitivity() const { return sensitivity_; }\n\n    virtual void deblur(int idx, Mat &frame);\n\nprivate:\n    float sensitivity_;\n    Mat_<float> bSum_, gSum_, rSum_, wSum_;\n};\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/fast_marching.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FAST_MARCHING_HPP__\n#define __OPENCV_VIDEOSTAB_FAST_MARCHING_HPP__\n\n#include <cmath>\n#include <queue>\n#include <algorithm>\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n// See http://iwi.eldoc.ub.rug.nl/FILES/root/2004/JGraphToolsTelea/2004JGraphToolsTelea.pdf\nclass CV_EXPORTS FastMarchingMethod\n{\npublic:\n    FastMarchingMethod() : inf_(1e6f) {}\n\n    template <typename Inpaint>\n    Inpaint run(const Mat &mask, Inpaint inpaint);\n\n    Mat distanceMap() const { return dist_; }\n\nprivate:\n    enum { INSIDE = 0, BAND = 1, KNOWN = 255 };\n\n    struct DXY\n    {\n        float dist;\n        int x, y;\n\n        DXY() : dist(0), x(0), y(0) {}\n        DXY(float _dist, int _x, int _y) : dist(_dist), x(_x), y(_y) {}\n        bool operator <(const DXY &dxy) const { return dist < dxy.dist; }\n    };\n\n    float solve(int x1, int y1, int x2, int y2) const;\n    int& indexOf(const DXY &dxy) { return index_(dxy.y, dxy.x); }\n\n    void heapUp(int idx);\n    void heapDown(int idx);\n    void heapAdd(const DXY &dxy);\n    void heapRemoveMin();\n\n    float inf_;\n\n    cv::Mat_<uchar> flag_; // flag map\n    cv::Mat_<float> dist_; // distance map\n\n    cv::Mat_<int> index_; // index of point in the narrow band\n    std::vector<DXY> narrowBand_; // narrow band heap\n    int size_; // narrow band size\n};\n\n} // namespace videostab\n} // namespace cv\n\n#include \"fast_marching_inl.hpp\"\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/fast_marching_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FAST_MARCHING_INL_HPP__\n#define __OPENCV_VIDEOSTAB_FAST_MARCHING_INL_HPP__\n\n#include \"opencv2/videostab/fast_marching.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\ntemplate <typename Inpaint>\nInpaint FastMarchingMethod::run(const cv::Mat &mask, Inpaint inpaint)\n{\n    using namespace std;\n    using namespace cv;\n\n    CV_Assert(mask.type() == CV_8U);\n\n    static const int lut[4][2] = {{-1,0}, {0,-1}, {1,0}, {0,1}};\n\n    mask.copyTo(flag_);\n    flag_.create(mask.size());\n    dist_.create(mask.size());\n    index_.create(mask.size());\n    narrowBand_.clear();\n    size_ = 0;\n\n    // init\n    for (int y = 0; y < flag_.rows; ++y)\n    {\n        for (int x = 0; x < flag_.cols; ++x)\n        {\n            if (flag_(y,x) == KNOWN)\n                dist_(y,x) = 0.f;\n            else\n            {\n                int n = 0;\n                int nunknown = 0;\n\n                for (int i = 0; i < 4; ++i)\n                {\n                    int xn = x + lut[i][0];\n                    int yn = y + lut[i][1];\n\n                    if (xn >= 0 && xn < flag_.cols && yn >= 0 && yn < flag_.rows)\n                    {\n                        n++;\n                        if (flag_(yn,xn) != KNOWN)\n                            nunknown++;\n                    }\n                }\n\n                if (n>0 && nunknown == n)\n                {\n                    dist_(y,x) = inf_;\n                    flag_(y,x) = INSIDE;\n                }\n                else\n                {\n                    dist_(y,x) = 0.f;\n                    flag_(y,x) = BAND;\n                    inpaint(x, y);\n\n                    narrowBand_.push_back(DXY(0.f,x,y));\n                    index_(y,x) = size_++;\n                }\n            }\n        }\n    }\n\n    // make heap\n    for (int i = size_/2-1; i >= 0; --i)\n        heapDown(i);\n\n    // main cycle\n    while (size_ > 0)\n    {\n        int x = narrowBand_[0].x;\n        int y = narrowBand_[0].y;\n        heapRemoveMin();\n\n        flag_(y,x) = KNOWN;\n        for (int n = 0; n < 4; ++n)\n        {\n            int xn = x + lut[n][0];\n            int yn = y + lut[n][1];\n\n            if (xn >= 0 && xn < flag_.cols && yn >= 0 && yn < flag_.rows && flag_(yn,xn) != KNOWN)\n            {\n                dist_(yn,xn) = min(min(solve(xn-1, yn, xn, yn-1), solve(xn+1, yn, xn, yn-1)),\n                                   min(solve(xn-1, yn, xn, yn+1), solve(xn+1, yn, xn, yn+1)));\n\n                if (flag_(yn,xn) == INSIDE)\n                {\n                    flag_(yn,xn) = BAND;\n                    inpaint(xn, yn);\n                    heapAdd(DXY(dist_(yn,xn),xn,yn));\n                }\n                else\n                {\n                    int i = index_(yn,xn);\n                    if (dist_(yn,xn) < narrowBand_[i].dist)\n                    {\n                        narrowBand_[i].dist = dist_(yn,xn);\n                        heapUp(i);\n                    }\n                    // works better if it's commented out\n                    /*else if (dist(yn,xn) > narrowBand[i].dist)\n                    {\n                        narrowBand[i].dist = dist(yn,xn);\n                        heapDown(i);\n                    }*/\n                }\n            }\n        }\n    }\n\n    return inpaint;\n}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/frame_source.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FRAME_SOURCE_HPP__\n#define __OPENCV_VIDEOSTAB_FRAME_SOURCE_HPP__\n\n#include <vector>\n#include <string>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/highgui/highgui.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS IFrameSource\n{\npublic:\n    virtual ~IFrameSource() {}\n    virtual void reset() = 0;\n    virtual Mat nextFrame() = 0;\n};\n\nclass CV_EXPORTS NullFrameSource : public IFrameSource\n{\npublic:\n    virtual void reset() {}\n    virtual Mat nextFrame() { return Mat(); }\n};\n\nclass CV_EXPORTS VideoFileSource : public IFrameSource\n{\npublic:\n    VideoFileSource(const std::string &path, bool volatileFrame = false);\n\n    virtual void reset();\n    virtual Mat nextFrame();\n\n    int frameCount() { return static_cast<int>(reader_.get(CV_CAP_PROP_FRAME_COUNT)); }\n    double fps() { return reader_.get(CV_CAP_PROP_FPS); }\n\nprivate:\n    std::string path_;\n    bool volatileFrame_;\n    VideoCapture reader_;\n};\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/global_motion.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_GLOBAL_MOTION_HPP__\n#define __OPENCV_VIDEOSTAB_GLOBAL_MOTION_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/videostab/optical_flow.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nenum MotionModel\n{\n    TRANSLATION = 0,\n    TRANSLATION_AND_SCALE = 1,\n    LINEAR_SIMILARITY = 2,\n    AFFINE = 3\n};\n\nCV_EXPORTS Mat estimateGlobalMotionLeastSquares(\n        const std::vector<Point2f> &points0, const std::vector<Point2f> &points1,\n        int model = AFFINE, float *rmse = 0);\n\nstruct CV_EXPORTS RansacParams\n{\n    int size; // subset size\n    float thresh; // max error to classify as inlier\n    float eps; // max outliers ratio\n    float prob; // probability of success\n\n    RansacParams(int _size, float _thresh, float _eps, float _prob)\n        : size(_size), thresh(_thresh), eps(_eps), prob(_prob) {}\n\n    static RansacParams translationMotionStd() { return RansacParams(2, 0.5f, 0.5f, 0.99f); }\n    static RansacParams translationAndScale2dMotionStd() { return RansacParams(3, 0.5f, 0.5f, 0.99f); }\n    static RansacParams linearSimilarityMotionStd() { return RansacParams(4, 0.5f, 0.5f, 0.99f); }\n    static RansacParams affine2dMotionStd() { return RansacParams(6, 0.5f, 0.5f, 0.99f); }\n};\n\nCV_EXPORTS Mat estimateGlobalMotionRobust(\n        const std::vector<Point2f> &points0, const std::vector<Point2f> &points1,\n        int model = AFFINE, const RansacParams &params = RansacParams::affine2dMotionStd(),\n        float *rmse = 0, int *ninliers = 0);\n\nclass CV_EXPORTS IGlobalMotionEstimator\n{\npublic:\n    virtual ~IGlobalMotionEstimator() {}\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1) = 0;\n};\n\nclass CV_EXPORTS PyrLkRobustMotionEstimator : public IGlobalMotionEstimator\n{\npublic:\n    PyrLkRobustMotionEstimator();\n\n    void setDetector(Ptr<FeatureDetector> val) { detector_ = val; }\n    Ptr<FeatureDetector> detector() const { return detector_; }\n\n    void setOptFlowEstimator(Ptr<ISparseOptFlowEstimator> val) { optFlowEstimator_ = val; }\n    Ptr<ISparseOptFlowEstimator> optFlowEstimator() const { return optFlowEstimator_; }\n\n    void setMotionModel(MotionModel val) { motionModel_ = val; }\n    MotionModel motionModel() const { return motionModel_; }\n\n    void setRansacParams(const RansacParams &val) { ransacParams_ = val; }\n    RansacParams ransacParams() const { return ransacParams_; }\n\n    void setMaxRmse(float val) { maxRmse_ = val; }\n    float maxRmse() const { return maxRmse_; }\n\n    void setMinInlierRatio(float val) { minInlierRatio_ = val; }\n    float minInlierRatio() const { return minInlierRatio_; }\n\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1);\n\nprivate:\n    Ptr<FeatureDetector> detector_;\n    Ptr<ISparseOptFlowEstimator> optFlowEstimator_;\n    MotionModel motionModel_;\n    RansacParams ransacParams_;\n    std::vector<uchar> status_;\n    std::vector<KeyPoint> keypointsPrev_;\n    std::vector<Point2f> pointsPrev_, points_;\n    std::vector<Point2f> pointsPrevGood_, pointsGood_;\n    float maxRmse_;\n    float minInlierRatio_;\n};\n\nCV_EXPORTS Mat getMotion(int from, int to, const Mat *motions, int size);\n\nCV_EXPORTS Mat getMotion(int from, int to, const std::vector<Mat> &motions);\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/inpainting.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_INPAINTINT_HPP__\n#define __OPENCV_VIDEOSTAB_INPAINTINT_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/videostab/optical_flow.hpp\"\n#include \"opencv2/videostab/fast_marching.hpp\"\n#include \"opencv2/photo/photo.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS InpainterBase\n{\npublic:\n    InpainterBase()\n        : radius_(0), frames_(0), motions_(0),\n          stabilizedFrames_(0), stabilizationMotions_(0) {}\n\n    virtual ~InpainterBase() {}\n\n    virtual void setRadius(int val) { radius_ = val; }\n    virtual int radius() const { return radius_; }\n\n    virtual void setFrames(const std::vector<Mat> &val) { frames_ = &val; }\n    virtual const std::vector<Mat>& frames() const { return *frames_; }\n\n    virtual void setMotions(const std::vector<Mat> &val) { motions_ = &val; }\n    virtual const std::vector<Mat>& motions() const { return *motions_; }\n\n    virtual void setStabilizedFrames(const std::vector<Mat> &val) { stabilizedFrames_ = &val; }\n    virtual const std::vector<Mat>& stabilizedFrames() const { return *stabilizedFrames_; }\n\n    virtual void setStabilizationMotions(const std::vector<Mat> &val) { stabilizationMotions_ = &val; }\n    virtual const std::vector<Mat>& stabilizationMotions() const { return *stabilizationMotions_; }\n\n    virtual void update() {}\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask) = 0;\n\nprotected:\n    int radius_;\n    const std::vector<Mat> *frames_;\n    const std::vector<Mat> *motions_;\n    const std::vector<Mat> *stabilizedFrames_;\n    const std::vector<Mat> *stabilizationMotions_;\n};\n\nclass CV_EXPORTS NullInpainter : public InpainterBase\n{\npublic:\n    virtual void inpaint(int /*idx*/, Mat &/*frame*/, Mat &/*mask*/) {}\n};\n\nclass CV_EXPORTS InpaintingPipeline : public InpainterBase\n{\npublic:\n    void pushBack(Ptr<InpainterBase> inpainter) { inpainters_.push_back(inpainter); }\n    bool empty() const { return inpainters_.empty(); }\n\n    virtual void setRadius(int val);\n    virtual void setFrames(const std::vector<Mat> &val);\n    virtual void setMotions(const std::vector<Mat> &val);\n    virtual void setStabilizedFrames(const std::vector<Mat> &val);\n    virtual void setStabilizationMotions(const std::vector<Mat> &val);\n\n    virtual void update();\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    std::vector<Ptr<InpainterBase> > inpainters_;\n};\n\nclass CV_EXPORTS ConsistentMosaicInpainter : public InpainterBase\n{\npublic:\n    ConsistentMosaicInpainter();\n\n    void setStdevThresh(float val) { stdevThresh_ = val; }\n    float stdevThresh() const { return stdevThresh_; }\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    float stdevThresh_;\n};\n\nclass CV_EXPORTS MotionInpainter : public InpainterBase\n{\npublic:\n    MotionInpainter();\n\n    void setOptFlowEstimator(Ptr<IDenseOptFlowEstimator> val) { optFlowEstimator_ = val; }\n    Ptr<IDenseOptFlowEstimator> optFlowEstimator() const { return optFlowEstimator_; }\n\n    void setFlowErrorThreshold(float val) { flowErrorThreshold_ = val; }\n    float flowErrorThreshold() const { return flowErrorThreshold_; }\n\n    void setDistThreshold(float val) { distThresh_ = val; }\n    float distThresh() const { return distThresh_; }\n\n    void setBorderMode(int val) { borderMode_ = val; }\n    int borderMode() const { return borderMode_; }\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    FastMarchingMethod fmm_;\n    Ptr<IDenseOptFlowEstimator> optFlowEstimator_;\n    float flowErrorThreshold_;\n    float distThresh_;\n    int borderMode_;\n\n    Mat frame1_, transformedFrame1_;\n    Mat_<uchar> grayFrame_, transformedGrayFrame1_;\n    Mat_<uchar> mask1_, transformedMask1_;\n    Mat_<float> flowX_, flowY_, flowErrors_;\n    Mat_<uchar> flowMask_;\n};\n\nclass CV_EXPORTS ColorAverageInpainter : public InpainterBase\n{\npublic:\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    FastMarchingMethod fmm_;\n};\n\nclass CV_EXPORTS ColorInpainter : public InpainterBase\n{\npublic:\n    ColorInpainter(int method = INPAINT_TELEA, double _radius = 2.)\n        : method_(method), radius_(_radius) {}\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    int method_;\n    double radius_;\n    Mat invMask_;\n};\n\nCV_EXPORTS void calcFlowMask(\n        const Mat &flowX, const Mat &flowY, const Mat &errors, float maxError,\n        const Mat &mask0, const Mat &mask1, Mat &flowMask);\n\nCV_EXPORTS void completeFrameAccordingToFlow(\n        const Mat &flowMask, const Mat &flowX, const Mat &flowY, const Mat &frame1, const Mat &mask1,\n        float distThresh, Mat& frame0, Mat &mask0);\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/log.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_LOG_HPP__\n#define __OPENCV_VIDEOSTAB_LOG_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS ILog\n{\npublic:\n    virtual ~ILog() {}\n    virtual void print(const char *format, ...) = 0;\n};\n\nclass CV_EXPORTS NullLog : public ILog\n{\npublic:\n    virtual void print(const char * /*format*/, ...) {}\n};\n\nclass CV_EXPORTS LogToStdout : public ILog\n{\npublic:\n    virtual void print(const char *format, ...);\n};\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/motion_stabilizing.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_MOTION_STABILIZING_HPP__\n#define __OPENCV_VIDEOSTAB_MOTION_STABILIZING_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS IMotionStabilizer\n{\npublic:\n    virtual void stabilize(const Mat *motions, int size, Mat *stabilizationMotions) const = 0;\n\n#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY\n    virtual ~IMotionStabilizer() {}\n#endif\n};\n\nclass CV_EXPORTS MotionFilterBase : public IMotionStabilizer\n{\npublic:\n    MotionFilterBase() : radius_(0) {}\n    virtual ~MotionFilterBase() {}\n\n    virtual void setRadius(int val) { radius_ = val; }\n    virtual int radius() const { return radius_; }\n\n    virtual void update() {}\n\n    virtual Mat stabilize(int index, const Mat *motions, int size) const = 0;\n    virtual void stabilize(const Mat *motions, int size, Mat *stabilizationMotions) const;\n\nprotected:\n    int radius_;\n};\n\nclass CV_EXPORTS GaussianMotionFilter : public MotionFilterBase\n{\npublic:\n    GaussianMotionFilter() : stdev_(-1.f) {}\n\n    void setStdev(float val) { stdev_ = val; }\n    float stdev() const { return stdev_; }\n\n    virtual void update();\n\n    virtual Mat stabilize(int index, const Mat *motions, int size) const;\n\nprivate:\n    float stdev_;\n    std::vector<float> weight_;\n};\n\nCV_EXPORTS Mat ensureInclusionConstraint(const Mat &M, Size size, float trimRatio);\n\nCV_EXPORTS float estimateOptimalTrimRatio(const Mat &M, Size size);\n\n} // namespace videostab\n} // namespace\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/optical_flow.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__\n#define __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/opencv_modules.hpp\"\n\n#if defined(HAVE_OPENCV_GPU) && !defined(ANDROID)\n#  include \"opencv2/gpu/gpu.hpp\"\n#endif\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS ISparseOptFlowEstimator\n{\npublic:\n    virtual ~ISparseOptFlowEstimator() {}\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,\n            OutputArray status, OutputArray errors) = 0;\n};\n\nclass CV_EXPORTS IDenseOptFlowEstimator\n{\npublic:\n    virtual ~IDenseOptFlowEstimator() {}\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,\n            OutputArray errors) = 0;\n};\n\nclass CV_EXPORTS PyrLkOptFlowEstimatorBase\n{\npublic:\n    PyrLkOptFlowEstimatorBase() { setWinSize(Size(21, 21)); setMaxLevel(3); }\n\n    void setWinSize(Size val) { winSize_ = val; }\n    Size winSize() const { return winSize_; }\n\n    void setMaxLevel(int val) { maxLevel_ = val; }\n    int maxLevel() const { return maxLevel_; }\n\nprotected:\n    Size winSize_;\n    int maxLevel_;\n};\n\nclass CV_EXPORTS SparsePyrLkOptFlowEstimator\n        : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator\n{\npublic:\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,\n            OutputArray status, OutputArray errors);\n};\n\n#if defined(HAVE_OPENCV_GPU) && !defined(ANDROID)\nclass CV_EXPORTS DensePyrLkOptFlowEstimatorGpu\n        : public PyrLkOptFlowEstimatorBase, public IDenseOptFlowEstimator\n{\npublic:\n    DensePyrLkOptFlowEstimatorGpu();\n\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,\n            OutputArray errors);\nprivate:\n    gpu::PyrLKOpticalFlow optFlowEstimator_;\n    gpu::GpuMat frame0_, frame1_, flowX_, flowY_, errors_;\n};\n#endif\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/stabilizer.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_STABILIZER_HPP__\n#define __OPENCV_VIDEOSTAB_STABILIZER_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/videostab/global_motion.hpp\"\n#include \"opencv2/videostab/motion_stabilizing.hpp\"\n#include \"opencv2/videostab/frame_source.hpp\"\n#include \"opencv2/videostab/log.hpp\"\n#include \"opencv2/videostab/inpainting.hpp\"\n#include \"opencv2/videostab/deblurring.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS StabilizerBase\n{\npublic:\n    virtual ~StabilizerBase() {}\n\n    void setLog(Ptr<ILog> _log) { log_ = _log; }\n    Ptr<ILog> log() const { return log_; }\n\n    void setRadius(int val) { radius_ = val; }\n    int radius() const { return radius_; }\n\n    void setFrameSource(Ptr<IFrameSource> val) { frameSource_ = val; }\n    Ptr<IFrameSource> frameSource() const { return frameSource_; }\n\n    void setMotionEstimator(Ptr<IGlobalMotionEstimator> val) { motionEstimator_ = val; }\n    Ptr<IGlobalMotionEstimator> motionEstimator() const { return motionEstimator_; }\n\n    void setDeblurer(Ptr<DeblurerBase> val) { deblurer_ = val; }\n    Ptr<DeblurerBase> deblurrer() const { return deblurer_; }\n\n    void setTrimRatio(float val) { trimRatio_ = val; }\n    float trimRatio() const { return trimRatio_; }\n\n    void setCorrectionForInclusion(bool val) { doCorrectionForInclusion_ = val; }\n    bool doCorrectionForInclusion() const { return doCorrectionForInclusion_; }\n\n    void setBorderMode(int val) { borderMode_ = val; }\n    int borderMode() const { return borderMode_; }\n\n    void setInpainter(Ptr<InpainterBase> val) { inpainter_ = val; }\n    Ptr<InpainterBase> inpainter() const { return inpainter_; }\n\nprotected:\n    StabilizerBase();\n\n    void setUp(int cacheSize, const Mat &frame);\n    Mat nextStabilizedFrame();\n    bool doOneIteration();\n    void stabilizeFrame(const Mat &stabilizationMotion);\n\n    virtual void setUp(Mat &firstFrame) = 0;\n    virtual void stabilizeFrame() = 0;\n    virtual void estimateMotion() = 0;\n\n    Ptr<ILog> log_;\n    Ptr<IFrameSource> frameSource_;\n    Ptr<IGlobalMotionEstimator> motionEstimator_;\n    Ptr<DeblurerBase> deblurer_;\n    Ptr<InpainterBase> inpainter_;\n    int radius_;\n    float trimRatio_;\n    bool doCorrectionForInclusion_;\n    int borderMode_;\n\n    Size frameSize_;\n    Mat frameMask_;\n    int curPos_;\n    int curStabilizedPos_;\n    bool doDeblurring_;\n    Mat preProcessedFrame_;\n    bool doInpainting_;\n    Mat inpaintingMask_;\n    std::vector<Mat> frames_;\n    std::vector<Mat> motions_; // motions_[i] is the motion from i-th to i+1-th frame\n    std::vector<float> blurrinessRates_;\n    std::vector<Mat> stabilizedFrames_;\n    std::vector<Mat> stabilizedMasks_;\n    std::vector<Mat> stabilizationMotions_;\n};\n\nclass CV_EXPORTS OnePassStabilizer : public StabilizerBase, public IFrameSource\n{\npublic:\n    OnePassStabilizer();\n\n    void setMotionFilter(Ptr<MotionFilterBase> val) { motionFilter_ = val; }\n    Ptr<MotionFilterBase> motionFilter() const { return motionFilter_; }\n\n    virtual void reset() { resetImpl(); }\n    virtual Mat nextFrame() { return nextStabilizedFrame(); }\n\nprivate:\n    void resetImpl();\n\n    virtual void setUp(Mat &firstFrame);\n    virtual void estimateMotion();\n    virtual void stabilizeFrame();\n\n    Ptr<MotionFilterBase> motionFilter_;\n};\n\nclass CV_EXPORTS TwoPassStabilizer : public StabilizerBase, public IFrameSource\n{\npublic:\n    TwoPassStabilizer();\n\n    void setMotionStabilizer(Ptr<IMotionStabilizer> val) { motionStabilizer_ = val; }\n    Ptr<IMotionStabilizer> motionStabilizer() const { return motionStabilizer_; }\n\n    void setEstimateTrimRatio(bool val) { mustEstTrimRatio_ = val; }\n    bool mustEstimateTrimaRatio() const { return mustEstTrimRatio_; }\n\n    virtual void reset() { resetImpl(); }\n    virtual Mat nextFrame();\n\n    // available after pre-pass, before it's empty\n    std::vector<Mat> motions() const;\n\nprivate:\n    void resetImpl();\n    void runPrePassIfNecessary();\n\n    virtual void setUp(Mat &firstFrame);\n    virtual void estimateMotion() { /* do nothing as motion was estimation in pre-pass */ }\n    virtual void stabilizeFrame();\n\n    Ptr<IMotionStabilizer> motionStabilizer_;\n    bool mustEstTrimRatio_;\n\n    int frameCount_;\n    bool isPrePassDone_;\n};\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/videostab/videostab.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_HPP__\n#define __OPENCV_VIDEOSTAB_HPP__\n\n#include \"opencv2/videostab/stabilizer.hpp\"\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Headers/world/world.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_WORLD_HPP__\n#define __OPENCV_WORLD_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\n#ifdef __cplusplus\nnamespace cv\n{\n\nCV_EXPORTS_W bool initAll();\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix/swix/swix/objc/opencv2.framework/Versions/A/Resources/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    <key>CFBundleName</key>\n    <string>OpenCV</string>\n    <key>CFBundleIdentifier</key>\n    <string>org.opencv</string>\n    <key>CFBundleVersion</key>\n    <string>2.4.9</string>\n    <key>CFBundleShortVersionString</key>\n    <string>2.4.9</string>\n    <key>CFBundleSignature</key>\n    <string>????</string>\n    <key>CFBundlePackageType</key>\n    <string>FMWK</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "swix/swix/swix/objc/operations-and-indexing.m",
    "content": "//\n//  indexing.m\n//  swix\n//\n//  Created by Scott Sievert on 7/13/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Accelerate/Accelerate.h>\n#import <stdint.h>\nvoid test(){\n    int N = 1000;\n    double * x = (double*)malloc(sizeof(double) * N);\n    double * y = (double*)malloc(sizeof(double) * N);\n    for (int i=0; i<N; i++){ x[i] = i; y[i] = 0;}\n    \n    dispatch_apply(N, dispatch_get_global_queue(0, 0), ^(size_t i){\n        y[i] = x[i]+1;\n    });\n    \n    for (int i=0; i<N; i++){\n        double value = x[i]+1 - y[i];\n        if (!(value==0)){\n            printf(\"%.2e, \", value);\n        }\n    }\n    printf(\"\\n\");\n}\n\n// UNOPTIMIZED\nvoid index_xa_b_objc(double* x, double* a, double* b, int N){\n    int * j = (int *)malloc(sizeof(int) * N);\n    vDSP_vfix32D(a, 1, j, 1, N); // double to int\n    \n    for (int i=0; i<N; i++){\n        x[j[i]] = b[i];\n    }\n    free(j);\n}\n\n// OPTIMIZED\ndouble* zeros_objc(int N){\n    double * x = (double *)malloc(sizeof(double) * N);\n    double value = 0.0;\n    vDSP_vfillD(&value, x, 1, N);\n    return x;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/objc/swix-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n// for speedy mathematical functions\n#import <Accelerate/Accelerate.h>\n\n// for the machine learning\n#import \"OpenCV.h\"\n\n// for various easier/faster-in-c operations\nvoid index_xa_b_objc(double * x, double*a, double*b, int N);\nvoid svd_objc(double * xx, int m, int n, double* sigma, double* vt, double* u, int compute_uv);\nvoid test();\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/tests/speed.swift",
    "content": "//\n//  speed.swift\n//  swix\n//\n//  Created by Scott Sievert on 8/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// should be run while optimized!\nclass swixSpeedTests {\n    init(){\n        time(pe1, name:\"Project Euler 1\")\n        time(pe10, name:\"Project Euler 10\")\n        time(pe73, name:\"Project Euler 73\")\n        time(pi_approx, name:\"Pi approximation\")\n        time(soft_thresholding, name:\"Soft thresholding\")\n    }\n}\nfunc time(_ f:(()->()), name:String=\"function\"){\n    let start = Date()\n    f()\n    print(NSString(format:\"\\(name) time (s): %.4f\" as NSString, -1 * start.timeIntervalSinceNow))\n}\nfunc pe1(){\n    let N = 1e6\n    let x = arange(N)\n    // seeing where that modulo is 0\n    _ = argwhere((abs(x%3) < 1e-9) || (abs(x%5) < 1e-9))\n    // println(sum(x[i]))\n    // prints 233168.0, the correct answer\n}\nfunc pe10(){\n    // find all primes\n    let N = 2e6.int\n    var primes = arange(Double(N))\n    let top = (sqrt(N.double)).int\n    for i in 2 ..< top{\n        let max:Int = (N/i)\n        let j = arange(2, max: max.double) * i.double\n        primes[j] *= 0.0\n    }\n    // sum(primes) is the correct answer\n}\nfunc pe73(){\n    let N = 1e3\n    let i = arange(N)+1\n    let (n, d) = meshgrid(i, y: i)\n    \n    var f = (n / d).flat\n    f = unique(f)\n    _ = (f > 1/3) && (f < 1/2)\n    // println(f[argwhere(j)].n)\n}\n\n\nfunc soft_thresholding(){\n    let N = 1e2.int\n    let j = linspace(-1, max: 1, num:N)\n    let (x, y) = meshgrid(j, y: j)\n    var z = pow(x, power: 2) + pow(y, power: 2)\n    let i = abs(z) < 0.5\n    z[argwhere(i)] *= 0\n    z[argwhere(1-i)] -= 0.5\n}\n\n\n\nfunc pi_approx(){\n    let N = 1e6\n    var k = arange(N)\n    var pi_approx = 1 / (2*k + 1)\n    pi_approx[2*k[0..<(N/2).int]+1] *= -1\n    // println(4 * pi_approx)\n    // prints 3.14059265383979\n}\n"
  },
  {
    "path": "swix/swix/swix/tests/tests.swift",
    "content": "//\n//  fullTests.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/18/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\nclass swixTests {\n    var N:Int\n    init(run_io_tests:Bool=false){\n        print(\"running many simple tests\")\n        self.N = 10\n        operatorTests()\n        print(\"   operators work as expected\")\n        comparisonTests()\n        print(\"   comparisons work as expected\")\n        functionTests()\n        print(\"   simple functions work as expected\")\n        twoDTests()\n        print(\"   matrix convience elements work as expected\")\n        if run_io_tests {\n            readWriteTests()\n            print(\"   {read,write}_{binary,csv}, savefig work like Python... at least on OSX\")\n        }\n        complexTests()\n        \n        numberTests()\n        _ = vectorTests()\n        matrixTests()\n        set_theory_tests()\n    }\n    func set_theory_tests(){\n        func in1d_test(){\n            let test = array(0, 1, 2, 5, 0)\n            let states = array(0, 2)\n            let mask = in1d(test, y:states)\n            assert(mask ~== array(1, 0, 1, 0, 1))\n        }\n        func intersection_test(){\n            let x = array(1, 2, 3, 4, -1, -1)\n            let y = array(1, 2, 3, 5, -1, -1)\n            let a = intersection(x, y:y)\n            let b = union(x, y:y)\n            assert(a ~== array(-1, 1, 2, 3))\n            assert(b ~== array(-1, 1, 2, 3, 4, 5))\n        }\n        in1d_test()\n        intersection_test()\n        print(\"set function works like set theory \")\n    }\n    func complexTests(){\n        func scalar_test(){\n            let x:Int = 1\n            let y:Double = 4\n            let z:Double = x + y\n            assert(z == 5)\n            print(\"Int(1)+Double(1)==2 through ScalarArithmetic\")\n        }\n        func swift_complex_test(){\n//            var x = 1.0 + 1.0.i\n//            assert(abs(x) == sqrt(2))\n//            print(\"scalar (not vector) complex number usage works using swift-complex.\")\n        }\n        func range_test(){\n            var x = arange(4)\n            let y = x[0..<2]\n            assert(y ~== arange(2))\n            \n            var z = zeros(4)\n            z[0..<2] = ones(2)\n            assert(z ~== array(1, 1, 0, 0))\n            print(\"x[0..<2] = ones(2) and y = z[3..<8] works in the 1d case!\")\n        }\n        func argwhere_test(){\n            var x = zeros(N)\n            let y = zeros(N)\n            x[0..<5] = ones(5)\n            let i = argwhere(abs(x-y) < 1e-9)\n            assert(i ~== array(5, 6, 7, 8, 9))\n            x[argwhere(x<2)] = ones(argwhere(x<2).n)\n            print(\"can use argwhere. x[argwhere(x<2)]=zeros(argwhere(x<2).n)  works for both 1d and 2d.\")\n        }\n        func matrix2d_indexing_test(){\n            var x = array(\"1 2 3; 4 5 6; 7 8 9\")\n            x[0..<2, 0..<2] = array(\"4 3; 2 6\")\n            assert(x ~== array(\"4 3 3; 2 6 6; 7 8 9\"))\n            print(\"can use x[1, 0..<2] or x[0..<2, 0..<2] to also index\")\n        }\n        func matrix2d_indexing_matrix_test(){\n            var x = array(\"1 2 3; 4 5 6; 7 8 9\")\n            assert(x[array(0, 1, 2, 3, 4, 5)] ~== array(1, 2, 3, 4, 5, 6))\n            print(\"x[vector] works and indexes the vector row first\")\n        }\n        func fft_test(){\n            let x = arange(8)\n            let (yr, yi) = fft(x)\n            let x2 = ifft(yr, yi: yi)\n            assert(x2 ~== x)\n            print(\"fft/ifft works. fft(x) -> (yreal, yimag)\")\n        }\n        func dot_test(){\n            let x = eye(3) * 2\n            let y = array(\"1 2 3 1; 4 5 6 1; 7 8 9 1\")\n            assert((x.dot(y)) ~== 2*y)\n            print(\"dot product works with dot(x, y) or x *! y\")\n            \n            let xA = ones(3)\n            let A = arange(3*3).reshape((3, 3))\n            let yA1 = A.dot(xA)\n            let yA2 = dot(A, x: xA)\n            assert(yA1 ~== array(3, 12, 21))\n            assert(yA1 ~== yA2)\n        }\n        func svd_test(){\n            let x = array(\"1 2; 4 8; 3 5\")\n            _ = svd(x)\n            \n            let y = array(\"1 2 3; 4 5 6\")\n            _ = svd(y)\n            \n            let z = array(\"1 2 3; 4 5 6; 7 8 9\")\n            _ = svd(z)\n            \n            print(\"svd works and tested by hand for square, fat and skinny matrices against Python\")\n        }\n        func svm_test(){\n            let svm = SVM()\n            let x = reshape(arange(4*2) , shape: (4, 2))\n            let y = array(0, 1, 2, 3)\n            \n            svm.train(x, y)\n            let z = svm.predict(array(2, 3))\n            assert(z == y[1])\n            print(\"svm works via simple test\")\n        }\n        func inv_test(){\n            let x = randn((4,4))\n            let y = inv(x)\n            assert((x.dot(y)) ~== eye(4))\n            print(\"matrix inversion works\")\n        }\n        func solve_test(){\n            let A0 = array(1, 2, 3, 4, 2, 1, 4, 6, 7)\n            let A = reshape(A0, shape: (3, 3))\n            let b = array(1, 2, 5)\n            _ = solve(A, b: b)\n            assert((A !/ b) ~== solve(A, b: b))\n            print(\"solve works, similar to Matlab's \\\\ operator (and checked by hand). Be careful -- this only works for nxn matrices\")\n        }\n        func eig_test(){\n            var x = zeros((3,3))\n            x[\"diag\"] = array(1, 2, 3)\n            let r = eig(x)\n            assert(r ~== array(1, 2, 3))\n            print(\"`eig` returns the correct eigenvalues and no eigenvectors.\")\n        }\n        func pinv_test(){\n            let x = arange(3*4).reshape((3,4))\n            let y = pinv(x)\n            assert(x.dot(y).dot(x) ~== x)\n            assert(x.pI ~== pinv(x))\n            print(\"pseudo-inverse works\")\n        }\n        swift_complex_test()\n        scalar_test()\n        range_test()\n        argwhere_test()\n        matrix2d_indexing_test()\n        matrix2d_indexing_matrix_test()\n        fft_test()\n        dot_test()\n        svd_test()\n        svm_test()\n        inv_test()\n        solve_test()\n        eig_test()\n        pinv_test()\n    }\n    func numberTests(){\n        assert(close(0, y: 1e-10) == true)\n        assert(close(0, y: 1e-10) == (1e-10 ~= 0))\n        assert(rad2deg(pi/2) == 90)\n        assert(deg2rad(90) == pi/2)\n        assert(max(0, 1) == 1)\n        assert(min(0, 1) == 0)\n//        assert(\"3.14\".floatValue == 3.14)\n        assert(3 / 4 == 0.75)\n        assert(3.25 / 4 == 0.8125)\n        assert(isNumber(3))\n        assert(!isNumber(zeros(2)))\n//        assert(!isNumber(\"3.14\"))\n    }\n    class vectorTests{\n        init(){\n            initingTests()\n            vectorSwiftTests()\n        }\n        func initingTests(){\n            // testing zeros and array\n            assert(zeros(4) ~== array(0,0,0,0))\n            assert(ones(4) ~== (zeros(4)+1))\n            assert(zeros_like(ones(4)) ~== zeros(4))\n            assert(arange(4) ~== array(0, 1, 2, 3))\n            assert(arange(2, max: 4) ~== array(2, 3))\n            assert(linspace(0,max: 1,num:3) ~== array(0, 0.5, 1))\n            assert(`repeat`(arange(2), N: 2) ~== array(0,1,0,1))\n            assert(copy(arange(4)) ~== arange(4))\n            assert(asarray(0..<2) ~== array(0, 1))\n            assert(copy(arange(3)) ~== array(0, 1, 2))\n            //assert(sum((rand(3) - array(0.516, 0.294, 0.727)) < 1e-2) == 3)\n            \n            let N = 1e4.int\n            seed(42)\n            let x = rand(N)\n            \n            seed(42)\n            var y = rand(N)\n            assert(x ~== y)\n            \n            seed(29)\n            y = rand(N)\n            assert(!(x ~== y))\n            \n            seed(42)\n            y = rand(N)\n            assert(x ~== y)\n            \n            assert(abs(x.mean() - 0.5) < 1e-1)\n            assert(abs(variance(x) - 1/12) < 1e-1)\n        }\n        func vectorSwiftTests(){\n            // testing the file vector.swift\n            var x_idx = zeros(4)\n            x_idx[0..<2] <- 2\n            assert(x_idx ~== array(2, 2, 0, 0))\n            assert(arange(4).reshape((2,2)) ~== array(\"0 1; 2 3\"))\n            assert(arange(4).copy() ~== arange(4))\n            var x = array(4, 2, 3, 1)\n            x.sort()\n            assert(x ~== array(1, 2, 3, 4))\n            assert(x.min() == 1)\n            assert(x.max() == 4)\n            assert(x.mean() == 2.5)\n            assert(x[\"all\"] ~== array(1, 2, 3, 4))\n            x[0] = 0\n            assert(x[0] == 0)\n            x[0..<2] = array(1, 3)\n            assert(x[0..<2] ~== array(1, 3))\n            x[arange(2)] = array(4, 1)\n            assert(x[arange(2)] ~== array(4, 1))\n            \n            let y = array(5, 2, 4, 3, 1)\n            assert((y < 2) ~== array(0, 0, 0, 0, 1))\n            assert(reverse(y) ~== array(1, 3, 4, 2, 5))\n            assert(sort(y) ~== array(1, 2, 3, 4, 5))\n            assert(delete(y, idx: array(0, 1)) ~== array(4, 3, 1))\n            assert(asarray([0, 1, 2]) ~== array(0, 1, 2))\n            assert(asarray(0..<2) ~== array(0, 1))\n            assert(concat(array(1, 2), y: array(3, 4)) ~== (arange(4)+1))\n            assert(clip(y, a_min: 2, a_max: 4) ~== array(4, 2, 4, 3, 2))\n            assert(delete(y, idx: array(0, 1)) ~== array(4,3,1))\n            assert(`repeat`(array(0,1),N: 2) ~== array(0,1,0,1))\n            assert(`repeat`(array(0, 1),N:2, axis:1) ~== array(0,0,1,1))\n            assert(argmax(array(1,4,2,5)) == 3)\n            assert(argmin(array(1,4,2,5)) == 0)\n            assert(argsort(array(1,4,2,5)) ~== array(0, 2, 1, 3))\n\n            assert(arange(4) ~== array(0, 1, 2, 3))\n            let xO = array(1, 2, 3)\n            let yO = array(1, 2, 3) + 3\n            assert(outer(xO, y: yO) ~== array(4, 5, 6, 8, 10, 12, 12, 15, 18).reshape((3,3)))\n            let xR1 = array(1.1, 1.2, 1.3)\n            let xR2 = array(1, 1, 1)\n            assert(remainder(xR1, x2: xR2) ~== array(0.1, 0.2, 0.3))\n            assert(xR1 % 1.0 ~== array(0.1, 0.2, 0.3))\n            assert(1.0 % xR1 ~== ones(3))\n            assert(arange(4)[-1] == 3.0)\n            \n            let xR = arange(4*4).reshape((4,4))\n            assert(rank(xR) == 2.0)\n            \n            assert(pow(array(1,2,3,4), power: 2) ~== array(1,4,9,16))\n            assert(pow(ones(4)*2, y: ones(4)*2) ~== array(4, 4, 4, 4))\n            assert(pow(-1, y: array(1, 2, 3, 4)) ~== array(-1, 1, -1, 1))\n            assert(norm(array(1,1,1), ord:2) == sqrt(3))\n            assert(norm(array(1,0,1), ord:1) == 2)\n            assert(norm(array(4,0,0), ord:0) == 1)\n            assert(norm(array(4,0,0), ord:-1) == 4)\n            assert(norm(array(4,2,-3), ord:inf) == 4)\n            assert(norm(array(4,2,-3), ord:-inf) == 2)\n            \n            assert(sign(array(-3, 4, 5)) ~== array(-1, 1, 1))\n            assert(floor(array(1.1, 1.2, 1.6)) ~== array(1, 1, 1))\n            assert(round(array(1.1, 1.2, 1.6)) ~== array(1, 1, 2))\n            assert(ceil(array(1.2, 1.5, 1.8)) ~== ones(3)*2)\n            assert(log10(ones(4) * 10) ~== ones(4))\n            assert(log2(ones(4) * 2) ~== ones(4))\n            assert(log(ones(4) * e) ~== ones(4))\n            assert(exp2(ones(4)*2) ~== ones(4) * 4)\n            assert(exp(ones(4)*2) ~== ones(4)*e*e)\n        }\n    }\n    func matrixTests(){\n        let x = randn((4,4))\n        assert(eye(4).dot(eye(4)) ~== eye(4))\n        assert(x.dot(x.I) ~== eye(4))\n        let (u,v) = meshgrid(array(0,1), y: array(2,3))\n        assert(u ~== `repeat`(array(0,1), N: 2).reshape((2,2)).T)\n        assert(v ~== `repeat`(array(2,3), N: 2).reshape((2,2)))\n        \n        let A = arange(3*3).reshape((3, 3))\n        assert(abs(A.max() - 8) < 1e-3)\n        assert(abs(A.min() - 0) < 1e-3)\n    }\n    \n    func readWriteTests(){\n        let x1 = arange(9).reshape((3,3)) * 2\n        write_csv(x1, filename: \"/tmp/image.csv\")\n        let y1:matrix = read_csv(\"/tmp/image.csv\", header_present:false).data\n        assert(x1 ~== y1)\n        \n        let x2 = array(1, 2, 3, 4, 5, 2, 1)\n        write_csv(x2, filename:\"/tmp/vector.csv\")\n        let y2:vector = read_csv(\"/tmp/vector.csv\")\n        assert(x2 ~== y2)\n        \n        let x3 = array(1, 5, 3, 1, 0, -10) * pi\n        write_binary(x3, filename:\"/tmp/x3.npy\")\n        let y3:vector = read_binary(\"/tmp/x3.npy\")\n        assert(y3 ~== x3)\n        \n        let x4 = arange(9).reshape((3,3))\n        write_binary(x4, filename:\"/tmp/x4.npy\")\n        let y4:matrix = read_binary(\"/tmp/x4.npy\")\n        assert(y4 ~== x4)\n    }\n    func twoDTests(){\n        var x = arange(9).reshape((3,3))\n        assert(x.T ~== transpose(x))\n        assert(x.I ~== inv(x))\n        assert(x[\"diag\"] ~== array(0, 4, 8))\n        var y = x.copy()\n        y[\"diag\"] = array(1, 5, 9)\n        assert(y ~== array(1, 1, 2, 3, 5, 5, 6, 7, 9).reshape((3,3)))\n        assert(eye(2) ~== array(1, 0, 0, 1).reshape((2,2)))\n        \n        assert(x[0..<2, 0..<2] ~== array(0, 1, 3, 4).reshape((2,2)))\n        var z2 = x.copy()\n        z2[0..<2, 0..<2] = array(1, 2, 3, 4).reshape((2,2))\n        assert(z2[0..<2, 0..<2] ~== array(1, 2, 3, 4).reshape((2,2)))\n        \n        assert(x.flat[array(1, 4, 5, 6)] ~== x[array(1, 4, 5, 6)])\n        y = x.copy()\n        y[array(1, 4, 5, 6)] = ones(4)\n        assert(y ~== array(0, 1, 2, 3, 1, 1, 1, 7, 8).reshape((3,3)))\n        \n        let z = arange(3*4).reshape((3,4))\n        assert(sum(z, axis:0) ~== array(12, 15, 18, 21))\n        assert(sum(z, axis:1) ~== array(6, 22, 38))\n        \n        let d1 = x.dot(y)\n        let d2 = x.dot(y)\n        let d3 = dot(x, y: y)\n        assert(d1 ~== d2)\n        assert(d1 ~== d3)\n    }\n    func functionTests(){\n        var x = array(-1, 0, 1)\n        \n        assert(abs(x) ~== array(1, 0, 1))\n        assert(sign(x+0.1) ~== array(-1, 1, 1))\n        assert(sum(x+1)     == 3)\n        assert(cumsum(x+1) ~== array(0, 1, 3))\n        assert(pow(x+1, power: 2) ~== array(0, 1, 4))\n        assert(((x+1)^2)   ~== array(0, 1, 4))\n        assert(variance(ones(4)) == 0)\n        assert(std(ones(4)) == 0)\n        assert(mean(x) == 0)\n        assert(abs(mean(rand(1000)) - 0.5) < 0.1)\n        assert(abs(mean(randn(1000))) < 0.1)\n        assert(abs(std(randn(1000)) - 1) < 0.2)\n        var y = randn((100,100))\n        assert(abs(mean(y.flat)) < 0.1)\n        y = rand((100, 100))\n        assert(abs(mean(y.flat) - 0.5) < 0.1)\n        \n        assert(`repeat`(array(0, 1), N: 2) ~== array(0, 1, 0, 1))\n        assert(`repeat`(array(0, 1), N: 2, axis:1) ~== array(0, 0, 1, 1))\n        \n//        var xC = zeros_like(x)\n        var xC = copy(x)\n        assert(xC ~== x.copy())\n        \n        assert(array(\"0 1 2; 3 4 5\") ~== arange(6).reshape((2,3)))\n        \n        var z1 = array(0, 1)\n        var z2 = array(2, 3)\n        var (z11, z22) = meshgrid(z1, y: z2)\n        assert(z11 ~== array(0, 0, 1, 1).reshape((2,2)))\n        assert(z22 ~== array(2, 3, 2, 3).reshape((2,2)))\n        \n        assert(x.min() == min(x))\n        assert(x.min() == -1)\n        \n        assert(x.max() == max(x))\n        assert(x.max() == 1)\n        \n        assert(x.copy() ~== copy(x))\n        assert(x.copy() ~== array(-1, 0, 1))\n        \n        assert(arange(4).reshape((2,2)).copy() ~== arange(4).reshape((2,2)))\n        \n        var z = array(-3, -2, -1, 0, 1, 2, 3)\n        assert(z[argwhere(z < 0)] ~== array(-3, -2, -1))\n        assert((z < 0) ~== array(1, 1, 1, 0, 0, 0, 0))\n        \n        assert(sin(array(1, 2, 3, 4)) ~== array(sin(1), sin(2), sin(3), sin(4)))\n//        func f(x:Double)->Double {return x+1}\n//        assert(apply_function(f,arange(100)) ~== (arange(100)+1))\n        var x5 = arange(5)\n        var y5 = array(1, 5, 3, 2, 6)\n        assert(max(x5, y: y5) ~== array(1, 5, 3, 3, 6))\n        assert(min(x5, y: y5) ~== array(0, 1, 2, 2, 4))\n        \n        var mx5 = arange(4).reshape((2,2))\n        var my5 = array(4, 2, 1, 0).reshape((2,2))\n        assert(min(mx5, y: my5) ~== array(0, 1, 1, 0).reshape((2,2)))\n        assert(reverse(y5) ~== array(6, 2, 3, 5, 1))\n        \n        assert(sort(y5) ~== array(1, 2, 3, 5, 6))\n        \n        seed(2)\n        var xR = rand(100)\n        seed(2)\n        var yR = rand(100)\n        assert(max(abs(xR - yR)) < 1e-6)\n        \n        func helper_test(){\n            let x = arange(2*3).reshape((2,3))\n            assert(fliplr(x) ~== array(2, 1, 0, 5, 4, 3).reshape((2,3)))\n            assert(flipud(x) ~== array(3, 4, 5, 0, 1, 2).reshape((2,3)))\n        }\n        helper_test()\n    }\n    func operatorTests(){\n        // l and o similar to 1 and 0\n        let l = ones(N)\n        let o = zeros(N)\n        \n        // PLUS\n        assert((o+1.double) ~== l)\n        assert((1.double+o) ~== l)\n        assert((l+o) ~== l)\n        \n        // MINUS\n        assert((l - o) ~== l)\n        assert((l - 1) ~== o)\n        assert((1 - o) ~== l)\n        \n        // MULTIPLY\n        assert(((o+1) * l) ~== l)\n        assert((l * 1) ~== l)\n        assert((1 * l) ~== l)\n        \n        // DIVIDE\n        assert(((l+1)/2) ~== l)\n        assert((o/l) ~== o)\n        assert((1 / l) ~== l)\n        \n        // POW\n        assert((array(1, 2, 3)^2) ~== array(1, 4, 9))\n        \n        // MODULO\n        assert(array(1, 3.14, 2.1)%1.0 ~== array(0, 0.14, 0.1))\n        assert(array(1, 2, 6) % 5 ~== array(1, 2, 1))\n    }\n    func comparisonTests(){\n        //     true:  <, >, <=, >=, ==, !==\n        let x = array(0, 3,  3,  4,  5,  7)\n        let y = array(1, 2,  3,  4,  5,  6)\n        \n        // matrix <op> matrix\n        assert((x < y) ~== array(1, 0, 0, 0, 0, 0))\n        assert((x > y) ~== array(0, 1, 0, 0, 0, 1))\n        assert((x <= y) ~== array(1, 0, 1, 1, 1, 0))\n        assert((x >= y) ~== array(0, 1, 1, 1, 1, 1))\n        assert((x == y) ~== array(0, 0, 1, 1, 1, 0))\n        assert((x !== y) ~== array(1, 1, 0, 0, 0, 1))\n        \n        // double <op> matrix\n        assert((4 < x) ~== array(0, 0, 0, 0, 1, 1))\n        assert((4 > x) ~== array(1, 1, 1, 0, 0, 0))\n        assert((4 >= x) ~== array(1, 1, 1, 1, 0, 0))\n        assert((4 <= x) ~== array(0, 0, 0, 1, 1, 1))\n        \n        // matrix <op> ouble\n        assert((x > 4) ~== array(0, 0, 0, 0, 1, 1))\n        assert((x < 4) ~== array(1, 1, 1, 0, 0, 0))\n        assert((x <= 4) ~== array(1, 1, 1, 1, 0, 0))\n        assert((x >= 4) ~== array(0, 0, 0, 1, 1, 1))\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/vector/complex-math.swift",
    "content": "//\n//  math.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/11/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\n\n// integration\nfunc cumtrapz(_ x:vector)->vector{\n    // integrate and see the steps at each iteration\n    let y = zeros_like(x)\n    var dx:CDouble = 1.0\n    vDSP_vtrapzD(!x, 1.stride, &dx, !y, 1.stride, x.n.length)\n    return y\n}\nfunc trapz(_ x:vector)->Double{\n    // integrate and get the final value\n    return cumtrapz(x)[-1]\n}\n// basic definitions\nfunc inner(_ x:vector, y:vector)->Double{\n    // the inner product. aka dot product, but I use dot product as a short for matrix multiplication\n    return sum(x * y)\n}\nfunc outer(_ x:vector, y:vector)->matrix{\n    // the outer product.\n    let (xm, ym) = meshgrid(x, y: y)\n    return xm * ym\n}\n// fourier transforms\nfunc fft(_ x: vector) -> (vector, vector){\n    let N:CInt = x.n.cint\n    var yr = zeros(N.int)\n    var yi = zeros(N.int)\n    \n    // setup for the accelerate calling\n    let radix:FFTRadix = FFTRadix(FFT_RADIX2)\n    let pass:vDSP_Length = vDSP_Length((log2(N.double)+1.0).int)\n    let setup:FFTSetupD = vDSP_create_fftsetupD(pass, radix)!\n    let log2n:Int = (log2(N.double)+1.0).int\n    let z = zeros(N.int)\n    var x2:DSPDoubleSplitComplex = DSPDoubleSplitComplex(realp: !x, imagp:!z)\n    var y = DSPDoubleSplitComplex(realp:!yr, imagp:!yi)\n    let dir = FFTDirection(FFT_FORWARD)\n    let stride = 1.stride\n    \n    // perform the actual computation\n    vDSP_fft_zropD(setup, &x2, stride, &y, stride, log2n.length, dir)\n    \n    // free memory\n    vDSP_destroy_fftsetupD(setup)\n    \n    // this divide seems wrong\n    yr /= 2.0\n    yi /= 2.0\n    return (yr, yi)\n}\nfunc ifft(_ yr: vector, yi: vector) -> vector{\n    let N = yr.n\n    var x = zeros(N)\n    \n    // setup for the accelerate calling\n    let radix:FFTRadix = FFTRadix(FFT_RADIX2)\n    let pass:vDSP_Length = vDSP_Length((log2(N.double)+1.0).int)\n    let setup:FFTSetupD = vDSP_create_fftsetupD(pass, radix)!\n    let log2n:Int = (log2(N.double)+1.0).int\n    let z = zeros(N)\n    var x2:DSPDoubleSplitComplex = DSPDoubleSplitComplex(realp: !yr, imagp:!yi)\n    var result:DSPDoubleSplitComplex = DSPDoubleSplitComplex(realp: !x, imagp:!z)\n    let dir = FFTDirection(FFT_INVERSE)\n    let stride = 1.stride\n    \n    // doing the actual computation\n    vDSP_fft_zropD(setup, &x2, stride, &result, stride, log2n.length, dir)\n    \n    // this divide seems wrong\n    x /= 16.0\n    return x\n}\nfunc fftconvolve(_ x:vector, kernel:vector)->vector{\n    // convolve two arrays using the fourier transform.\n    // zero padding, assuming kernel is smaller than x\n    var k_pad = zeros_like(x)\n    k_pad[0..<kernel.n] = kernel\n    \n    // performing the fft\n    let (Kr, Ki) = fft(k_pad)\n    let (Xr, Xi) = fft(x)\n    \n    // computing the multiplication (yes, a hack)\n    // (xr+xi*j) * (yr+yi*j) = xr*xi - xi*yi + j*(xi*yr) + j*(yr*xi)\n    let Yr = Xr*Kr - Xi*Ki\n    let Yi = Xr*Ki + Xi*Kr\n    let y = ifft(Yr, yi: Yi)\n    return y\n}\n"
  },
  {
    "path": "swix/swix/swix/vector/helper-functions.swift",
    "content": "//\n//  helper-functions.swift\n//  swix\n//\n//  Created by Scott Sievert on 8/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// NORM\nfunc norm(_ x: vector, ord:Double=2) -> Double{\n    // takes the norm of an array\n    if ord==2      { return sqrt(sum(pow(x, power: 2)))}\n    else if ord==1 { return sum(abs(x))}\n    else if ord==0 { return sum(abs(x) > S2_THRESHOLD)}\n    else if ord == -1 || ord == -2{\n        return pow(sum(abs(x)^ord.double), 1/ord.double)\n    }\n    else if ord.double ==  inf {return max(abs(x))}\n    else if ord.double == -inf {return min(abs(x))}\n    assert(false, \"type of norm unrecongnized\")\n    return -1.0}\nfunc count_nonzero(_ x:vector)->Double{\n    return sum(abs(x) > S2_THRESHOLD)\n}\n\n// modifying elements of the array\nfunc clip(_ a:vector, a_min:Double, a_max:Double)->vector{\n    // clip the matrix\n    var y = a.copy()\n    y[argwhere(a < a_min)] <- a_min\n    y[argwhere(a > a_max)] <- a_max\n    return y\n}\nfunc reverse(_ x:vector) -> vector{\n    // reverse the array\n    let y = x.copy()\n    vDSP_vrvrsD(!y, 1.stride, y.n.length)\n    return y\n}\nfunc delete(_ x:vector, idx:vector) -> vector{\n    // delete select elements\n    var i = ones(x.n)\n    i[idx] *= 0\n    let y = x[argwhere(i)]\n    return y\n}\nfunc `repeat`(_ x: vector, N:Int, axis:Int=0) -> vector{\n    // repeat the array element wise or as a whole array\n    var y = zeros((N, x.n))\n    \n    // wrapping using OpenCV\n    CVWrapper.`repeat`(!x, to:!y, n_x:x.n.cint, n_repeat:N.cint)\n    \n    if axis==0{}\n    else if axis==1 { y = y.T}\n    return y.flat\n}\n\n// SORTING and the like\nfunc sort(_ x:vector)->vector{\n    // sort the array and return a new array\n    let y = x.copy()\n    y.sort()\n    return y\n}\nfunc unique(_ x:vector)->vector{\n    var y = sort(x)\n    var z = concat(zeros(1), y: y)\n    let diff = abs(z[1..<z.n] - z[0..<z.n-1]) > S2_THRESHOLD\n    let un = y[argwhere(diff)]\n    if abs(min(x)) < S2_THRESHOLD{\n        return sort(concat(zeros(1), y: un))\n    }\n    else{\n        return un\n    }\n}\nfunc shuffle(_ x:vector)->vector{\n    // randomly shuffle the array\n    let y = x.copy()\n    CVWrapper.shuffle(!y, n:y.n.cint)\n    return y\n}\n\n// SETS\nfunc intersection(_ x: vector, y:vector)->vector{\n    return unique(x[argwhere(in1d(x, y: y))])\n}\nfunc union(_ x:vector, y:vector)->vector{\n    return unique(concat(x, y: y))\n}\nfunc in1d(_ x: vector, y:vector)->vector{\n    if (x.n > 0 && y.n > 0){\n        let (xx, yy) = meshgrid(x, y: y)\n        let i = abs(xx-yy) < S2_THRESHOLD\n        let j = (sum(i, axis:1)) > 0.5\n        return 0+j\n    }\n    return array()\n}\nfunc concat(_ x:vector, y:vector)->vector{\n    // concatenate two matrices\n    var z = zeros(x.n + y.n)\n    z[0..<x.n] = x\n    z[x.n..<y.n+x.n] = y\n    return z\n}\n\n// ARG\nfunc argmax(_ x:vector)->Int{\n    // find the location of the max\n    var m:CInt = 0\n    CVWrapper.argmax(!x, n: x.n.cint, max: &m)\n    return Int(m)\n}\nfunc argmin(_ x:vector)->Int{\n    // find the location of the min\n    var m:CInt = 0\n    CVWrapper.argmin(!x, n: x.n.cint, min: &m)\n    return Int(m)\n}\nfunc argsort(_ x:vector)->vector{\n    // sort the array but use integers\n    \n    // the array of integers that OpenCV needs\n    var y:[CInt] = Array(repeating: 0, count: x.n)\n    // calling opencv's sortidx\n    CVWrapper.argsort(!x, n: x.n.cint, into:&y)\n    // the integer-->double conversion\n    let z = zeros_like(x)\n    vDSP_vflt32D(&y, 1.stride, !z, 1.stride, x.n.length)\n    return z\n}\nfunc argwhere(_ idx: vector) -> vector{\n    // counts non-zero elements, return array of doubles (which can be indexed!).\n    let i = arange(idx.n)\n    let args = zeros(sum(idx).int)\n    vDSP_vcmprsD(!i, 1.stride, !idx, 1.stride, !args, 1.stride, idx.n.length)\n    return args\n}\n\n\n// LOGICAL\nfunc logical_and(_ x:vector, y:vector)->vector{\n    return x * y\n}\nfunc logical_or(_ x:vector, y:vector)->vector{\n    var i = x + y\n    let j = argwhere(i > 0.5)\n    i[j] <- 1.0\n    return i\n}\nfunc logical_not(_ x:vector)->vector{\n    return 1-x\n}\nfunc logical_xor(_ x:vector, y:vector)->vector{\n    let i = x + y\n    let j = (i < 1.5) && (i > 0.5)\n    return j\n}\n\n// PRINTING\nfunc println(_ x: vector, prefix:String=\"array([\", postfix:String=\"])\", newline:String=\"\\n\", format:String=\"%.3f\", seperator:String=\", \", printAllElements:Bool=false){\n    // print the matrix\n    print(prefix, terminator: \"\")\n    var suffix = seperator\n    var printed = false\n    var string:NSString\n    for i in 0..<x.n{\n        if i==x.n-1 { suffix = \"\" }\n        if printAllElements || (x.n)<16 || i<3 || i>(x.n-4){\n            string = NSString(format: (format+suffix) as NSString, x[i])\n            print(String(string), terminator:\"\")\n        }\n        else if printed == false{\n            printed = true\n            print(\"..., \", terminator: \"\")\n        }\n    }\n    print(postfix, terminator: \"\")\n    print(newline, terminator: \"\")\n}\nfunc print(_ x: vector, prefix:String=\"vector([\", postfix:String=\"])\", format:String=\"%.3f\", printWholeMatrix:Bool=false){\n    println(x, prefix:prefix, postfix:postfix, newline:\"\\n\", format:format, printAllElements:printWholeMatrix)\n}\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/vector/initing.swift",
    "content": "//\n//  initing.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\nimport Swift\n\n// SLOW PARTS: array(doubles), read_csv, write_csv. not a huge deal -- hopefully not used in final code\n\n\nfunc zeros(_ N: Int) -> vector{\n    // N zeros\n    return vector(n: N)\n}\nfunc zeros_like(_ x: vector) -> vector{\n    // make an array like the other array\n   return zeros(x.n)\n}\nfunc ones_like(_ x: vector) -> vector{\n    // make an array like the other array\n    return zeros_like(x) + 1\n}\nfunc ones(_ N: Int) -> vector{\n    // N ones\n    return vector(n: N)+1\n}\nfunc arange(_ max: Double, x exclusive:Bool = true) -> vector{\n    // 0..<max\n    return arange(0, max: max, x:exclusive)\n}\nfunc arange(_ max: Int, x exclusive:Bool = true) -> vector{\n    // 0..<max\n    return arange(0, max: max.double, x:exclusive)\n}\nfunc range(_ min:Double, max:Double, step:Double) -> vector{\n    // min, min+step, min+2*step..., max-step, max\n    return linspace(min, max: max, num:1+((max-min)/step).int)\n}\nfunc arange(_ min: Double, max: Double, x exclusive: Bool = true) -> vector{\n    // min...max\n    var pad = 0\n    if !exclusive {pad = 1}\n    let N = max.int - min.int + pad\n    let x = zeros(N)\n    var o = CDouble(min)\n    var l = CDouble(1)\n    vDSP_vrampD(&o, &l, !x, 1.stride, N.length)\n    return x\n}\nfunc linspace(_ min: Double, max: Double, num: Int=50) -> vector{\n    // 0...1\n    let x = zeros(num+0)\n    var min  = CDouble(min)\n    var step = CDouble((max-min).double/(num-1).double)\n    vDSP_vrampD(&min, &step, !x, 1.stride, x.n.length)\n    return x\n}\nfunc array(_ numbers: Double...) -> vector{\n    // array(1, 2, 3, 4) -> arange(4)+1\n    // okay to leave unoptimized, only used for testing\n    var x = zeros(numbers.count)\n    var i = 0\n    for number in numbers{\n        x[i] = number\n        i += 1\n    }\n    return x\n}\nfunc asarray(_ x: [Double]) -> vector{\n    // convert a grid of double's to an array\n    var y = zeros(x.count)\n    y.grid = x\n    return y\n}\nfunc asarray(_ seq: Range<Int>) -> vector {\n    // make a range a grid of arrays\n    // improve with [1]\n    // [1]:https://gist.github.com/nubbel/d5a3639bea96ad568cf2\n    let start:Double = seq.lowerBound.double * 1.0\n    let end:Double   = seq.upperBound.double * 1.0\n    return arange(start, max: end, x:true)\n}\n\nfunc copy(_ x: vector) -> vector{\n    // copy the value\n    return x.copy()\n}\n\nfunc seed(_ n:Int){\n    SWIX_SEED = __CLPK_integer(n)\n}\n\nfunc rand(_ N: Int, distro:String=\"uniform\") -> vector{\n    let x = zeros(N)\n    var i:__CLPK_integer = 1\n    if distro==\"normal\" {i = __CLPK_integer(3)}\n    var seed:Array<__CLPK_integer> = [SWIX_SEED, 2, 3, 5]\n    var nn:__CLPK_integer  = __CLPK_integer(N)\n    dlarnv_(&i, &seed, &nn, !x)\n    SWIX_SEED = seed[0]\n    return x\n}\nfunc randn(_ N: Int, mean: Double=0, sigma: Double=1) -> vector{\n    return (rand(N, distro:\"normal\") * sigma) + mean;\n}\nfunc randperm(_ N:Int)->vector{\n    let x = arange(N)\n    let y = shuffle(x)\n    return y\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/vector/operators.swift",
    "content": "//\n//  oneD-functions.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\nfunc make_operator(_ lhs:vector, operation:String, rhs:vector) -> vector{\n    assert(lhs.n == rhs.n, \"Sizes must match!\")\n    \n    // see [1] on how to integrate Swift and accelerate\n    // [1]:https://github.com/haginile/SwiftAccelerate\n    var result = lhs.copy()\n    let N = lhs.n\n    if operation==\"+\"\n        {cblas_daxpy(N.cint, 1.0.cdouble, !rhs, 1.cint, !result, 1.cint);}\n    else if operation==\"-\"\n        {cblas_daxpy(N.cint, -1.0.cdouble, !rhs, 1.cint, !result, 1.cint);}\n    else if operation==\"*\"\n        {vDSP_vmulD(!lhs, 1, !rhs, 1, !result, 1, lhs.n.length)}\n    else if operation==\"/\"\n        {vDSP_vdivD(!rhs, 1, !lhs, 1, !result, 1, lhs.n.length)}\n    else if operation==\"%\"{\n        result = remainder(lhs, x2: rhs)\n    }\n    else if operation==\"<\" || operation==\">\" || operation==\">=\" || operation==\"<=\" {\n        result = zeros(lhs.n)\n        CVWrapper.compare(!lhs, with: !rhs, using: operation.nsstring as String, into: !result, ofLength: lhs.n.cint)\n        // since opencv uses images which use 8-bit values\n        result /= 255\n    }\n    else if operation == \"==\"{\n        return abs(lhs-rhs) < S2_THRESHOLD\n    }\n    else if operation == \"!==\"{\n        return abs(lhs-rhs) > S2_THRESHOLD\n    }\n    else {assert(false, \"operation not recongized!\")}\n    return result\n}\nfunc make_operator(_ lhs:vector, operation:String, rhs:Double) -> vector{\n    var array = zeros(lhs.n)\n    var right = [rhs]\n    if operation == \"%\"{\n        // unoptimized. for loop in c\n        let r = zeros_like(lhs) + rhs\n        array = remainder(lhs, x2: r)\n    } else if operation == \"*\"{\n        var C:CDouble = 0\n        var mul = CDouble(rhs)\n        vDSP_vsmsaD(!lhs, 1.stride, &mul, &C, !array, 1.stride, lhs.n.length)\n    }\n    else if operation == \"+\"\n        {vDSP_vsaddD(!lhs, 1, &right, !array, 1, lhs.n.length)}\n    else if operation==\"/\"\n        {vDSP_vsdivD(!lhs, 1, &right, !array, 1, lhs.n.length)}\n    else if operation==\"-\"\n        {array = make_operator(lhs, operation: \"-\", rhs: ones(lhs.n)*rhs)}\n    else if operation==\"<\" || operation==\">\" || operation==\"<=\" || operation==\">=\"{\n        CVWrapper.compare(!lhs, with:rhs.cdouble, using:operation.nsstring as String, into:!array, ofLength:lhs.n.cint)\n        array /= 255\n    }\n    else {assert(false, \"operation not recongnized! Error with the speedup?\")}\n    return array\n}\nfunc make_operator(_ lhs:Double, operation:String, rhs:vector) -> vector{\n    var array = zeros(rhs.n) // lhs[i], rhs[i]\n    let l = ones(rhs.n) * lhs\n    if operation == \"*\"\n        {array = make_operator(rhs, operation: \"*\", rhs: lhs)}\n    else if operation==\"%\"{\n        let l = zeros_like(rhs) + lhs\n        array = remainder(l, x2: rhs)\n    }\n    else if operation == \"+\"{\n        array = make_operator(rhs, operation: \"+\", rhs: lhs)}\n    else if operation==\"-\"\n        {array = -1 * make_operator(rhs, operation: \"-\", rhs: lhs)}\n    else if operation==\"/\"{\n        array = make_operator(l, operation: \"/\", rhs: rhs)}\n    else if operation==\"<\"{\n        array = make_operator(rhs, operation: \">\", rhs: lhs)}\n    else if operation==\">\"{\n        array = make_operator(rhs, operation: \"<\", rhs: lhs)}\n    else if operation==\"<=\"{\n        array = make_operator(rhs, operation: \">=\", rhs: lhs)}\n    else if operation==\">=\"{\n        array = make_operator(rhs, operation: \"<=\", rhs: lhs)}\n    else {assert(false, \"Operator not reconginzed\")}\n    return array\n}\n\n// DOUBLE ASSIGNMENT\ninfix operator <-\nfunc <- (lhs:inout vector, rhs:Double){\n    let assign = ones(lhs.n) * rhs\n    lhs = assign\n}\n\n// EQUALITY\ninfix operator ~== : ComparisonPrecedence\nfunc ~== (lhs: vector, rhs: vector) -> Bool{\n    assert(lhs.n == rhs.n, \"`~==` only works on arrays of equal size\")\n    return max(abs(lhs - rhs)) > 1e-6 ? false : true;\n}\nfunc == (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"==\", rhs: rhs)}\nfunc !== (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"!==\", rhs: rhs)}\n\n// NICE ARITHMETIC\nfunc += (x: inout vector, right: Double){\n    x = x + right}\nfunc *= (x: inout vector, right: Double){\n    x = x * right}\nfunc -= (x: inout vector, right: Double){\n    x = x - right}\nfunc /= (x: inout vector, right: Double){\n    x = x / right}\n\n// MOD\ninfix operator % : Multiplicative\nfunc % (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \"%\", rhs: rhs)}\nfunc % (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"%\", rhs: rhs)}\nfunc % (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"%\", rhs: rhs)}\n// POW\ninfix operator ^ : Multiplicative\nfunc ^ (lhs: vector, rhs: Double) -> vector{\n    return pow(lhs, power: rhs)}\nfunc ^ (lhs: vector, rhs: vector) -> vector{\n    return pow(lhs, y: rhs)}\nfunc ^ (lhs: Double, rhs: vector) -> vector{\n    return pow(lhs, y: rhs)}\n// PLUS\ninfix operator + : Additive\nfunc + (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\nfunc + (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\nfunc + (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\n// MINUS\ninfix operator - : Additive\nfunc - (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\nfunc - (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\nfunc - (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\n// TIMES\ninfix operator * : Multiplicative\nfunc * (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\nfunc * (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\nfunc * (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\n// DIVIDE\ninfix operator / : Multiplicative\nfunc / (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)\n    }\nfunc / (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)}\nfunc / (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)}\n// LESS THAN\ninfix operator < : ComparisonPrecedence\nfunc < (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\nfunc < (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\nfunc < (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\n// GREATER THAN\ninfix operator > : ComparisonPrecedence\nfunc > (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\nfunc > (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\nfunc > (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\n// GREATER THAN OR EQUAL\ninfix operator >= : ComparisonPrecedence\nfunc >= (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\nfunc >= (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\nfunc >= (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\n// LESS THAN OR EQUAL\ninfix operator <= : ComparisonPrecedence\nfunc <= (lhs: vector, rhs: Double) -> vector{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\nfunc <= (lhs: vector, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\nfunc <= (lhs: Double, rhs: vector) -> vector{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\n// LOGICAL AND\ninfix operator && : Additive\nfunc && (lhs: vector, rhs: vector) -> vector{\n    return logical_and(lhs, y: rhs)}\n// LOGICAL OR\nfunc || (lhs: vector, rhs: vector) -> vector {\n    return logical_or(lhs, y: rhs)\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/vector/simple-math.swift",
    "content": "//\n//  oneD_math.swift\n//  swix\n//\n//  Created by Scott Sievert on 6/11/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n\nimport Foundation\nimport Accelerate\n\nfunc apply_function(_ function: (Double)->Double, x: vector) -> vector{\n    // apply a function to every element.\n    \n    // I've tried the below, but it doesn't apply the function to every element (at least in Xcode6b4)\n    //var function:Double->Double = sin\n    //var x = arange(N)*pi / N\n    //var y = zeros(x.count)\n    //dispatch_apply(UInt(N), dispatch_get_global_queue(0,0), {(i)->() in\n    //    y[Int(i)] = function(x[Int(i)])\n    //    })\n\n    var y = zeros(x.count)\n    for i in 0..<x.count{\n        y[i] = function(x[i])\n    }\n    return y\n}\nfunc apply_function(_ function: String, x: vector)->vector{\n    // apply select optimized functions\n    let y = zeros_like(x)\n    let n = x.n.length\n    var count = Int32(x.n)\n    if function==\"abs\"{\n        vDSP_vabsD(!x, 1, !y, 1, n);}\n    else if function==\"sign\"{\n        var o = CDouble(0)\n        var l = CDouble(1)\n        vDSP_vlimD(!x, 1.stride, &o, &l, !y, 1.stride, n)\n    }\n    else if function==\"cumsum\"{\n        var scalar:CDouble = 1\n        vDSP_vrsumD(!x, 1.stride, &scalar, !y, 1.stride, n)\n    }\n    else if function==\"floor\"{\n        vvfloor(!y, !x, &count)\n    }\n    else if function==\"log10\"{\n        assert(min(x) > 0, \"log must be called with positive values\")\n        vvlog10(!y, !x, &count)\n    }\n    else if function==\"log2\"{\n        assert(min(x) > 0, \"log must be called with positive values\")\n        vvlog2(!y, !x, &count)\n    }\n    else if function==\"exp2\"{\n        vvexp2(!y, !x, &count)\n    }\n    else if function==\"log\"{\n        assert(min(x) > 0, \"log must be called with positive values\")\n        vvlog(!y, !x, &count)\n    }\n    else if function==\"exp\"{\n        vvexp(!y, !x, &count)\n    }\n    else if function==\"cos\"{\n        vvcos(!y, !x, &count)\n    }\n    else if function==\"sin\"{\n        vvsin(!y, !x, &count)\n    }\n    else if function==\"tan\"{\n        vvtan(!y, !x, &count)\n    }\n    else if function==\"expm1\"{\n        vvexpm1(!y, !x, &count)\n    }\n    else if function==\"round\"{\n        vvnint(!y, !x, &count)\n    }\n    else if function==\"ceil\"{\n        vvceil(!y, !x, &count)\n    }\n    else if function == \"tanh\" {\n        vvtanh(!y, !x, &count)\n    }\n    else {assert(false, \"Function not recongized\")}\n    return y\n}\n\n// MIN/MAX\nfunc min(_ x: vector) -> Double{\n    // finds the min\n    return x.min()}\nfunc max(_ x: vector) -> Double{\n    // finds the max\n    return x.max()}\nfunc max(_ x: vector, y:vector)->vector{\n    // finds the max of two arrays element wise\n    assert(x.n == y.n)\n    let z = zeros_like(x)\n    vDSP_vmaxD(!x, 1.stride, !y, 1.stride, !z, 1.stride, x.n.length)\n    return z\n}\nfunc min(_ x: vector, y:vector)->vector{\n    // finds the min of two arrays element wise\n    assert(x.n == y.n)\n    let z = zeros_like(x)\n    vDSP_vminD(!x, 1.stride, !y, 1.stride, !z, 1.stride, x.n.length)\n    return z\n}\n\n// BASIC STATS\nfunc mean(_ x: vector) -> Double{\n    // finds the mean\n    return x.mean()\n}\nfunc std(_ x: vector) -> Double{\n    // standard deviation\n    return sqrt(variance(x))}\nfunc variance(_ x: vector) -> Double{\n    // the varianace\n    return sum(pow(x - mean(x), power: 2) / x.count.double)}\n\n// BASIC INFO\nfunc sign(_ x: vector)->vector{\n    // finds the sign\n    return apply_function(\"sign\", x: x)}\nfunc sum(_ x: vector) -> Double{\n    // finds the sum of an array\n    var ret:CDouble = 0\n    vDSP_sveD(!x, 1.stride, &ret, x.n.length)\n    return Double(ret)\n}\nfunc remainder(_ x1:vector, x2:vector)->vector{\n    // finds the remainder\n    return (x1 - floor(x1 / x2) * x2)\n}\nfunc cumsum(_ x: vector) -> vector{\n    // the sum of each element before.\n    return apply_function(\"cumsum\", x: x)}\nfunc abs(_ x: vector) -> vector{\n    // absolute value\n    return apply_function(\"abs\", x: x)}\nfunc prod(_ x:vector)->Double{\n    var y = x.copy()\n    var factor = 1.0\n    if min(y) < 0{\n        y[argwhere(y < 0.0)] *= -1.0\n        if sum(x < 0).truncatingRemainder(dividingBy: 2) == 1 {factor = -1}\n    }\n    return factor * exp(sum(log(y)))\n}\nfunc cumprod(_ x:vector)->vector{\n    var y = x.copy()\n    if min(y) < 0.0{\n        let i = y < 0\n        y[argwhere(i)] *= -1.0\n        let j = 1 - (cumsum(i) % 2.0) < S2_THRESHOLD\n        var z = exp(cumsum(log(y)))\n        z[argwhere(j)] *= -1.0\n        return z\n    }\n    return exp(cumsum(log(y)))\n}\n\n\n// POWER FUNCTIONS\nfunc pow(_ x:vector, power:Double)->vector{\n    // take the power. also callable with ^\n    let y = zeros_like(x)\n    CVWrapper.pow(!x, n:x.n.cint, power:power, into:!y)\n    return y\n}\nfunc pow(_ x:vector, y:vector)->vector{\n    // take the power. also callable with ^\n    let z = zeros_like(x)\n    var num = CInt(x.n)\n    vvpow(!z, !y, !x, &num)\n    return z\n}\nfunc pow(_ x:Double, y:vector)->vector{\n    // take the power. also callable with ^\n    let xx = ones(y.n) * x\n    return pow(xx, y: y)\n}\nfunc sqrt(_ x: vector) -> vector{\n    return x^0.5\n}\nfunc exp(_ x:vector)->vector{\n    return apply_function(\"exp\", x: x)\n}\nfunc exp2(_ x:vector)->vector{\n    return apply_function(\"exp2\", x: x)\n}\nfunc expm1(_ x:vector)->vector{\n    return apply_function(\"expm1\", x: x)\n}\n\n// ROUND\nfunc round(_ x:vector)->vector{\n    return apply_function(\"round\", x: x)\n}\nfunc round(_ x:vector, decimals:Double)->vector{\n    let factor = pow(10, decimals)\n    return round(x*factor) / factor\n}\nfunc floor(_ x: vector) -> vector{\n    return apply_function(\"floor\", x: x)\n}\nfunc ceil(_ x: vector) -> vector{\n    return apply_function(\"ceil\", x: x)\n}\n\n// LOG\nfunc log10(_ x:vector)->vector{\n    // log_10\n    return apply_function(\"log10\", x: x)\n}\nfunc log2(_ x:vector)->vector{\n    // log_2\n    return apply_function(\"log2\", x: x)\n}\nfunc log(_ x:vector)->vector{\n    // log_e\n    return apply_function(\"log\", x: x)\n}\n\n// TRIG\nfunc sin(_ x: vector) -> vector{\n    return apply_function(\"sin\", x: x)\n}\nfunc cos(_ x: vector) -> vector{\n    return apply_function(\"cos\", x: x)\n}\nfunc tan(_ x: vector) -> vector{\n    return apply_function(\"tan\", x: x)\n}\nfunc tanh(_ x: vector) -> vector {\n    return apply_function(\"tanh\", x: x)\n}\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix/swix/vector/vector.swift",
    "content": "//\n//  initing.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\n// the matrix definition and related functions go here\n\n// SLOW PARTS: x[vector, vector] set\n\nstruct vector {\n    let n: Int // the number of elements\n    var count: Int // ditto\n    var grid: [Double] // the raw values\n    init(n: Int) {\n        self.n = n\n        self.count = n\n        grid = Array(repeating: 0.0, count: n)\n    }\n    func reshape(_ shape: (Int,Int)) -> matrix{\n        // reshape to a matrix of size.\n        var (mm, nn) = shape\n        if mm == -1 {mm = n / nn}\n        if nn == -1 {nn = n / mm}\n        assert(mm * nn == n, \"Number of elements must not change.\")\n        var y:matrix = zeros((mm, nn))\n        y.flat = self\n        return y\n    }\n    func copy() -> vector{\n        // return a new array just like this one\n        let y = zeros(n)\n        cblas_dcopy(self.n.cint, !self, 1.cint, !y, 1.cint)\n        return y\n    }\n    func sort(){\n        // sort this array *in place*\n        vDSP_vsortD(!self, self.n.length, 1.cint)\n    }\n    func indexIsValidForRow(_ index: Int) -> Bool {\n        // making sure this index is valid\n        return index >= 0 && index < n\n    }\n    func min() -> Double{\n        // return the minimum\n        var m:CDouble=0\n        vDSP_minvD(!self, 1.stride, &m, self.n.length)\n        return Double(m)\n    }\n    func max() -> Double{\n        // return the maximum\n        var m:CDouble=0\n        vDSP_maxvD(!self, 1.stride, &m, self.n.length)\n        return m\n    }\n    func mean() -> Double{\n        // return the mean\n        return sum(self) / n\n    }\n    subscript(index:String)->vector{\n        // assumed to be x[\"all\"]. returns every element\n        get {\n            assert(index == \"all\", \"Currently only \\\"all\\\" is supported\")\n            return self\n        }\n        set {\n            assert(index == \"all\", \"Currently only \\\"all\\\" is supported\")\n            self[0..<n] = newValue\n        }\n    }\n    subscript(index: Int) -> Double {\n        // x[0] -> Double. access a single element\n        get {\n            var newIndex:Int = index\n            if newIndex < 0 {newIndex = self.n + index}\n            assert(indexIsValidForRow(newIndex), \"Index out of range\")\n            return grid[newIndex]\n        }\n        set {\n            var newIndex:Int = index\n            if newIndex < 0 {newIndex = self.n + index}\n            assert(indexIsValidForRow(newIndex), \"Index out of range\")\n            grid[newIndex] = newValue\n        }\n    }\n    subscript(r: Range<Int>) -> vector {\n        // x[0..<N]. Access a range of values.\n        get {\n            // assumes that r is not [0, 1, 2, 3...] not [0, 2, 4...]\n            return self[asarray(r)]\n        }\n        set {\n            self[asarray(r)].grid = newValue.grid}\n    }\n    subscript(i: vector) -> vector {\n        // x[arange(2)]. access a range of values; x[0..<2] depends on this.\n        get {\n            // vector has fractional parts, and those parts get truncated\n            var idx:vector\n            if i.n > 0 {\n                if i.n == self.n && i.max() < 1.5 {\n                    // assumed to be boolean\n                    idx = argwhere(i > 0.5)\n                }\n                else {\n                    // it's just indexes\n                    idx = i.copy()\n                }\n                if idx.max() < 0 {\n                    // negative indexing\n                    idx += n.double\n                }\n                if (idx.n > 0){\n                    assert((idx.max().int < self.n) && (idx.min() >= 0), \"An index is out of bounds\")\n                    let y = zeros(idx.n)\n                    vDSP_vindexD(!self, !idx, 1.stride, !y, 1.stride, idx.n.length)\n                    return y\n                }\n            }\n            return array()\n        }\n        set {\n            var idx:vector// = oidx.copy()\n            if i.n > 0{\n                if i.n == self.n && i.max() < 1.5{\n                    // assumed to be boolean\n                    idx = argwhere(i > 0.5)\n                }\n                else {\n                    // it's just indexes\n                    idx = i.copy()\n                }\n                if idx.n > 0{\n                    if idx.max() < 0 {idx += n.double }\n                    assert((idx.max().int < self.n) && (idx.min() >= 0), \"An index is out of bounds\")\n                    index_xa_b_objc(!self, !idx, !newValue, idx.n.cint)\n                }\n            }\n        }\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix/swix.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\tD24D7133199272E600D4B9D8 /* opencv2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D24D7132199272E600D4B9D8 /* opencv2.framework */; };\n\t\tD2B481B0196F20E400DAEDFF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2B481AF196F20E400DAEDFF /* Foundation.framework */; };\n\t\tD2B481B2196F20EB00DAEDFF /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2B481B1196F20EB00DAEDFF /* Accelerate.framework */; };\n\t\tD2D2165C1B629E8E00489EB9 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D216381B629E8E00489EB9 /* main.swift */; };\n\t\tD2D2165D1B629E8E00489EB9 /* io.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D2163B1B629E8E00489EB9 /* io.swift */; };\n\t\tD2D2165E1B629E8E00489EB9 /* machine_learning.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D2163D1B629E8E00489EB9 /* machine_learning.swift */; };\n\t\tD2D2165F1B629E8E00489EB9 /* m-complex-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D2163F1B629E8E00489EB9 /* m-complex-math.swift */; };\n\t\tD2D216601B629E8E00489EB9 /* m-helper-functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D216401B629E8E00489EB9 /* m-helper-functions.swift */; };\n\t\tD2D216611B629E8E00489EB9 /* m-image.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D216411B629E8E00489EB9 /* m-image.swift */; };\n\t\tD2D216621B629E8E00489EB9 /* m-initing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D216421B629E8E00489EB9 /* m-initing.swift */; };\n\t\tD2D216631B629E8E00489EB9 /* m-matrix.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D216431B629E8E00489EB9 /* m-matrix.swift */; };\n\t\tD2D216641B629E8E00489EB9 /* m-operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D216441B629E8E00489EB9 /* m-operators.swift */; };\n\t\tD2D216651B629E8E00489EB9 /* m-simple-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D216451B629E8E00489EB9 /* m-simple-math.swift */; };\n\t\tD2D2166C1B629E8E00489EB9 /* numbers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D2164D1B629E8E00489EB9 /* numbers.swift */; };\n\t\tD2D2166D1B629E8E00489EB9 /* conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D2164F1B629E8E00489EB9 /* conversion.swift */; };\n\t\tD2D2166E1B629E8E00489EB9 /* machine_learning.mm in Sources */ = {isa = PBXBuildFile; fileRef = D2D216501B629E8E00489EB9 /* machine_learning.mm */; };\n\t\tD2D2166F1B629E8E00489EB9 /* math.m in Sources */ = {isa = PBXBuildFile; fileRef = D2D216511B629E8E00489EB9 /* math.m */; };\n\t\tD2D216701B629E8E00489EB9 /* opencv.mm in Sources */ = {isa = PBXBuildFile; fileRef = D2D216531B629E8E00489EB9 /* opencv.mm */; };\n\t\tD2D216721B629E8E00489EB9 /* operations-and-indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = D2D216551B629E8E00489EB9 /* operations-and-indexing.m */; };\n\t\tD2D216731B629E8E00489EB9 /* ScalarArithmetic-bleed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D216571B629E8E00489EB9 /* ScalarArithmetic-bleed.swift */; };\n\t\tD2D216741B629E8E00489EB9 /* speed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D2165A1B629E8E00489EB9 /* speed.swift */; };\n\t\tD2D216751B629E8E00489EB9 /* tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D2165B1B629E8E00489EB9 /* tests.swift */; };\n\t\tD2D88FCA1D00BB9C0062B7DC /* complex-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D88FC41D00BB9C0062B7DC /* complex-math.swift */; };\n\t\tD2D88FCB1D00BB9C0062B7DC /* helper-functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D88FC51D00BB9C0062B7DC /* helper-functions.swift */; };\n\t\tD2D88FCC1D00BB9C0062B7DC /* initing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D88FC61D00BB9C0062B7DC /* initing.swift */; };\n\t\tD2D88FCD1D00BB9C0062B7DC /* operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D88FC71D00BB9C0062B7DC /* operators.swift */; };\n\t\tD2D88FCE1D00BB9C0062B7DC /* simple-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D88FC81D00BB9C0062B7DC /* simple-math.swift */; };\n\t\tD2D88FCF1D00BB9C0062B7DC /* vector.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D88FC91D00BB9C0062B7DC /* vector.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tD24A854F196D7D73009C18AC /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = /usr/share/man/man1/;\n\t\t\tdstSubfolderSpec = 0;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 1;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\tD24A8551196D7D73009C18AC /* swix */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = swix; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD24D7132199272E600D4B9D8 /* opencv2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = opencv2.framework; path = swix/swix/objc/opencv2.framework; sourceTree = \"<group>\"; };\n\t\tD2B481AF196F20E400DAEDFF /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tD2B481B1196F20EB00DAEDFF /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };\n\t\tD2D216381B629E8E00489EB9 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = \"<group>\"; };\n\t\tD2D2163A1B629E8E00489EB9 /* imshow.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = imshow.py; sourceTree = \"<group>\"; };\n\t\tD2D2163B1B629E8E00489EB9 /* io.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = io.swift; sourceTree = \"<group>\"; };\n\t\tD2D2163D1B629E8E00489EB9 /* machine_learning.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = machine_learning.swift; sourceTree = \"<group>\"; };\n\t\tD2D2163F1B629E8E00489EB9 /* m-complex-math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-complex-math.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D216401B629E8E00489EB9 /* m-helper-functions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-helper-functions.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D216411B629E8E00489EB9 /* m-image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-image.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D216421B629E8E00489EB9 /* m-initing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-initing.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D216431B629E8E00489EB9 /* m-matrix.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-matrix.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D216441B629E8E00489EB9 /* m-operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-operators.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D216451B629E8E00489EB9 /* m-simple-math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-simple-math.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D2164D1B629E8E00489EB9 /* numbers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = numbers.swift; sourceTree = \"<group>\"; };\n\t\tD2D2164F1B629E8E00489EB9 /* conversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = conversion.swift; sourceTree = \"<group>\"; };\n\t\tD2D216501B629E8E00489EB9 /* machine_learning.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = machine_learning.mm; sourceTree = \"<group>\"; };\n\t\tD2D216511B629E8E00489EB9 /* math.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = math.m; sourceTree = \"<group>\"; };\n\t\tD2D216521B629E8E00489EB9 /* OpenCV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenCV.h; sourceTree = \"<group>\"; };\n\t\tD2D216531B629E8E00489EB9 /* opencv.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = opencv.mm; sourceTree = \"<group>\"; };\n\t\tD2D216541B629E8E00489EB9 /* opencv2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = opencv2.framework; sourceTree = \"<group>\"; };\n\t\tD2D216551B629E8E00489EB9 /* operations-and-indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"operations-and-indexing.m\"; sourceTree = \"<group>\"; };\n\t\tD2D216561B629E8E00489EB9 /* swix-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"swix-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\tD2D216571B629E8E00489EB9 /* ScalarArithmetic-bleed.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"ScalarArithmetic-bleed.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D2165A1B629E8E00489EB9 /* speed.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = speed.swift; sourceTree = \"<group>\"; };\n\t\tD2D2165B1B629E8E00489EB9 /* tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = tests.swift; sourceTree = \"<group>\"; };\n\t\tD2D88FC41D00BB9C0062B7DC /* complex-math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = \"complex-math.swift\"; path = \"vector/complex-math.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D88FC51D00BB9C0062B7DC /* helper-functions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = \"helper-functions.swift\"; path = \"vector/helper-functions.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D88FC61D00BB9C0062B7DC /* initing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = initing.swift; path = vector/initing.swift; sourceTree = \"<group>\"; };\n\t\tD2D88FC71D00BB9C0062B7DC /* operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = operators.swift; path = vector/operators.swift; sourceTree = \"<group>\"; };\n\t\tD2D88FC81D00BB9C0062B7DC /* simple-math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = \"simple-math.swift\"; path = \"vector/simple-math.swift\"; sourceTree = \"<group>\"; };\n\t\tD2D88FC91D00BB9C0062B7DC /* vector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = vector.swift; path = vector/vector.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tD24A854E196D7D73009C18AC /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD24D7133199272E600D4B9D8 /* opencv2.framework in Frameworks */,\n\t\t\t\tD2B481B2196F20EB00DAEDFF /* Accelerate.framework in Frameworks */,\n\t\t\t\tD2B481B0196F20E400DAEDFF /* Foundation.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\tD24A8548196D7D73009C18AC = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD24D7132199272E600D4B9D8 /* opencv2.framework */,\n\t\t\t\tD2B481B1196F20EB00DAEDFF /* Accelerate.framework */,\n\t\t\t\tD2B481AF196F20E400DAEDFF /* Foundation.framework */,\n\t\t\t\tD24A8552196D7D73009C18AC /* Products */,\n\t\t\t\tD2D216371B629E8E00489EB9 /* swix */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD24A8552196D7D73009C18AC /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD24A8551196D7D73009C18AC /* swix */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD2D216371B629E8E00489EB9 /* swix */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD2D216381B629E8E00489EB9 /* main.swift */,\n\t\t\t\tD2D216391B629E8E00489EB9 /* swix */,\n\t\t\t);\n\t\t\tpath = swix;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD2D216391B629E8E00489EB9 /* swix */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD2D88FD01D00BBA10062B7DC /* vector */,\n\t\t\t\tD2D2163A1B629E8E00489EB9 /* imshow.py */,\n\t\t\t\tD2D2163B1B629E8E00489EB9 /* io.swift */,\n\t\t\t\tD2D2164D1B629E8E00489EB9 /* numbers.swift */,\n\t\t\t\tD2D2163C1B629E8E00489EB9 /* machine_learning */,\n\t\t\t\tD2D2163E1B629E8E00489EB9 /* matrix */,\n\t\t\t\tD2D2164E1B629E8E00489EB9 /* objc */,\n\t\t\t\tD2D216571B629E8E00489EB9 /* ScalarArithmetic-bleed.swift */,\n\t\t\t\tD2D216581B629E8E00489EB9 /* swift-complex */,\n\t\t\t\tD2D216591B629E8E00489EB9 /* tests */,\n\t\t\t);\n\t\t\tpath = swix;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD2D2163C1B629E8E00489EB9 /* machine_learning */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD2D2163D1B629E8E00489EB9 /* machine_learning.swift */,\n\t\t\t);\n\t\t\tpath = machine_learning;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD2D2163E1B629E8E00489EB9 /* matrix */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD2D2163F1B629E8E00489EB9 /* m-complex-math.swift */,\n\t\t\t\tD2D216401B629E8E00489EB9 /* m-helper-functions.swift */,\n\t\t\t\tD2D216411B629E8E00489EB9 /* m-image.swift */,\n\t\t\t\tD2D216421B629E8E00489EB9 /* m-initing.swift */,\n\t\t\t\tD2D216431B629E8E00489EB9 /* m-matrix.swift */,\n\t\t\t\tD2D216441B629E8E00489EB9 /* m-operators.swift */,\n\t\t\t\tD2D216451B629E8E00489EB9 /* m-simple-math.swift */,\n\t\t\t);\n\t\t\tpath = matrix;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD2D2164E1B629E8E00489EB9 /* objc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD2D2164F1B629E8E00489EB9 /* conversion.swift */,\n\t\t\t\tD2D216501B629E8E00489EB9 /* machine_learning.mm */,\n\t\t\t\tD2D216511B629E8E00489EB9 /* math.m */,\n\t\t\t\tD2D216521B629E8E00489EB9 /* OpenCV.h */,\n\t\t\t\tD2D216531B629E8E00489EB9 /* opencv.mm */,\n\t\t\t\tD2D216541B629E8E00489EB9 /* opencv2.framework */,\n\t\t\t\tD2D216551B629E8E00489EB9 /* operations-and-indexing.m */,\n\t\t\t\tD2D216561B629E8E00489EB9 /* swix-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = objc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD2D216581B629E8E00489EB9 /* swift-complex */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tpath = \"swift-complex\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD2D216591B629E8E00489EB9 /* tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD2D2165A1B629E8E00489EB9 /* speed.swift */,\n\t\t\t\tD2D2165B1B629E8E00489EB9 /* tests.swift */,\n\t\t\t);\n\t\t\tpath = tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD2D88FD01D00BBA10062B7DC /* vector */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD2D88FC41D00BB9C0062B7DC /* complex-math.swift */,\n\t\t\t\tD2D88FC51D00BB9C0062B7DC /* helper-functions.swift */,\n\t\t\t\tD2D88FC61D00BB9C0062B7DC /* initing.swift */,\n\t\t\t\tD2D88FC71D00BB9C0062B7DC /* operators.swift */,\n\t\t\t\tD2D88FC81D00BB9C0062B7DC /* simple-math.swift */,\n\t\t\t\tD2D88FC91D00BB9C0062B7DC /* vector.swift */,\n\t\t\t);\n\t\t\tname = vector;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tD24A8550196D7D73009C18AC /* swix */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D24A8558196D7D73009C18AC /* Build configuration list for PBXNativeTarget \"swix\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD24A854D196D7D73009C18AC /* Sources */,\n\t\t\t\tD24A854E196D7D73009C18AC /* Frameworks */,\n\t\t\t\tD24A854F196D7D73009C18AC /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = swix;\n\t\t\tproductName = swix;\n\t\t\tproductReference = D24A8551196D7D73009C18AC /* swix */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tD24A8549196D7D73009C18AC /* 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 = 0700;\n\t\t\t\tORGANIZATIONNAME = com.scott;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD24A8550196D7D73009C18AC = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tLastSwiftMigration = 0800;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = D24A854C196D7D73009C18AC /* Build configuration list for PBXProject \"swix\" */;\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 = D24A8548196D7D73009C18AC;\n\t\t\tproductRefGroup = D24A8552196D7D73009C18AC /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tD24A8550196D7D73009C18AC /* swix */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tD24A854D196D7D73009C18AC /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD2D88FCA1D00BB9C0062B7DC /* complex-math.swift in Sources */,\n\t\t\t\tD2D216641B629E8E00489EB9 /* m-operators.swift in Sources */,\n\t\t\t\tD2D216721B629E8E00489EB9 /* operations-and-indexing.m in Sources */,\n\t\t\t\tD2D216631B629E8E00489EB9 /* m-matrix.swift in Sources */,\n\t\t\t\tD2D2166C1B629E8E00489EB9 /* numbers.swift in Sources */,\n\t\t\t\tD2D216731B629E8E00489EB9 /* ScalarArithmetic-bleed.swift in Sources */,\n\t\t\t\tD2D216741B629E8E00489EB9 /* speed.swift in Sources */,\n\t\t\t\tD2D2165F1B629E8E00489EB9 /* m-complex-math.swift in Sources */,\n\t\t\t\tD2D88FCC1D00BB9C0062B7DC /* initing.swift in Sources */,\n\t\t\t\tD2D216611B629E8E00489EB9 /* m-image.swift in Sources */,\n\t\t\t\tD2D2166D1B629E8E00489EB9 /* conversion.swift in Sources */,\n\t\t\t\tD2D216601B629E8E00489EB9 /* m-helper-functions.swift in Sources */,\n\t\t\t\tD2D2165C1B629E8E00489EB9 /* main.swift in Sources */,\n\t\t\t\tD2D88FCE1D00BB9C0062B7DC /* simple-math.swift in Sources */,\n\t\t\t\tD2D88FCB1D00BB9C0062B7DC /* helper-functions.swift in Sources */,\n\t\t\t\tD2D216701B629E8E00489EB9 /* opencv.mm in Sources */,\n\t\t\t\tD2D216621B629E8E00489EB9 /* m-initing.swift in Sources */,\n\t\t\t\tD2D2166E1B629E8E00489EB9 /* machine_learning.mm in Sources */,\n\t\t\t\tD2D2165D1B629E8E00489EB9 /* io.swift in Sources */,\n\t\t\t\tD2D88FCD1D00BB9C0062B7DC /* operators.swift in Sources */,\n\t\t\t\tD2D2165E1B629E8E00489EB9 /* machine_learning.swift in Sources */,\n\t\t\t\tD2D2166F1B629E8E00489EB9 /* math.m in Sources */,\n\t\t\t\tD2D216651B629E8E00489EB9 /* m-simple-math.swift in Sources */,\n\t\t\t\tD2D88FCF1D00BB9C0062B7DC /* vector.swift in Sources */,\n\t\t\t\tD2D216751B629E8E00489EB9 /* tests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\tD24A8556196D7D73009C18AC /* 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\tCOPY_PHASE_STRIP = 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_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\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD24A8557196D7D73009C18AC /* 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\tCOPY_PHASE_STRIP = YES;\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_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\tMACOSX_DEPLOYMENT_TARGET = 10.9;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD24A8559196D7D73009C18AC /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\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)/swix/swix/**\",\n\t\t\t\t);\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\tSWIFT_OBJC_BRIDGING_HEADER = \"swix/swix/objc/swix-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD24A855A196D7D73009C18AC /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\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)/swix/swix/**\",\n\t\t\t\t);\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\tSWIFT_OBJC_BRIDGING_HEADER = \"swix/swix/objc/swix-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tD24A854C196D7D73009C18AC /* Build configuration list for PBXProject \"swix\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD24A8556196D7D73009C18AC /* Debug */,\n\t\t\t\tD24A8557196D7D73009C18AC /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD24A8558196D7D73009C18AC /* Build configuration list for PBXNativeTarget \"swix\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD24A8559196D7D73009C18AC /* Debug */,\n\t\t\t\tD24A855A196D7D73009C18AC /* 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 = D24A8549196D7D73009C18AC /* Project object */;\n}\n"
  },
  {
    "path": "swix/swix.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:swix.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "swix.podspec",
    "content": "#\n#  Be sure to run `pod spec lint swix.podspec' to ensure this is a\n#  valid spec and to remove all comments including this before submitting the spec.\n#\n#  To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html\n#  To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/\n#\n\nPod::Spec.new do |s|\n\n  # ―――  Spec Metadata  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #\n  #\n  #  These will help people to find your library, and whilst it\n  #  can feel like a chore to fill in it's definitely to your advantage. The\n  #  summary should be tweet-length, and the description more in depth.\n  #\n\n  s.name         = \"swix\"\n  s.version      = \"0.0.1\"\n  s.summary      = \"Swift Matrix and Machine Learning Library\"\n\n  s.description  = <<-DESC\n                        Converting from Python/Matlab to C was (and is) a pain.\n                        This library aims to ease that conversion, and almost\n                        provides a line for line conversion.\n                   DESC\n\n  s.homepage     = \"https://github.com/scottsievert/swix\"\n  s.license      = \"MIT\"\n  # s.license      = { :type => \"MIT\", :file => \"LICENSE\" }\n\n\n  # ――― Author Metadata  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #\n  #\n  #  Specify the authors of the library, with email addresses. Email addresses\n  #  of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also\n  #  accepts just a name if you'd rather not provide an email address.\n  #\n  #  Specify a social_media_url where others can refer to, for example a twitter\n  #  profile URL.\n  #\n  \n  s.author             = { \"scottsievert\" => \"sieve121@umn.edu\" }\n  s.social_media_url   = \"http://twitter.com/stsievert\"\n\n  # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #\n  #\n  #  If this Pod runs only on iOS or OS X, then specify the platform and\n  #  the deployment target. You can optionally include the target after the platform.\n  #\n\n  s.platform     = :ios\n  s.platform     = :ios, \"8.0\"\n\n  # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #\n  #\n  #  Specify the location from where the source should be retrieved.\n  #  Supports git, hg, bzr, svn and HTTP.\n  #\n\n  s.source       = { :git => \"https://github.com/scottsievert/swix.git\", :tag => \"v0.0.1\" }\n\n\n  # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #\n  #\n  #  CocoaPods is smart about how it includes source code. For source files\n  #  giving a folder will include any h, m, mm, c & cpp files. For header\n  #  files it will include any header in the folder.\n  #  Not including the public_header_files will make all headers public.\n  #\n\n  s.source_files  = \"swix/swix/swix/*\"\n  # s.exclude_files = \"swix/swix/swix/main.swift/Exclude\"\n\n  # s.public_header_files = \"Classes/**/*.h\"\n\n\n  # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #\n  #\n  #  A list of resources included with the Pod. These are copied into the\n  #  target bundle with a build phase script. Anything else will be cleaned.\n  #  You can preserve files from being cleaned, please don't preserve\n  #  non-essential files like tests, examples and documentation.\n  #\n\n  # s.resource  = \"icon.png\"\n  # s.resources = \"Resources/*.png\"\n\n  # s.preserve_paths = \"FilesToSave\", \"MoreFilesToSave\"\n\n\n  # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #\n  #\n  #  Link your library with frameworks, or libraries. Libraries do not include\n  #  the lib prefix of their name.\n  #\n\n  s.framework  = \"Accelerate\"\n\n  # s.library   = \"iconv\"\n  # s.libraries = \"iconv\", \"xml2\"\n\n\n  # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #\n  #\n  #  If your library depends on compiler flags you can set them in the xcconfig hash\n  #  where they will only apply to your library. If you depend on other Podspecs\n  #  you can include multiple dependencies to ensure it works.\n\n  s.requires_arc = true\n\n  # s.xcconfig = { \"HEADER_SEARCH_PATHS\" => \"$(SDKROOT)/usr/include/libxml2\" }\n  # s.dependency \"JSONKit\", \"~> 1.4\"\n\nend\n"
  },
  {
    "path": "swix_ios_app/README.md",
    "content": "## Beware!\n* This iOS app was developed under Xcode 7 GM\n* The version of swix is not actively developed (hence not current).\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  swix_ios_app\n//\n//  Created by Scott Sievert on 9/13/15.\n//  Copyright © 2015 com.scott. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n\n    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {\n        // Override point for customization after application launch.\n        return true\n    }\n\n    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    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    }\n\n    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    }\n\n    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    }\n\n    func applicationWillTerminate(application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n\n}\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/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": "swix_ios_app/swix_ios_app/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=\"8150\" systemVersion=\"15A204g\" 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=\"8122\"/>\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                        <animations/>\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": "swix_ios_app/swix_ios_app/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=\"9531\" systemVersion=\"14F27\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"9529\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"swix_ios_app\" customModuleProvider=\"target\" 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                        <subviews>\n                            <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Seo-2C-jiJ\">\n                                <rect key=\"frame\" x=\"103\" y=\"113\" width=\"240\" height=\"128\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"240\" id=\"A9c-nK-gEq\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"128\" id=\"hJg-Qe-gwK\"/>\n                                </constraints>\n                            </imageView>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" misplaced=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FJF-Go-5Uj\">\n                                <rect key=\"frame\" x=\"195\" y=\"285\" width=\"32\" height=\"30\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"46\" id=\"7Qb-Ig-lel\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"TYY-Dc-wEL\"/>\n                                </constraints>\n                                <state key=\"normal\" title=\"rand\"/>\n                                <connections>\n                                    <action selector=\"changeImage:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"X62-5H-fH4\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstItem=\"Seo-2C-jiJ\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leadingMargin\" constant=\"83\" id=\"1su-EM-twv\"/>\n                            <constraint firstItem=\"FJF-Go-5Uj\" firstAttribute=\"top\" secondItem=\"Seo-2C-jiJ\" secondAttribute=\"bottom\" constant=\"44\" id=\"TQB-Cv-uXE\"/>\n                            <constraint firstItem=\"FJF-Go-5Uj\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leadingMargin\" constant=\"168\" id=\"bH3-sC-4wz\"/>\n                            <constraint firstItem=\"Seo-2C-jiJ\" firstAttribute=\"top\" secondItem=\"y3c-jy-aDJ\" secondAttribute=\"bottom\" constant=\"93\" id=\"nKu-DM-423\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"button\" destination=\"FJF-Go-5Uj\" id=\"cWS-Gy-XiX\"/>\n                        <outlet property=\"imageView\" destination=\"Seo-2C-jiJ\" id=\"plo-Yd-c8h\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/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": "swix_ios_app/swix_ios_app/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  swix_ios_app\n//\n//  Created by Scott Sievert on 9/13/15.\n//  Copyright © 2015 com.scott. All rights reserved.\n//\n\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    @IBOutlet weak var imageView: UIImageView!\n    @IBOutlet weak var button: UIButton!\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do any additional setup after loading the view, typically from a nib.\n        var img = UIImage(named: \"space_shuttle.png\")!\n        self.imageView.image = img\n        \n\n    }\n    @IBAction func changeImage(sender: AnyObject) {\n        var N = 500\n        var x = 255*rand((N, N))\n        var img2 = RGBAToUIImage(x, g: x, b: x, a: 255*ones(x.shape))\n        \n        self.imageView.image = img2\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n\n\n}\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/ScalarArithmetic-bleed.swift",
    "content": "\n// from https://github.com/seivan/ScalarArithmetic/\n// bleeding as of 2014-11-8. Commit on Aug. 15th\n// commented out because compile errors. not critical to this release.\n\nimport Darwin\nimport CoreGraphics\n\n\nprotocol FloatingPointMathType {\n//  var acos:Self  {get}\n//  var asin:Self  {get}\n//  var atan:Self  {get}\n//  func atan2(x:Self) -> Self\n//  var cos:Self   {get}\n//  var sin:Self   {get}\n//  var tan:Self   {get}\n//  var exp:Self   {get}\n//  var exp2:Self  {get}\n//  var log:Self   {get}\n//  var log10:Self {get}\n//  var log2:Self  {get}\n//  func pow(exponent:Self) -> Self\n//  var sqrt:Self  {get}\n}\n\n\nextension Double :  FloatingPointMathType {\n//  var abs:Double  { return Double.abs(self)   }\n//  var acos:Double { return Darwin.acos(self)  }\n//  var asin:Double { return Darwin.asin(self)  }\n//  var atan:Double { return Darwin.atan(self)  }\n//  func atan2(x:Double) -> Double { return Darwin.atan2(self,x) }\n//  var cos:Double  { return Darwin.cos(self)   }\n//  var sin:Double  { return Darwin.sin(self)   }\n//  var tan:Double  { return Darwin.tan(self)   }\n//  var exp:Double  { return Darwin.exp(self)   }\n//  var exp2:Double { return Darwin.exp2(self)  }\n//  var log:Double  { return Darwin.log(self)   }\n//  var log10:Double{ return Darwin.log10(self) }\n//  var log2:Double { return Darwin.log2(self)  }\n//  func pow(exponent:Double)-> Double { return Darwin.pow(self, exponent) }\n//  var sqrt:Double { return Darwin.sqrt(self)  }\n  func __conversion() -> CGFloat { return CGFloat(self) }\n}\n\n\n\nprotocol ScalarFloatingPointType {\n  var toDouble:Double { get }\n  init(_ value:Double)\n}\n\nextension CGFloat : ScalarFloatingPointType, FloatingPointMathType {\n  var toDouble:Double  { return Double(self)      }\n//  var abs:CGFloat      { return self.abs  }\n//  var acos:CGFloat     { return Darwin.acos(self) }\n//  var asin:CGFloat     { return Darwin.asin(self) }\n//  var atan:CGFloat     { return Darwin.atan(self) }\n//  func atan2(x:CGFloat) -> CGFloat { return Darwin.atan2(self, x) }\n//  var cos:CGFloat      { return Darwin.cos(self)  }\n//  var sin:CGFloat      { return Darwin.sin(self)  }\n//  var tan:CGFloat      { return Darwin.tan(self)  }\n//  var exp:CGFloat      { return Darwin.exp(self)  }\n//  var exp2:CGFloat     { return Darwin.exp2(self) }\n//  var log:CGFloat      { return Darwin.log(self)  }\n//  var log10:CGFloat    { return Darwin.log10(self)}\n//  var log2:CGFloat     { return Darwin.log2(self)}\n//  func pow(exponent:CGFloat)-> CGFloat { return Darwin.pow(self, exponent) }\n//  var sqrt:CGFloat     { return Darwin.sqrt(self) }\n  func __conversion() -> Double { return Double(self) }\n}\n\nextension Float : ScalarFloatingPointType { var toDouble:Double { return Double(self)      } }\n\nprotocol ScalarIntegerType : ScalarFloatingPointType {\n   var toInt:Int { get }\n}\n\nextension Int : ScalarIntegerType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n  var toInt:Int { return Int(self) }\n\n}\nextension Int16 : ScalarIntegerType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n  var toInt:Int { return Int(self) }\n\n}\nextension Int32 : ScalarIntegerType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n  var toInt:Int { return Int(self) }\n\n}\nextension Int64 : ScalarIntegerType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n  var toInt:Int { return Int(self) }\n\n}\nextension UInt : ScalarFloatingPointType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n\n}\nextension UInt16  : ScalarFloatingPointType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n\n}\nextension UInt32 : ScalarFloatingPointType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n}\nextension UInt64 : ScalarFloatingPointType {\n  var toDouble:Double { return Double(self) }\n  func __conversion() -> Double { return Double(self) }\n\n}\n\n\n\n\n\nfunc + <T:ScalarIntegerType>(lhs:T, rhs:Int) -> Int { return lhs + rhs }\nfunc + <T:ScalarIntegerType>(lhs:Int, rhs:T) -> Int { return lhs + rhs.toInt }\n\nfunc - <T:ScalarIntegerType>(lhs:T, rhs:Int) -> Int { return lhs.toInt - rhs }\nfunc - <T:ScalarIntegerType>(lhs:Int, rhs:T) -> Int { return lhs - rhs.toInt }\n\nfunc * <T:ScalarIntegerType>(lhs:T, rhs:Int) -> Int { return lhs.toInt * rhs }\nfunc * <T:ScalarIntegerType>(lhs:Int, rhs:T) -> Int { return lhs * rhs.toInt }\n\nfunc / <T:ScalarIntegerType>(lhs:T, rhs:Int) -> Int { return lhs.toInt / rhs }\nfunc / <T:ScalarIntegerType>(lhs:Int, rhs:T) -> Int { return lhs / rhs.toInt }\n\n\n\n//Equality T<===>T\nfunc == <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:U,rhs:T) -> Bool { return (lhs.toDouble == rhs.toDouble) }\nfunc == <T:ScalarFloatingPointType> (lhs:Double,rhs:T) -> Bool { return (lhs == rhs.toDouble) }\nfunc == <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs.toDouble == rhs) }\n\nfunc != <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:U,rhs:T) -> Bool { return (lhs.toDouble == rhs.toDouble) == false }\nfunc != <T:ScalarFloatingPointType> (lhs:Double,rhs:T) -> Bool { return (lhs == rhs.toDouble) == false }\nfunc != <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs.toDouble == rhs) == false }\n\nfunc <= <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:T,rhs:U) -> Bool { return (lhs.toDouble <= rhs.toDouble) }\nfunc <= <T:ScalarFloatingPointType> (lhs:Double, rhs:T) -> Bool { return (lhs <= rhs.toDouble) }\nfunc <= <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs.toDouble <= rhs) }\n\nfunc < <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:T,rhs:U) -> Bool { return (lhs.toDouble <  rhs.toDouble) }\nfunc < <T:ScalarFloatingPointType> (lhs:Double, rhs:T) -> Bool { return (lhs <  rhs.toDouble) }\nfunc < <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs.toDouble <  rhs) }\n\nfunc >  <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:T,rhs:U) -> Bool { return (lhs <= rhs) == false }\nfunc >  <T:ScalarFloatingPointType> (lhs:Double, rhs:T) -> Bool { return (lhs <= rhs) == false}\nfunc >  <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs <= rhs) == false }\n\nfunc >= <T:ScalarFloatingPointType, U:ScalarFloatingPointType> (lhs:T,rhs:U) -> Bool { return (lhs < rhs) == false }\nfunc >= <T:ScalarFloatingPointType> (lhs:Double, rhs:T) -> Bool { return (lhs < rhs) == false }\nfunc >= <T:ScalarFloatingPointType> (lhs:T,rhs:Double) -> Bool { return (lhs < rhs) == false }\n\n\n\n//SUBTRACTION\nfunc - <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:U, rhs:T) -> Double  {return (lhs.toDouble - rhs.toDouble) }\nfunc - <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> T  { return T(lhs - rhs.toDouble) }\nfunc - <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> T  { return T(lhs.toDouble - rhs) }\nfunc - <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> Double  { return (lhs - rhs.toDouble) }\nfunc - <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> Double  { return (lhs.toDouble - rhs) }\nfunc -= <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(inout lhs:T, rhs:U) { lhs = T(lhs.toDouble - rhs.toDouble) }\nfunc -= <T:ScalarFloatingPointType>(inout lhs:Double, rhs:T)  { lhs = lhs - rhs.toDouble }\n\n//ADDITION\nfunc + <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:U, rhs:T) -> Double  {return (lhs.toDouble + rhs.toDouble) }\nfunc + <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> T  { return T(lhs + rhs.toDouble) }\nfunc + <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> T  { return T(lhs.toDouble + rhs) }\nfunc + <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> Double  { return (lhs + rhs.toDouble) }\nfunc + <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> Double  { return (lhs.toDouble + rhs) }\nfunc += <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(inout lhs:T, rhs:U) { lhs = T(lhs.toDouble + rhs.toDouble) }\nfunc += <T:ScalarFloatingPointType>(inout lhs:Double, rhs:T)  { lhs = lhs + rhs.toDouble }\n\n//MULTIPLICATION\nfunc * <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:U, rhs:T) -> Double  {return (lhs.toDouble * rhs.toDouble) }\nfunc * <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> T  { return T(lhs * rhs.toDouble) }\nfunc * <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> T  { return T(lhs.toDouble * rhs) }\nfunc * <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> Double  { return (lhs * rhs.toDouble) }\nfunc * <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> Double  { return (lhs.toDouble * rhs) }\nfunc *= <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(inout lhs:T, rhs:U) { lhs = T(lhs.toDouble * rhs.toDouble) }\nfunc *= <T:ScalarFloatingPointType>(inout lhs:Double, rhs:T)  { lhs = lhs * rhs.toDouble }\n\n//DIVISION\nfunc / <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(lhs:U, rhs:T) -> Double  {return (lhs.toDouble / rhs.toDouble) }\nfunc / <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> T  { return T(lhs / rhs.toDouble) }\nfunc / <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> T  { return T(lhs.toDouble / rhs) }\nfunc / <T:ScalarFloatingPointType>(lhs:Double, rhs:T) -> Double  { return (lhs / rhs.toDouble) }\nfunc / <T:ScalarFloatingPointType>(lhs:T, rhs:Double) -> Double  { return (lhs.toDouble / rhs) }\nfunc /= <T:ScalarFloatingPointType, U:ScalarFloatingPointType>(inout lhs:T, rhs:U) { lhs = T(lhs.toDouble / rhs.toDouble) }\nfunc /= <T:ScalarFloatingPointType>(inout lhs:Double, rhs:T)  { lhs = lhs / rhs.toDouble }\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/imshow.py",
    "content": "from __future__ import division\nimport pylab as p\nfrom pandas import read_csv\nimport sys\n\n\"\"\"\nUsage: python imshow.py filename.png shouldSave shouldShow\n\"\"\"\n\ndef str2bool(string):\n    \"\"\" \n    Only true if string is one of \"yes\", \"true\", \"t\", \"1\". Returns false\n    otherwise.\n    \"\"\"\n    return string.lower() in (\"yes\", \"true\", \"t\", \"1\")\n\nfilename = sys.argv[1]\nshouldSave = str2bool(sys.argv[2])\nshouldShow = str2bool(sys.argv[3])\n\nx = read_csv(\"temp.csv\", header=None)\nx = p.asarray(x)\n\np.figure()\np.imshow(x, interpolation='nearest')\np.tight_layout()\np.colorbar()\n\nif shouldShow: p.show()\nif shouldSave: p.savefig('../'+filename, dpi=300)\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/io.swift",
    "content": "//\n//  io.swift\n//  swix\n//\n//  Created by Scott Sievert on 11/7/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// ndarray binary\nfunc write_binary(x:ndarray, filename:String, prefix:String=S2_PREFIX){\n    let N = x.n\n    let data = NSData(bytes:!x, length:N*sizeof(Double))\n    data.writeToFile(prefix+\"../\"+filename, atomically: false)\n}\nfunc read_binary(filename:String, prefix:String=S2_PREFIX) -> ndarray{\n    let read = NSData(contentsOfFile: prefix+\"../\"+filename)\n    let l:Int! = read?.length\n    let sD:Int = sizeof(Double)\n    let count = (l.double / sD.double)\n    \n    let y = zeros(count.int)\n    read?.getBytes(!y, length: count.int*sizeof(Double))\n    return y\n}\n\n// matrix binary\nfunc write_binary(x:matrix, filename:String, prefix:String=S2_PREFIX){\n    let y = concat(array(x.shape.0.double, x.shape.1.double), y: x.flat)\n    write_binary(y, filename:filename, prefix:prefix)\n}\nfunc read_binary(filename:String, prefix:String=S2_PREFIX)->matrix{\n    var a:ndarray = read_binary(filename, prefix:prefix)\n    let (w, h) = (a[0], a[1])\n    return reshape(a[2..<a.n], shape: (w.int,h.int))\n}\n\n\n// ndarray csv\nfunc write_csv(x:ndarray, filename:String, prefix:String=S2_PREFIX){\n    // write the array to CSV\n    var seperator=\",\"\n    var str = \"\"\n    for i in 0..<x.n{\n        seperator = i == x.n-1 ? \"\" : \",\"\n        str += String(format: \"\\(x[i])\"+seperator)\n    }\n    str += \"\\n\"\n    do {\n        try str.writeToFile(prefix+\"../\"+filename, atomically: false, encoding: NSUTF8StringEncoding)\n    } catch {\n        Swift.print(\"File probably wasn't recognized\")\n    }\n    \n}\nfunc read_csv(filename:String, prefix:String=S2_PREFIX) -> ndarray{\n    var x: String?\n    do {\n        x = try String(contentsOfFile: prefix+\"../\"+filename, encoding: NSUTF8StringEncoding)\n    } catch _ {\n        x = nil\n    }\n    var array:[Double] = []\n    var columns:Int = 0\n    var z = x!.componentsSeparatedByString(\",\")\n    columns = 0\n    for i in 0..<z.count{\n        let num = z[i]\n        array.append(num.doubleValue)\n        columns += 1\n    }\n    var done = zeros(1 * columns)\n    done.grid = array\n    return done\n}\n\n// matrix csv\nfunc read_csv(filename:String, prefix:String=S2_PREFIX) -> matrix{\n    var x: String?\n    do {\n        x = try String(contentsOfFile: prefix+\"../\"+filename, encoding: NSUTF8StringEncoding)\n    } catch _ {\n        x = nil\n    }\n    var y = x!.componentsSeparatedByString(\"\\n\")\n    let rows = y.count-1\n    var array:[Double] = []\n    var columns:Int = 0\n    for i in 0..<rows{\n        let z = y[i].componentsSeparatedByString(\",\")\n        columns = 0\n        for num in z{\n            array.append(num.doubleValue)\n            columns += 1\n        }\n    }\n    var done = zeros((rows, columns))\n    done.flat.grid = array\n    return done\n}\nfunc write_csv(x:matrix, filename:String, prefix:String=S2_PREFIX){\n    var seperator=\",\"\n    var str = \"\"\n    for i in 0..<x.shape.0{\n        for j in 0..<x.shape.1{\n            seperator = j == x.shape.1-1 ? \"\" : \",\"\n            str += String(format: \"\\(x[i, j])\"+seperator)\n        }\n        str += \"\\n\"\n    }\n    do {\n        try str.writeToFile(prefix+\"../\"+filename, atomically: false, encoding: NSUTF8StringEncoding)\n    } catch {\n        Swift.print(\"File probably wasn't recognized\")\n    }\n}\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/machine_learning/machine_learning.swift",
    "content": "//\n//  svm.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/16/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\nclass SVM {\n    // swift --> objc --> objc++ --> c++\n    var cvsvm:cvSVM;\n    var svm_type:String\n    var kernel_type:String\n    var N:Int\n    var M:Int\n    init(){\n        self.cvsvm = cvSVM()\n        \n        \n        self.N = -1\n        self.M = -1\n        \n        // with linear svc results, we closely match (and do slightly better than) sk-learn\n        self.svm_type = \"C_SVC\"\n        self.kernel_type = \"LINEAR\"\n        setParams(svm_type, kernel_type:kernel_type)\n    }\n    func setParams(svm_type:String, kernel_type:String, nu:Float=0.5){\n        // kernel: LINEAR, SIGMOID\n        // svm_type: C_SVC, ONE_CLASS, NU_SVC, NU_SVR\n        \n        // careful: NU_SVR and SIGMOID throws an exception error\n        self.cvsvm.setParams(svm_type.nsstring as String, kernel:kernel_type.nsstring as String, nu:nu.cfloat)\n    }\n    func train(responses: matrix, _ targets: ndarray){\n        // convert matrix2d to NSArray\n        self.M = responses.shape.0\n        self.N = responses.shape.1\n        self.cvsvm.train(!responses, targets:!targets, m:self.M.cint, n:self.N.cint)\n    }\n    func predict(response: ndarray) -> Double{\n        assert(self.N == response.count, \"Sizes of input arguments do not match: predict.count != trained.count. The varianbles you're trying to predict a result from must match variables you trained off of.\")\n        let tp = self.cvsvm.predict(!response, n:self.N.cint)\n        return tp.double\n    }\n    func predict(responses: matrix) -> ndarray{\n        let y = zeros(responses.shape.0)\n        assert(self.N == responses.shape.1, \"Sizes must match\")\n        self.cvsvm.predict(!responses, into:!y, m:responses.shape.0.cint, n:responses.shape.1.cint);\n        return y\n    }\n}\nclass kNearestNeighbors{\n    // finds the nearest neighbor over all points. if want to change, dive into knn.mm and change `int k = cvknn.get_max_k();` in `predict(...)`\n    var T:Double\n    var knn:kNN;\n    var N:Int; // variables\n    var M:Int; // responses\n    init(){\n        assert(false, \"Careful! My simple tests failed but it looks like it should work.\")\n        self.T = 1\n        self.knn = kNN()\n        self.N = -1\n        self.M = -1\n    }\n    func train(responses: matrix, targets: ndarray){\n        self.M = responses.shape.0\n        self.N = responses.shape.1\n        \n        self.knn.train(!responses, targets: !targets, m:self.M.cint, n:self.N.cint)\n        \n    }\n    func predict(x: ndarray, k: Int) -> Double{\n        assert(self.N == x.count, \"Sizes of input arguments do not match: predict.count != trained.count. The varianbles you're trying to predict a result from must match variables you trained off of.\")\n        assert(k <= 32, \"k <= 32 for performance reasons enforced by OpenCV.\")\n        let result = self.knn.predict(!x, n:x.n.cint, k:k.cint)\n        return result.double;\n    }\n}\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/matrix/m-complex-math.swift",
    "content": "//\n//  twoD-complex-math.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/15/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Swift\nimport Accelerate\n\nfunc rank(x:matrix)->Double{\n    let (_, S, _) = svd(x, compute_uv:false)\n    let m:Double = (x.shape.0 < x.shape.1 ? x.shape.1 : x.shape.0).double\n    let tol = S.max() * m * DOUBLE_EPSILON\n    return sum(S > tol)\n}\nfunc dot(x: matrix, y: matrix) -> matrix{\n    return x.dot(y)\n}\nfunc dot(A: matrix, x: ndarray) -> ndarray{\n    return A.dot(x)\n}\nfunc svd(x: matrix, compute_uv:Bool=true) -> (matrix, ndarray, matrix){\n    let (m, n) = x.shape\n    let nS = m < n ? m : n // number singular values\n    let sigma = zeros(nS)\n    let vt = zeros((n,n))\n    var u = zeros((m,m))\n\n    var xx = zeros_like(x)\n    xx.flat = x.flat\n    xx = xx.T\n    let c_uv:CInt = compute_uv==true ? 1 : 0\n    svd_objc(!xx, m.cint, n.cint, !sigma, !vt, !u, c_uv)\n    \n    // to get the svd result to match Python\n    let v = transpose(vt)\n    u = transpose(u)\n\n    return (u, sigma, v)\n}\nfunc pinv(x:matrix)->matrix{\n    var (u, s, v) = svd(x)\n    let m = u.shape.0\n    let n = v.shape.1\n    let ma = m < n ? n : m\n    let cutoff = DOUBLE_EPSILON * ma.double * max(s)\n    let i = s > cutoff\n    let ipos = argwhere(i)\n    s[ipos] = 1 / s[ipos]\n    let ineg = argwhere(1-i)\n    s[ineg] = zeros_like(ineg)\n    var z = zeros((n, m))\n    z[\"diag\"] = s\n    let res = v.T.dot(z).dot(u.T)\n    return res\n}\nfunc inv(x: matrix) -> matrix{\n    assert(x.shape.0 == x.shape.1, \"To take an inverse of a matrix, the matrix must be square. If you want the inverse of a rectangular matrix, use psuedoinverse.\")\n    let y = x.copy()\n    let (M, N) = x.shape\n    \n    var ipiv:Array<__CLPK_integer> = Array(count:M*M, repeatedValue:0)\n    var lwork:__CLPK_integer = __CLPK_integer(N*N)\n//    var work:[CDouble] = [CDouble](count:lwork, repeatedValue:0)\n    var work = [CDouble](count: Int(lwork), repeatedValue: 0.0)\n    var info:__CLPK_integer=0\n    var nc = __CLPK_integer(N)\n    dgetrf_(&nc, &nc, !y, &nc, &ipiv, &info)\n    dgetri_(&nc, !y, &nc, &ipiv, &work, &lwork, &info)\n    return y\n}\nfunc solve(A: matrix, b: ndarray) -> ndarray{\n    let (m, n) = A.shape\n    assert(b.n == m, \"Ax = b, A.rows == b.n. Sizes must match which makes sense mathematically\")\n    assert(n == m, \"Matrix must be square -- dictated by OpenCV\")\n    let x = zeros(n)\n    CVWrapper.solve(!A, b:!b, x:!x, m:m.cint, n:n.cint)\n    return x\n}\nfunc eig(x: matrix)->ndarray{\n    // matrix, value, vectors\n    let (m, n) = x.shape\n    assert(m == n, \"Input must be square\")\n    \n    let value_real = zeros(m)\n    let value_imag = zeros(n)\n    var vector = zeros((n,n))\n    \n    var work:[Double] = Array(count:n*n, repeatedValue:0.0)\n    var lwork = __CLPK_integer(4 * n)\n    var info = __CLPK_integer(1)\n    \n    // don't compute right or left eigenvectors\n    let job = \"N\"\n    var jobvl = (job.cStringUsingEncoding(NSUTF8StringEncoding)?[0])!\n    var jobvr = (job.cStringUsingEncoding(NSUTF8StringEncoding)?[0])!\n    \n    work[0] = Double(lwork)\n    var nc = __CLPK_integer(n)\n    dgeev_(&jobvl, &jobvr, &nc, !x, &nc,\n        !value_real, !value_imag, !vector, &nc, !vector, &nc,\n        &work, &lwork, &info)\n    \n    vector = vector.T\n    \n    return value_real\n}\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/matrix/m-helper-functions.swift",
    "content": "//\n//  helper-functions.swift\n//  swix\n//\n//  Created by Scott Sievert on 8/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// NORMs\nfunc norm(x:matrix, ord:String=\"assumed to be 'fro' for Frobenius\")->Double{\n    if ord == \"fro\" {return norm(x.flat, ord:2)}\n    assert(false, \"Norm type assumed to be \\\"fro\\\" for Forbenius norm!\")\n    return -1\n}\nfunc norm(x:matrix, ord:Double=2)->Double{\n    if      ord ==  inf {return max(sum(abs(x), axis:1))}\n    else if ord == -inf {return min(sum(abs(x), axis:1))}\n    else if ord ==  1   {return max(sum(abs(x), axis:0))}\n    else if ord == -1   {return min(sum(abs(x), axis:0))}\n    else if ord ==  2 {\n        // compute only the largest singular value?\n        let (_, s, _) = svd(x, compute_uv:false)\n        return s[0]\n    }\n    else if ord == -2 {\n        // compute only the smallest singular value?\n        let (_, s, _) = svd(x, compute_uv:false)\n        return s[-1]\n    }\n    \n    assert(false, \"Invalid norm for matrices\")\n    return -1\n}\n\nfunc det(x:matrix)->Double{\n    var result:CDouble = 0.0\n    CVWrapper.det(!x, n:x.shape.0.cint, m:x.shape.1.cint, result:&result)\n    return result\n}\n\n// basics\nfunc argwhere(idx: matrix) -> ndarray{\n    return argwhere(idx.flat)\n}\nfunc flipud(x:matrix)->matrix{\n    let y = x.copy()\n    CVWrapper.flip(!x, into:!y, how:\"ud\", m:x.shape.0.cint, n:x.shape.1.cint)\n    return y\n}\nfunc fliplr(x:matrix)->matrix{\n    let y = x.copy()\n    CVWrapper.flip(!x, into:!y, how:\"lr\", m:x.shape.0.cint, n:x.shape.1.cint)\n    return y\n}\nfunc rot90(x:matrix, k:Int=1)->matrix{\n    // k is assumed to be less than or equal to 3\n    let y = x.copy()\n    if k == 1 {return fliplr(x).T}\n    if k == 2 {return flipud(fliplr(y))}\n    if k == 3 {return flipud(x).T}\n    assert(false, \"k is assumed to satisfy 1 <= k <= 3\")\n    return y\n}\n\n// modifying matrices, modifying equations\nfunc transpose (x: matrix) -> matrix{\n    let m = x.shape.1\n    let n = x.shape.0\n    let y = zeros((m, n))\n    vDSP_mtransD(!x, 1.stride, !y, 1.stride, m.length, n.length)\n    return y\n}\nfunc kron(A:matrix, B:matrix)->matrix{\n    // an O(n^4) operation!\n    func assign_kron_row(A:matrix, B:matrix,inout C:matrix, p:Int, m:Int, m_max:Int){\n        var row = (m+0)*(p+0) + p-0\n        row = m_max*m + 1*p\n        \n        let i = arange(B.shape.1 * A.shape.1)\n        let n1 = arange(A.shape.1)\n        let q1 = arange(B.shape.1)\n        let (n, q) = meshgrid(n1, y: q1)\n        C[row, i] = A[m, n.flat] * B[p, q.flat]\n    }\n    var C = zeros((A.shape.0*B.shape.0, A.shape.1*B.shape.1))\n    for p in 0..<A.shape.1{\n        for m in 0..<B.shape.1{\n            assign_kron_row(A, B: B, C: &C, p: p, m: m, m_max: A.shape.1)\n        }\n    }\n    \n    return C\n}\n\nfunc tril(x: matrix) -> ndarray{\n    let (m, n) = x.shape\n    let (mm, nn) = meshgrid(arange(m), y: arange(n))\n    var i = mm - nn\n    let j = (i < 0+S2_THRESHOLD)\n    i[argwhere(j)] <- 0\n    i[argwhere(1-j)] <- 1\n    return argwhere(i)\n}\nfunc triu(x: matrix)->ndarray{\n    let (m, n) = x.shape\n    let (mm, nn) = meshgrid(arange(m), y: arange(n))\n    var i = mm - nn\n    let j = (i > 0-S2_THRESHOLD)\n    i[argwhere(j)] <- 0\n    i[argwhere(1-j)] <- 1\n    return argwhere(i)\n}\n\n// PRINTING\nfunc println(x: matrix, prefix:String=\"matrix([\", postfix:String=\"])\", newline:String=\"\\n\", format:String=\"%.3f\", printWholeMatrix:Bool=false){\n    print(prefix, terminator: \"\")\n    var pre:String\n    var post:String\n    var printedSpacer = false\n    for i in 0..<x.shape.0{\n        // pre and post nice -- internal variables\n        if i==0 {pre = \"\"}\n        else {pre = \"        \"}\n        if i==x.shape.0-1 {post=postfix}\n        else {post = \"],\"}\n        \n        if printWholeMatrix || x.shape.0 < 16 || i<4-1 || i>x.shape.0-4{\n            print(x[i, 0..<x.shape.1], prefix:pre, postfix:post, format: format, printWholeMatrix:printWholeMatrix)\n        }\n        else if printedSpacer==false{\n            printedSpacer=true\n            Swift.print(\"        ...,\")\n        }\n    }\n    print(newline, terminator: \"\")\n}\nfunc max(x: matrix, axis:Int = -1)->Double{\n    return x.max()\n}\nfunc min(x: matrix, axis:Int = -1)->Double{\n    return x.min()\n}\nfunc print(x: matrix, prefix:String=\"matrix([\", postfix:String=\"])\", newline:String=\"\\n\", format:String=\"%.3f\", printWholeMatrix:Bool=false){\n    println(x, prefix:prefix, postfix:postfix, newline:\"\", format:format, printWholeMatrix:printWholeMatrix)\n}\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/matrix/m-image.swift",
    "content": "//\n//  twoD-image.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/30/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n/* \n *   some other useful tips that need an iOS app to use:\n *    1. UIImage to raw array[0]:\n *    2. raw array to UIImage[1]:\n *  \n *   for a working implementation, see[2] (to be published shortly)\n *  \n *   [0]:http://stackoverflow.com/a/1262893/1141256\n *   [1]:http://stackoverflow.com/a/12868860/1141256\n *   [2]:https://github.com/scottsievert/saliency/blob/master/AVCam/AVCam/saliency/imageToRawArray.m\n *\n *\n */\n\nimport Foundation\nimport UIKit // for iOS use\n\nfunc rgb2hsv_pixel(R:Double, G:Double, B:Double)->(Double, Double, Double){\n    // tested against wikipedia/HSL_and_HSV. returns (H, S_hsv, V)\n    let M = max(array(R, G, B))\n    let m = min(array(R, G, B))\n    let C = M - m\n    var Hp:Double = 0\n    if      M==R {Hp = ((G-B)/C) % 6}\n    else if M==G {Hp = ((B-R)/C) + 2}\n    else if M==B {Hp = ((R-G)/C) + 4}\n    let H = 60 * Hp\n    let V = M\n    var S = 0.0\n    if !(V==0) {S = C/V}\n    \n    return (H, S, V)\n}\n\n\nfunc rgb2hsv(r:matrix, g:matrix, b:matrix)->(matrix, matrix, matrix){\n    assert(r.shape.0 == g.shape.0)\n    assert(b.shape.0 == g.shape.0)\n    assert(r.shape.1 == g.shape.1)\n    assert(b.shape.1 == g.shape.1)\n    var h = zeros_like(r)\n    var s = zeros_like(g)\n    var v = zeros_like(b)\n    for i in 0..<r.shape.0{\n        for j in 0..<r.shape.1{\n            let (h_p, s_p, v_p) = rgb2hsv_pixel(r[i,j], G: g[i,j], B: b[i,j])\n            h[i,j] = h_p\n            s[i,j] = s_p\n            v[i,j] = v_p\n        }\n    }\n    return (h, s, v)\n}\nfunc rgb2_hsv_vplane(r:matrix, g:matrix, b:matrix)->matrix{\n    return max(max(r, y: g), y: b)\n}\n\n\nfunc savefig(x:matrix, filename:String, save:Bool=true, show:Bool=false){\n    // assumes Python is on your $PATH and pylab/etc are installed\n    // prefix should point to the swix folder!\n    // prefix is defined in numbers.swift\n    // assumes python is on your path\n    write_csv(x, filename:\"swix/temp.csv\")\n    system(\"cd \"+S2_PREFIX+\"; \"+PYTHON_PATH + \" imshow.py \\(filename) \\(save) \\(show)\")\n    system(\"rm \"+S2_PREFIX+\"temp.csv\")\n}\nfunc imshow(x: matrix){\n    savefig(x, filename: \"junk\", save:false, show:true)\n}\n\nfunc UIImageToRGBA(image:UIImage)->(matrix, matrix, matrix, matrix){\n    // returns red, green, blue and alpha channels\n    \n    // init'ing\n    var imageRef = image.CGImage\n    var width = CGImageGetWidth(imageRef)\n    var height = CGImageGetHeight(imageRef)\n    var colorSpace = CGColorSpaceCreateDeviceRGB()\n    var bytesPerPixel = 4\n    var bytesPerRow:UInt = UInt(bytesPerPixel) * UInt(width)\n    var bitsPerComponent:UInt = 8\n    var pix = Int(width) * Int(height)\n    var count:Int = 4*Int(pix)\n    \n    // pulling the color out of the image\n    var rawData = UnsafeMutablePointer<UInt8>.alloc(4 * width * height)\n    var temp = CGImageAlphaInfo.PremultipliedLast.rawValue\n    var bitmapInfo = CGBitmapInfo(rawValue:temp)\n    var context = CGBitmapContextCreate(rawData, Int(width), Int(height), Int(bitsPerComponent), Int(bytesPerRow), colorSpace, temp)\n    CGContextDrawImage(context, CGRectMake(0,0,CGFloat(width), CGFloat(height)), imageRef)\n    \n    \n    // unsigned char to double conversion\n    var rawDataArray = zeros(count)-1\n    vDSP_vfltu8D(rawData, 1.stride, !(rawDataArray), 1, count.length)\n    \n    // pulling the RGBA channels out of the color\n    var i = arange(pix)\n    var r = zeros((Int(height), Int(width)))-1;\n    r.flat = rawDataArray[4*i+0]\n    \n    var g = zeros((Int(height), Int(width)));\n    g.flat = rawDataArray[4*i+1]\n    \n    var b = zeros((Int(height), Int(width)));\n    b.flat = rawDataArray[4*i+2]\n    \n    var a = zeros((Int(height), Int(width)));\n    a.flat = rawDataArray[4*i+3]\n    return (r, g, b, a)\n}\nfunc RGBAToUIImage(r:matrix, g:matrix, b:matrix, a:matrix)->UIImage{\n    // might be useful! [1]\n    // [1]:http://stackoverflow.com/questions/30958427/pixel-array-to-uiimage-in-swift\n    // setup\n    var height = r.shape.0\n    var width = r.shape.1\n    var area = height * width\n    var componentsPerPixel = 4 // rgba\n    var compressedPixelData = zeros(4*area)\n    var N = width * height\n    \n    // double to unsigned int\n    var i = arange(N)\n    compressedPixelData[4*i+0] = r.flat\n    compressedPixelData[4*i+1] = g.flat\n    compressedPixelData[4*i+2] = b.flat\n    compressedPixelData[4*i+3] = a.flat\n    var pixelData:[CUnsignedChar] = Array(count:area*componentsPerPixel, repeatedValue:0)\n    vDSP_vfixu8D(&compressedPixelData.grid, 1, &pixelData, 1, vDSP_Length(componentsPerPixel*area))\n    \n    // creating the bitmap context\n    var colorSpace = CGColorSpaceCreateDeviceRGB()\n    var bitsPerComponent = 8\n    var bytesPerRow = ((bitsPerComponent * width) / 8) * componentsPerPixel\n    var temp = CGImageAlphaInfo.PremultipliedLast.rawValue\n    var bitmapInfo = CGBitmapInfo(rawValue:temp)\n    var context = CGBitmapContextCreate(&pixelData, Int(width), Int(height), Int(bitsPerComponent), Int(bytesPerRow), colorSpace, temp)\n    \n    // creating the image\n    var toCGImage = CGBitmapContextCreateImage(context)!\n    var image:UIImage = UIImage.init(CGImage:toCGImage)\n    return image\n}\nfunc resizeImage(image:UIImage, shape:(Int, Int)) -> UIImage{\n    // nice variables\n    var (height, width) = shape\n    var cgSize = CGSizeMake(CGFloat(width), CGFloat(height))\n    \n    // draw on new CGSize\n    UIGraphicsBeginImageContextWithOptions(cgSize, false, 0.0)\n    image.drawInRect(CGRectMake(CGFloat(0), CGFloat(0), CGFloat(width), CGFloat(height)))\n    var newImage = UIGraphicsGetImageFromCurrentImageContext()\n    UIGraphicsEndImageContext()\n    return newImage\n}\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/matrix/m-initing.swift",
    "content": "//\n//  twoD-initing.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\n\nfunc zeros(shape: (Int, Int)) -> matrix{\n    return matrix(columns: shape.1, rows: shape.0)\n}\nfunc zeros_like(x: matrix) -> matrix{\n    let y:matrix = zeros((x.shape.0, x.shape.1))\n    return y\n}\nfunc ones_like(x: matrix) -> matrix{\n    return zeros_like(x) + 1\n}\nfunc ones(shape: (Int, Int)) -> matrix{\n    return zeros(shape)+1\n}\nfunc eye(N: Int) -> matrix{\n    return diag(ones(N))\n}\nfunc diag(x:ndarray)->matrix{\n    var y = zeros((x.n, x.n))\n    y[\"diag\"] = x\n    return y\n}\nfunc randn(N: (Int, Int), mean: Double=0, sigma: Double=1) -> matrix{\n    var x = zeros(N)\n    let y = randn(N.0 * N.1, mean:mean, sigma:sigma)\n    x.flat = y\n    return x\n}\nfunc rand(N: (Int, Int)) -> matrix{\n    var x = zeros(N)\n    let y = rand(N.0 * N.1)\n    x.flat = y\n    return x\n}\nfunc reshape(x: ndarray, shape:(Int, Int))->matrix{\n    return x.reshape(shape)\n}\nfunc meshgrid(x: ndarray, y:ndarray) -> (matrix, matrix){\n    assert(x.n > 0 && y.n > 0, \"If these matrices are empty meshgrid fails\")\n    let z1 = reshape(`repeat`(y, N: x.n), shape: (x.n, y.n))\n    let z2 = reshape(`repeat`(x, N: y.n, axis: 1), shape: (x.n, y.n))\n    return (z2, z1)\n}\n\n\n/// array(\"1 2 3; 4 5 6; 7 8 9\") works like matlab. note that string format has to be followed to the dot. String parsing has bugs; I'd use arange(9).reshape((3,3)) or something similar\nfunc array(matlab_like_string: String)->matrix{\n    let mls = matlab_like_string\n    var rows = mls.componentsSeparatedByString(\";\")\n    let r = rows.count\n    var c = 0\n    for char in rows[0].characters{\n        if char == \" \" {}\n        else {c += 1}\n    }\n    var x = zeros((r, c))\n    var start:Int\n    var i:Int=0, j:Int=0\n    for row in rows{\n        var nums = row.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceCharacterSet())\n        if nums[0] == \"\"{start=1}\n        else {start=0}\n        j = 0\n        for n in start..<nums.count{\n            x[i, j] = nums[n].floatValue.double\n            j += 1\n        }\n        i += 1\n    }\n    return x\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/matrix/m-matrix.swift",
    "content": "//\n//  matrix2d.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\nstruct matrix {\n    let n: Int\n    var rows: Int\n    var columns: Int\n    var count: Int\n    var shape: (Int, Int)\n    var flat:ndarray\n    var T:matrix {return transpose(self)}\n    var I:matrix {return inv(self)}\n    var pI:matrix {return pinv(self)}\n    init(columns: Int, rows: Int) {\n        self.n = rows * columns\n        self.rows = rows\n        self.columns = columns\n        self.shape = (rows, columns)\n        self.count = n\n        self.flat = zeros(rows * columns)\n        \n    }\n    func copy()->matrix{\n        var y = zeros_like(self)\n        y.flat = self.flat.copy()\n        return y\n    }\n    subscript(i: String) -> ndarray {\n        get {\n            assert(i == \"diag\", \"Currently the only support x[string] is x[\\\"diag\\\"]\")\n            let size = rows < columns ? rows : columns\n            let i = arange(size)\n            return self[i*columns.double + i]\n        }\n        set {\n            assert(i == \"diag\", \"Currently the only support x[string] is x[\\\"diag\\\"]\")\n            let m = shape.0\n            let n = shape.1\n            let min_mn = m < n ? m : n\n            let j = n.double * arange(min_mn)\n            self[j + j/n.double] = newValue\n        }\n    }\n    func indexIsValidForRow(r: Int, c: Int) -> Bool {\n        return r >= 0 && r < rows && c>=0 && c < columns\n    }\n    func dot(y: matrix) -> matrix{\n        let (Mx, Nx) = self.shape\n        let (My, Ny) = y.shape\n        assert(Nx == My, \"Matrix sizes not compatible for dot product\")\n        let z = zeros((Mx, Ny))\n        cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,\n            Mx.cint, Ny.cint, Nx.cint, 1.0,\n            !self, Nx.cint,\n            !y, Ny.cint, 1.0,\n            !z, Ny.cint)\n        return z\n    }\n    func dot(x: ndarray) -> ndarray{\n        var y = zeros((x.n, 1))\n        y.flat = x\n        var z = self.dot(y)\n        return z.flat\n    }\n    func min(axis:Int = -1) -> Double{\n        if axis == -1{\n            return self.flat.min()\n        }\n        assert(axis==0 || axis==1, \"Axis must be 0 or 1 as matrix only has two dimensions\")\n        assert(false, \"max(x, axis:Int) for maximum of each row is not implemented yet. Use max(A.flat) or A.flat.max() to get the global maximum\")\n\n    }\n    func max(axis:Int = -1) -> Double{\n        if axis == -1 {\n            return self.flat.max()\n        }\n        assert(axis==0 || axis==1, \"Axis must be 0 or 1 as matrix only has two dimensions\")\n        assert(false, \"max(x, axis:Int) for maximum of each row is not implemented yet. Use max(A.flat) or A.flat.max() to get the global maximum\")\n    }\n    subscript(i: Int, j: Int) -> Double {\n        // x[0,0]\n        get {\n            var nI = i\n            var nJ = j\n            if nI < 0 {nI = rows + i}\n            if nJ < 0 {nJ = rows + j}\n            assert(indexIsValidForRow(nI, c:nJ), \"Index out of range\")\n            return flat[nI * columns + nJ]\n        }\n        set {\n            var nI = i\n            var nJ = j\n            if nI < 0 {nI = rows + i}\n            if nJ < 0 {nJ = rows + j}\n            assert(indexIsValidForRow(nI, c:nJ), \"Index out of range\")\n            flat[nI * columns + nJ] = newValue\n        }\n    }\n    subscript(i: Range<Int>, k: Int) -> ndarray {\n        // x[0..<2, 0]\n        get {\n            let idx = asarray(i)\n            return self[idx, k]\n        }\n        set {\n            let idx = asarray(i)\n            self[idx, k] = newValue\n        }\n    }\n    subscript(r: Range<Int>, c: Range<Int>) -> matrix {\n        // x[0..<2, 0..<2]\n        get {\n            let rr = asarray(r)\n            let cc = asarray(c)\n            return self[rr, cc]\n        }\n        set {\n            let rr = asarray(r)\n            let cc = asarray(c)\n            self[rr, cc] = newValue\n        }\n    }\n    subscript(i: Int, k: Range<Int>) -> ndarray {\n        // x[0, 0..<2]\n        get {\n            let idx = asarray(k)\n            return self[i, idx]\n        }\n        set {\n            let idx = asarray(k)\n            self[i, idx] = newValue\n        }\n    }\n    subscript(or: ndarray, oc: ndarray) -> matrix {\n        // the main method.\n        // x[array(1,2), array(3,4)]\n        get {\n            var r = or.copy()\n            var c = oc.copy()\n            if r.max() < 0.0 {r += 1.0 * rows.double}\n            if c.max() < 0.0 {c += 1.0 * columns.double}\n            \n            let (j, i) = meshgrid(r, y: c)\n            let idx = (j.flat*columns.double + i.flat)\n            let z = flat[idx]\n            let zz = reshape(z, shape: (r.n, c.n))\n            return zz\n        }\n        set {\n            var r = or.copy()\n            var c = oc.copy()\n            if r.max() < 0.0 {r += 1.0 * rows.double}\n            if c.max() < 0.0 {c += 1.0 * columns.double}\n            if r.n > 0 && c.n > 0{\n                let (j, i) = meshgrid(r, y: c)\n                let idx = j.flat*columns.double + i.flat\n                flat[idx] = newValue.flat\n            }\n        }\n    }\n    subscript(r: ndarray) -> ndarray {\n        // flat indexing\n        get {return self.flat[r]}\n        set {self.flat[r] = newValue }\n    }\n    subscript(i: String, k:Int) -> ndarray {\n        // x[\"all\", 0]\n        get {\n            let idx = arange(shape.0)\n            let x:ndarray = self.flat[idx * self.columns.double + k.double]\n            return x\n        }\n        set {\n            let idx = arange(shape.0)\n            self.flat[idx * self.columns.double + k.double] = newValue\n        }\n    }\n    subscript(i: Int, k: String) -> ndarray {\n        // x[0, \"all\"]\n        get {\n            assert(k == \"all\", \"Only 'all' supported\")\n            let idx = arange(shape.1)\n            let x:ndarray = self.flat[i.double * self.columns.double + idx]\n            return x\n        }\n        set {\n            assert(k == \"all\", \"Only 'all' supported\")\n            let idx = arange(shape.1)\n            self.flat[i.double * self.columns.double + idx] = newValue\n        }\n    }\n    subscript(i: ndarray, k: Int) -> ndarray {\n        // x[array(1,2), 0]\n        get {\n            let idx = i.copy()\n            let x:ndarray = self.flat[idx * self.columns.double + k.double]\n            return x\n        }\n        set {\n            let idx = i.copy()\n            self.flat[idx * self.columns.double + k.double] = newValue\n        }\n    }\n    subscript(i: matrix) -> ndarray {\n        // x[x < 5]\n        get {\n            return self.flat[i.flat]\n        }\n        set {\n            self.flat[i.flat] = newValue\n        }\n    }\n    subscript(i: Int, k: ndarray) -> ndarray {\n        // x[0, array(1,2)]\n        get {\n            let x:ndarray = self.flat[i.double * self.columns.double + k]\n            return x\n        }\n        set {\n            self.flat[i.double * self.columns.double + k] = newValue\n        }\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/matrix/m-operators.swift",
    "content": "//\n//  twoD-operators.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\nfunc make_operator(lhs: matrix, operation: String, rhs: matrix)->matrix{\n    assert(lhs.shape.0 == rhs.shape.0, \"Sizes must match!\")\n    assert(lhs.shape.1 == rhs.shape.1, \"Sizes must match!\")\n    \n    var result = zeros_like(lhs) // real result\n    let lhsM = lhs.flat\n    let rhsM = rhs.flat\n    var resM:ndarray = zeros_like(lhsM) // flat ndarray\n    if operation==\"+\" {resM = lhsM + rhsM}\n    else if operation==\"-\" {resM = lhsM - rhsM}\n    else if operation==\"*\" {resM = lhsM * rhsM}\n    else if operation==\"/\" {resM = lhsM / rhsM}\n    else if operation==\"<\" {resM = lhsM < rhsM}\n    else if operation==\">\" {resM = lhsM > rhsM}\n    else if operation==\">=\" {resM = lhsM >= rhsM}\n    else if operation==\"<=\" {resM = lhsM <= rhsM}\n    result.flat.grid = resM.grid\n    return result\n}\nfunc make_operator(lhs: matrix, operation: String, rhs: Double)->matrix{\n    var result = zeros_like(lhs) // real result\n//    var lhsM = asmatrix(lhs.grid) // flat\n    let lhsM = lhs.flat\n    var resM:ndarray = zeros_like(lhsM) // flat matrix\n    if operation==\"+\" {resM = lhsM + rhs}\n    else if operation==\"-\" {resM = lhsM - rhs}\n    else if operation==\"*\" {resM = lhsM * rhs}\n    else if operation==\"/\" {resM = lhsM / rhs}\n    else if operation==\"<\" {resM = lhsM < rhs}\n    else if operation==\">\" {resM = lhsM > rhs}\n    else if operation==\">=\" {resM = lhsM >= rhs}\n    else if operation==\"<=\" {resM = lhsM <= rhs}\n    result.flat.grid = resM.grid\n    return result\n}\nfunc make_operator(lhs: Double, operation: String, rhs: matrix)->matrix{\n    var result = zeros_like(rhs) // real result\n//    var rhsM = asmatrix(rhs.grid) // flat\n    let rhsM = rhs.flat\n    var resM:ndarray = zeros_like(rhsM) // flat matrix\n    if operation==\"+\" {resM = lhs + rhsM}\n    else if operation==\"-\" {resM = lhs - rhsM}\n    else if operation==\"*\" {resM = lhs * rhsM}\n    else if operation==\"/\" {resM = lhs / rhsM}\n    else if operation==\"<\" {resM = lhs < rhsM}\n    else if operation==\">\" {resM = lhs > rhsM}\n    else if operation==\">=\" {resM = lhs >= rhsM}\n    else if operation==\"<=\" {resM = lhs <= rhsM}\n    result.flat.grid = resM.grid\n    return result\n}\n\n// DOUBLE ASSIGNMENT\nfunc <- (inout lhs:matrix, rhs:Double){\n    let assign = ones((lhs.shape)) * rhs\n    lhs = assign\n}\n\n// SOLVE\ninfix operator !/ {associativity none precedence 140}\nfunc !/ (lhs: matrix, rhs: ndarray) -> ndarray{\n    return solve(lhs, b: rhs)}\n// EQUALITY\nfunc ~== (lhs: matrix, rhs: matrix) -> Bool{\n    return (rhs.flat ~== lhs.flat)}\n\ninfix operator == {associativity none precedence 140}\nfunc == (lhs: matrix, rhs: matrix)->matrix{\n    return (lhs.flat == rhs.flat).reshape(lhs.shape)\n}\ninfix operator !== {associativity none precedence 140}\nfunc !== (lhs: matrix, rhs: matrix)->matrix{\n    return (lhs.flat !== rhs.flat).reshape(lhs.shape)\n}\n\n/// ELEMENT WISE OPERATORS\n// PLUS\ninfix operator + {associativity none precedence 140}\nfunc + (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\nfunc + (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\nfunc + (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\n// MINUS\ninfix operator - {associativity none precedence 140}\nfunc - (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\nfunc - (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\nfunc - (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\n// TIMES\ninfix operator * {associativity none precedence 140}\nfunc * (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\nfunc * (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\nfunc * (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\n// DIVIDE\ninfix operator / {associativity none precedence 140}\nfunc / (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)\n}\nfunc / (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)}\nfunc / (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)}\n// LESS THAN\ninfix operator < {associativity none precedence 140}\nfunc < (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\nfunc < (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\nfunc < (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\n// GREATER THAN\ninfix operator > {associativity none precedence 140}\nfunc > (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\nfunc > (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\nfunc > (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\n// GREATER THAN OR EQUAL\ninfix operator >= {associativity none precedence 140}\nfunc >= (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\nfunc >= (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\nfunc >= (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\n// LESS THAN OR EQUAL\ninfix operator <= {associativity none precedence 140}\nfunc <= (lhs: matrix, rhs: Double) -> matrix{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\nfunc <= (lhs: matrix, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\nfunc <= (lhs: Double, rhs: matrix) -> matrix{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/matrix/m-simple-math.swift",
    "content": "//\n//  twoD-math.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/10/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\nfunc apply_function(function: ndarray->ndarray, x: matrix)->matrix{\n    let y = function(x.flat)\n    var z = zeros_like(x)\n    z.flat = y\n    return z\n}\n\n// TRIG\nfunc sin(x: matrix) -> matrix{\n    return apply_function(sin, x: x)\n}\nfunc cos(x: matrix) -> matrix{\n    return apply_function(cos, x: x)\n}\nfunc tan(x: matrix) -> matrix{\n    return apply_function(tan, x: x)\n}\nfunc tanh(x: matrix) -> matrix {\n    return apply_function(tanh, x: x)\n}\n\n// BASIC INFO\nfunc abs(x: matrix) -> matrix{\n    return apply_function(abs, x: x)\n}\nfunc sign(x: matrix) -> matrix{\n    return apply_function(sign, x: x)\n}\n\n// POWER FUNCTION\nfunc pow(x: matrix, power: Double) -> matrix{\n    let y = pow(x.flat, power: power)\n    var z = zeros_like(x)\n    z.flat = y\n    return z\n}\nfunc sqrt(x: matrix) -> matrix{\n    return apply_function(sqrt, x: x)\n}\n\n// ROUND\nfunc floor(x: matrix) -> matrix{\n    return apply_function(floor, x: x)\n}\nfunc ceil(x: matrix) -> matrix{\n    return apply_function(ceil, x: x)\n}\nfunc round(x: matrix) -> matrix{\n    return apply_function(round, x: x)\n}\n\n// LOG\nfunc log(x: matrix) -> matrix{\n    return apply_function(log, x: x)\n}\n\n// BASIC STATS\nfunc min(x:matrix, y:matrix)->matrix{\n    var z = zeros_like(x)\n    z.flat = min(x.flat, y: y.flat)\n    return z\n}\nfunc max(x:matrix, y:matrix)->matrix{\n    var z = zeros_like(x)\n    z.flat = max(x.flat, y: y.flat)\n    return z\n}\n\n\n// AXIS\nfunc sum(x: matrix, axis:Int = -1) -> ndarray{\n    // arg dim: indicating what dimension you want to sum over. For example, if dim==0, then it'll sum over dimension 0 -- it will add all the numbers in the 0th dimension, x[0..<x.shape.0, i]\n    assert(axis==0 || axis==1, \"if you want to sum over the entire matrix, call `sum(x.flat)`.\")\n    if axis==1{\n        let n = x.shape.1\n        let m = ones((n,1))\n        return (x.dot(m)).flat\n    }\n    else if axis==0 {\n        let n = x.shape.0\n        let m = ones((1,n))\n        return (m.dot(x)).flat\n    }\n    \n    // the program will never get below this line\n    assert(false)\n    return zeros(1)\n}\nfunc prod(x: matrix, axis:Int = -1) -> ndarray{\n    assert(axis==0 || axis==1, \"if you want to sum over the entire matrix, call `sum(x.flat)`.\")\n    let y = log(x)\n    let z = sum(y, axis:axis)\n    return exp(z)\n}\nfunc mean(x:matrix, axis:Int = -1) -> ndarray{\n    assert(axis==0 || axis==1, \"If you want to find the average of the whole matrix call `mean(x.flat)`\")\n    let div = axis==0 ? x.shape.0 : x.shape.1\n    return sum(x, axis:axis) / div.double\n}\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/ndarray/complex-math.swift",
    "content": "//\n//  math.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/11/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\n\n// integration\nfunc cumtrapz(x:ndarray)->ndarray{\n    // integrate and see the steps at each iteration\n    let y = zeros_like(x)\n    var dx:CDouble = 1.0\n    vDSP_vtrapzD(!x, 1.stride, &dx, !y, 1.stride, x.n.length)\n    return y\n}\nfunc trapz(x:ndarray)->Double{\n    // integrate and get the final value\n    return cumtrapz(x)[-1]\n}\n// basic definitions\nfunc inner(x:ndarray, y:ndarray)->Double{\n    // the inner product. aka dot product, but I use dot product as a short for matrix multiplication\n    return sum(x * y)\n}\nfunc outer(x:ndarray, y:ndarray)->matrix{\n    // the outer product.\n    let (xm, ym) = meshgrid(x, y: y)\n    return xm * ym\n}\n// fourier transforms\nfunc fft(x: ndarray) -> (ndarray, ndarray){\n    let N:CInt = x.n.cint\n    var yr = zeros(N.int)\n    var yi = zeros(N.int)\n    \n    // setup for the accelerate calling\n    let radix:FFTRadix = FFTRadix(FFT_RADIX2)\n    let pass:vDSP_Length = vDSP_Length((log2(N.double)+1.0).int)\n    let setup:FFTSetupD = vDSP_create_fftsetupD(pass, radix)\n    let log2n:Int = (log2(N.double)+1.0).int\n    let z = zeros(N.int)\n    var x2:DSPDoubleSplitComplex = DSPDoubleSplitComplex(realp: !x, imagp:!z)\n    var y = DSPDoubleSplitComplex(realp:!yr, imagp:!yi)\n    let dir = FFTDirection(FFT_FORWARD)\n    let stride = 1.stride\n    \n    // perform the actual computation\n    vDSP_fft_zropD(setup, &x2, stride, &y, stride, log2n.length, dir)\n    \n    // free memory\n    vDSP_destroy_fftsetupD(setup)\n    \n    // this divide seems wrong\n    yr /= 2.0\n    yi /= 2.0\n    return (yr, yi)\n}\nfunc ifft(yr: ndarray, yi: ndarray) -> ndarray{\n    let N = yr.n\n    var x = zeros(N)\n    \n    // setup for the accelerate calling\n    let radix:FFTRadix = FFTRadix(FFT_RADIX2)\n    let pass:vDSP_Length = vDSP_Length((log2(N.double)+1.0).int)\n    let setup:FFTSetupD = vDSP_create_fftsetupD(pass, radix)\n    let log2n:Int = (log2(N.double)+1.0).int\n    let z = zeros(N)\n    var x2:DSPDoubleSplitComplex = DSPDoubleSplitComplex(realp: !yr, imagp:!yi)\n    var result:DSPDoubleSplitComplex = DSPDoubleSplitComplex(realp: !x, imagp:!z)\n    let dir = FFTDirection(FFT_INVERSE)\n    let stride = 1.stride\n    \n    // doing the actual computation\n    vDSP_fft_zropD(setup, &x2, stride, &result, stride, log2n.length, dir)\n    \n    // this divide seems wrong\n    x /= 16.0\n    return x\n}\nfunc fftconvolve(x:ndarray, kernel:ndarray)->ndarray{\n    // convolve two arrays using the fourier transform.\n    // zero padding, assuming kernel is smaller than x\n    var k_pad = zeros_like(x)\n    k_pad[0..<kernel.n] = kernel\n    \n    // performing the fft\n    let (Kr, Ki) = fft(k_pad)\n    let (Xr, Xi) = fft(x)\n    \n    // computing the multiplication (yes, a hack)\n    // (xr+xi*j) * (yr+yi*j) = xr*xi - xi*yi + j*(xi*yr) + j*(yr*xi)\n    let Yr = Xr*Kr - Xi*Ki\n    let Yi = Xr*Ki + Xi*Kr\n    let y = ifft(Yr, yi: Yi)\n    return y\n}"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/ndarray/helper-functions.swift",
    "content": "//\n//  helper-functions.swift\n//  swix\n//\n//  Created by Scott Sievert on 8/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// NORM\nfunc norm(x: ndarray, ord:Double=2) -> Double{\n    // takes the norm of an array\n    if ord==2      { return sqrt(sum(pow(x, power: 2)))}\n    else if ord==1 { return sum(abs(x))}\n    else if ord==0 { return sum(abs(x) > S2_THRESHOLD)}\n    else if ord == -1 || ord == -2{\n        return pow(sum(abs(x)^ord.double), 1/ord.double)\n    }\n    else if ord.double ==  inf {return max(abs(x))}\n    else if ord.double == -inf {return min(abs(x))}\n    assert(false, \"type of norm unrecongnized\")\n    return -1.0}\nfunc count_nonzero(x:ndarray)->Double{\n    return sum(abs(x) > S2_THRESHOLD)\n}\n\n// modifying elements of the array\nfunc clip(a:ndarray, a_min:Double, a_max:Double)->ndarray{\n    // clip the matrix\n    var y = a.copy()\n    y[argwhere(a < a_min)] <- a_min\n    y[argwhere(a > a_max)] <- a_max\n    return y\n}\nfunc reverse(x:ndarray) -> ndarray{\n    // reverse the array\n    let y = x.copy()\n    vDSP_vrvrsD(!y, 1.stride, y.n.length)\n    return y\n}\nfunc delete(x:ndarray, idx:ndarray) -> ndarray{\n    // delete select elements\n    var i = ones(x.n)\n    i[idx] *= 0\n    let y = x[argwhere(i)]\n    return y\n}\nfunc `repeat`(x: ndarray, N:Int, axis:Int=0) -> ndarray{\n    // repeat the array element wise or as a whole array\n    var y = zeros((N, x.n))\n    \n    // wrapping using OpenCV\n    CVWrapper.`repeat`(!x, to:!y, n_x:x.n.cint, n_repeat:N.cint)\n    \n    if axis==0{}\n    else if axis==1 { y = y.T}\n    return y.flat\n}\n\n// SORTING and the like\nfunc sort(x:ndarray)->ndarray{\n    // sort the array and return a new array\n    let y = x.copy()\n    y.sort()\n    return y\n}\nfunc unique(x:ndarray)->ndarray{\n    var y = sort(x)\n    var z = concat(zeros(1), y: y)\n    let diff = abs(z[1..<z.n] - z[0..<z.n-1]) > S2_THRESHOLD\n    let un = y[argwhere(diff)]\n    if abs(min(x)) < S2_THRESHOLD{\n        return sort(concat(zeros(1), y: un))\n    }\n    else{\n        return un\n    }\n}\nfunc shuffle(x:ndarray)->ndarray{\n    // randomly shuffle the array\n    let y = x.copy()\n    CVWrapper.shuffle(!y, n:y.n.cint)\n    return y\n}\n\n// SETS\nfunc intersection(x: ndarray, y:ndarray)->ndarray{\n    return unique(x[argwhere(in1d(x, y: y))])\n}\nfunc union(x:ndarray, y:ndarray)->ndarray{\n    return unique(concat(x, y: y))\n}\nfunc in1d(x: ndarray, y:ndarray)->ndarray{\n    if (x.n > 0 && y.n > 0){\n        let (xx, yy) = meshgrid(x, y: y)\n        let i = abs(xx-yy) < S2_THRESHOLD\n        let j = (sum(i, axis:1)) > 0.5\n        return 0+j\n    }\n    return array()\n}\nfunc concat(x:ndarray, y:ndarray)->ndarray{\n    // concatenate two matrices\n    var z = zeros(x.n + y.n)\n    z[0..<x.n] = x\n    z[x.n..<y.n+x.n] = y\n    return z\n}\n\n// ARG\nfunc argmax(x:ndarray)->Int{\n    // find the location of the max\n    var m:CInt = 0\n    CVWrapper.argmax(!x, n: x.n.cint, max: &m)\n    return Int(m)\n}\nfunc argmin(x:ndarray)->Int{\n    // find the location of the min\n    var m:CInt = 0\n    CVWrapper.argmin(!x, n: x.n.cint, min: &m)\n    return Int(m)\n}\nfunc argsort(x:ndarray)->ndarray{\n    // sort the array but use integers\n    \n    // the array of integers that OpenCV needs\n    var y:[CInt] = Array(count:x.n, repeatedValue:0)\n    // calling opencv's sortidx\n    CVWrapper.argsort(!x, n: x.n.cint, into:&y)\n    // the integer-->double conversion\n    let z = zeros_like(x)\n    vDSP_vflt32D(&y, 1.stride, !z, 1.stride, x.n.length)\n    return z\n}\nfunc argwhere(idx: ndarray) -> ndarray{\n    // counts non-zero elements, return array of doubles (which can be indexed!).\n    let i = arange(idx.n)\n    let args = zeros(sum(idx).int)\n    vDSP_vcmprsD(!i, 1.stride, !idx, 1.stride, !args, 1.stride, idx.n.length)\n    return args\n}\n\n\n// LOGICAL\nfunc logical_and(x:ndarray, y:ndarray)->ndarray{\n    return x * y\n}\nfunc logical_or(x:ndarray, y:ndarray)->ndarray{\n    var i = x + y\n    let j = argwhere(i > 0.5)\n    i[j] <- 1.0\n    return i\n}\nfunc logical_not(x:ndarray)->ndarray{\n    return 1-x\n}\nfunc logical_xor(x:ndarray, y:ndarray)->ndarray{\n    let i = x + y\n    let j = (i < 1.5) && (i > 0.5)\n    return j\n}\n\n// PRINTING\nfunc println(x: ndarray, prefix:String=\"array([\", postfix:String=\"])\", newline:String=\"\\n\", format:String=\"%.3f\", seperator:String=\", \", printAllElements:Bool=false){\n    // print the matrix\n    print(prefix, terminator: \"\")\n    var suffix = seperator\n    var printed = false\n    var string:NSString\n    for i in 0..<x.n{\n        if i==x.n-1 { suffix = \"\" }\n        if printAllElements || (x.n)<16 || i<3 || i>(x.n-4){\n            string = NSString(format: format+suffix, x[i])\n            print(String(string), terminator:\"\")\n        }\n        else if printed == false{\n            printed = true\n            print(\"..., \", terminator: \"\")\n        }\n    }\n    print(postfix, terminator: \"\")\n    print(newline, terminator: \"\")\n}\nfunc print(x: ndarray, prefix:String=\"ndarray([\", postfix:String=\"])\", format:String=\"%.3f\", printWholeMatrix:Bool=false){\n    println(x, prefix:prefix, postfix:postfix, newline:\"\\n\", format:format, printAllElements:printWholeMatrix)\n}\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/ndarray/initing.swift",
    "content": "//\n//  initing.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\nimport Swift\n\n// SLOW PARTS: array(doubles), read_csv, write_csv. not a huge deal -- hopefully not used in final code\n\n\nfunc zeros(N: Int) -> ndarray{\n    // N zeros\n    return ndarray(n: N)\n}\nfunc zeros_like(x: ndarray) -> ndarray{\n    // make an array like the other array\n   return zeros(x.n)\n}\nfunc ones_like(x: ndarray) -> ndarray{\n    // make an array like the other array\n    return zeros_like(x) + 1\n}\nfunc ones(N: Int) -> ndarray{\n    // N ones\n    return ndarray(n: N)+1\n}\nfunc arange(max: Double, x exclusive:Bool = true) -> ndarray{\n    // 0..<max\n    return arange(0, max: max, x:exclusive)\n}\nfunc arange(max: Int, x exclusive:Bool = true) -> ndarray{\n    // 0..<max\n    return arange(0, max: max.double, x:exclusive)\n}\nfunc range(min:Double, max:Double, step:Double) -> ndarray{\n    // min, min+step, min+2*step..., max-step, max\n    return linspace(min, max: max, num:1+((max-min)/step).int)\n}\nfunc arange(min: Double, max: Double, x exclusive: Bool = true) -> ndarray{\n    // min...max\n    var pad = 0\n    if !exclusive {pad = 1}\n    let N = max.int - min.int + pad\n    let x = zeros(N)\n    var o = CDouble(min)\n    var l = CDouble(1)\n    vDSP_vrampD(&o, &l, !x, 1.stride, N.length)\n    return x\n}\nfunc linspace(min: Double, max: Double, num: Int=50) -> ndarray{\n    // 0...1\n    let x = zeros(num+0)\n    var min  = CDouble(min)\n    var step = CDouble((max-min).double/(num-1).double)\n    vDSP_vrampD(&min, &step, !x, 1.stride, x.n.length)\n    return x\n}\nfunc array(numbers: Double...) -> ndarray{\n    // array(1, 2, 3, 4) -> arange(4)+1\n    // okay to leave unoptimized, only used for testing\n    var x = zeros(numbers.count)\n    var i = 0\n    for number in numbers{\n        x[i] = number\n        i++\n    }\n    return x\n}\nfunc asarray(x: [Double]) -> ndarray{\n    // convert a grid of double's to an array\n    var y = zeros(x.count)\n    y.grid = x\n    return y\n}\nfunc asarray(seq: Range<Int>) -> ndarray {\n    // make a range a grid of arrays\n    // improve with [1]\n    // [1]:https://gist.github.com/nubbel/d5a3639bea96ad568cf2\n    let start:Double = seq.startIndex.double * 1.0\n    let end:Double   = seq.endIndex.double * 1.0\n    return arange(start, max: end, x:true)\n}\n\nfunc copy(x: ndarray) -> ndarray{\n    // copy the value\n    return x.copy()\n}\n\nfunc seed(n:Int){\n    SWIX_SEED = __CLPK_integer(n)\n}\n\nfunc rand(N: Int, distro:String=\"uniform\") -> ndarray{\n    let x = zeros(N)\n    var i:__CLPK_integer = 1\n    if distro==\"normal\" {i = __CLPK_integer(3)}\n    var seed:Array<__CLPK_integer> = [SWIX_SEED, 2, 3, 5]\n    var nn:__CLPK_integer  = __CLPK_integer(N)\n    dlarnv_(&i, &seed, &nn, !x)\n    SWIX_SEED = seed[0]\n    return x\n}\nfunc randn(N: Int, mean: Double=0, sigma: Double=1) -> ndarray{\n    return (rand(N, distro:\"normal\") * sigma) + mean;\n}\nfunc randperm(N:Int)->ndarray{\n    let x = arange(N)\n    let y = shuffle(x)\n    return y\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/ndarray/ndarray.swift",
    "content": "//\n//  initing.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\n// the matrix definition and related functions go here\n\n// SLOW PARTS: x[ndarray, ndarray] set\n\nstruct ndarray {\n    let n: Int // the number of elements\n    var count: Int // ditto\n    var grid: [Double] // the raw values\n    init(n: Int) {\n        self.n = n\n        self.count = n\n        grid = Array(count: n, repeatedValue: 0.0)\n    }\n    func reshape(shape: (Int,Int)) -> matrix{\n        // reshape to a matrix of size.\n        var (mm, nn) = shape\n        if mm == -1 {mm = n / nn}\n        if nn == -1 {nn = n / mm}\n        assert(mm * nn == n, \"Number of elements must not change.\")\n        var y:matrix = zeros((mm, nn))\n        y.flat = self\n        return y\n    }\n    func copy() -> ndarray{\n        // return a new array just like this one\n        let y = zeros(n)\n        cblas_dcopy(self.n.cint, !self, 1.cint, !y, 1.cint)\n        return y\n    }\n    func sort(){\n        // sort this array *in place*\n        vDSP_vsortD(!self, self.n.length, 1.cint)\n    }\n    func indexIsValidForRow(index: Int) -> Bool {\n        // making sure this index is valid\n        return index >= 0 && index < n\n    }\n    func min() -> Double{\n        // return the minimum\n        var m:CDouble=0\n        vDSP_minvD(!self, 1.stride, &m, self.n.length)\n        return Double(m)\n    }\n    func max() -> Double{\n        // return the maximum\n        var m:CDouble=0\n        vDSP_maxvD(!self, 1.stride, &m, self.n.length)\n        return m\n    }\n    func mean() -> Double{\n        // return the mean\n        return sum(self) / n\n    }\n    subscript(index:String)->ndarray{\n        // assumed to be x[\"all\"]. returns every element\n        get {\n            assert(index == \"all\", \"Currently only \\\"all\\\" is supported\")\n            return self\n        }\n        set {\n            assert(index == \"all\", \"Currently only \\\"all\\\" is supported\")\n            self[0..<n] = newValue\n        }\n    }\n    subscript(index: Int) -> Double {\n        // x[0] -> Double. access a single element\n        get {\n            var newIndex:Int = index\n            if newIndex < 0 {newIndex = self.n + index}\n            assert(indexIsValidForRow(newIndex), \"Index out of range\")\n            return grid[newIndex]\n        }\n        set {\n            var newIndex:Int = index\n            if newIndex < 0 {newIndex = self.n + index}\n            assert(indexIsValidForRow(newIndex), \"Index out of range\")\n            grid[newIndex] = newValue\n        }\n    }\n    subscript(r: Range<Int>) -> ndarray {\n        // x[0..<N]. Access a range of values.\n        get {\n            // assumes that r is not [0, 1, 2, 3...] not [0, 2, 4...]\n            return self[asarray(r)]\n        }\n        set {\n            self[asarray(r)].grid = newValue.grid}\n    }\n    subscript(i: ndarray) -> ndarray {\n        // x[arange(2)]. access a range of values; x[0..<2] depends on this.\n        get {\n            // ndarray has fractional parts, and those parts get truncated\n            var idx:ndarray\n            if i.n > 0 {\n                if i.n == self.n && i.max() < 1.5 {\n                    // assumed to be boolean\n                    idx = argwhere(i > 0.5)\n                }\n                else {\n                    // it's just indexes\n                    idx = i.copy()\n                }\n                if idx.max() < 0 {\n                    // negative indexing\n                    idx += n.double\n                }\n                if (idx.n > 0){\n                    assert((idx.max().int < self.n) && (idx.min() >= 0), \"An index is out of bounds\")\n                    let y = zeros(idx.n)\n                    vDSP_vindexD(!self, !idx, 1.stride, !y, 1.stride, idx.n.length)\n                    return y\n                }\n            }\n            return array()\n        }\n        set {\n            var idx:ndarray// = oidx.copy()\n            if i.n > 0{\n                if i.n == self.n && i.max() < 1.5{\n                    // assumed to be boolean\n                    idx = argwhere(i > 0.5)\n                }\n                else {\n                    // it's just indexes\n                    idx = i.copy()\n                }\n                if idx.n > 0{\n                    if idx.max() < 0 {idx += n.double }\n                    assert((idx.max().int < self.n) && (idx.min() >= 0), \"An index is out of bounds\")\n                    index_xa_b_objc(!self, !idx, !newValue, idx.n.cint)\n                }\n            }\n        }\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/ndarray/operators.swift",
    "content": "//\n//  oneD-functions.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\nfunc make_operator(lhs:ndarray, operation:String, rhs:ndarray) -> ndarray{\n    assert(lhs.n == rhs.n, \"Sizes must match!\")\n    \n    // see [1] on how to integrate Swift and accelerate\n    // [1]:https://github.com/haginile/SwiftAccelerate\n    var result = lhs.copy()\n    let N = lhs.n\n    if operation==\"+\"\n        {cblas_daxpy(N.cint, 1.0.cdouble, !rhs, 1.cint, !result, 1.cint);}\n    else if operation==\"-\"\n        {cblas_daxpy(N.cint, -1.0.cdouble, !rhs, 1.cint, !result, 1.cint);}\n    else if operation==\"*\"\n        {vDSP_vmulD(!lhs, 1, !rhs, 1, !result, 1, lhs.n.length)}\n    else if operation==\"/\"\n        {vDSP_vdivD(!rhs, 1, !lhs, 1, !result, 1, lhs.n.length)}\n    else if operation==\"%\"{\n        result = remainder(lhs, x2: rhs)\n    }\n    else if operation==\"<\" || operation==\">\" || operation==\">=\" || operation==\"<=\" {\n        result = zeros(lhs.n)\n        CVWrapper.compare(!lhs, with: !rhs, using: operation.nsstring as String, into: !result, ofLength: lhs.n.cint)\n        // since opencv uses images which use 8-bit values\n        result /= 255\n    }\n    else if operation == \"==\"{\n        return abs(lhs-rhs) < S2_THRESHOLD\n    }\n    else if operation == \"!==\"{\n        return abs(lhs-rhs) > S2_THRESHOLD\n    }\n    else {assert(false, \"operation not recongized!\")}\n    return result\n}\nfunc make_operator(lhs:ndarray, operation:String, rhs:Double) -> ndarray{\n    var array = zeros(lhs.n)\n    var right = [rhs]\n    if operation == \"%\"{\n        // unoptimized. for loop in c\n        let r = zeros_like(lhs) + rhs\n        array = remainder(lhs, x2: r)\n    } else if operation == \"*\"{\n        var C:CDouble = 0\n        var mul = CDouble(rhs)\n        vDSP_vsmsaD(!lhs, 1.stride, &mul, &C, !array, 1.stride, lhs.n.length)\n    }\n    else if operation == \"+\"\n        {vDSP_vsaddD(!lhs, 1, &right, !array, 1, lhs.n.length)}\n    else if operation==\"/\"\n        {vDSP_vsdivD(!lhs, 1, &right, !array, 1, lhs.n.length)}\n    else if operation==\"-\"\n        {array = make_operator(lhs, operation: \"-\", rhs: ones(lhs.n)*rhs)}\n    else if operation==\"<\" || operation==\">\" || operation==\"<=\" || operation==\">=\"{\n        CVWrapper.compare(!lhs, withDouble:rhs.cdouble, using:operation.nsstring as String, into:!array, ofLength:lhs.n.cint)\n        array /= 255\n    }\n    else {assert(false, \"operation not recongnized! Error with the speedup?\")}\n    return array\n}\nfunc make_operator(lhs:Double, operation:String, rhs:ndarray) -> ndarray{\n    var array = zeros(rhs.n) // lhs[i], rhs[i]\n    let l = ones(rhs.n) * lhs\n    if operation == \"*\"\n        {array = make_operator(rhs, operation: \"*\", rhs: lhs)}\n    else if operation==\"%\"{\n        let l = zeros_like(rhs) + lhs\n        array = remainder(l, x2: rhs)\n    }\n    else if operation == \"+\"{\n        array = make_operator(rhs, operation: \"+\", rhs: lhs)}\n    else if operation==\"-\"\n        {array = -1 * make_operator(rhs, operation: \"-\", rhs: lhs)}\n    else if operation==\"/\"{\n        array = make_operator(l, operation: \"/\", rhs: rhs)}\n    else if operation==\"<\"{\n        array = make_operator(rhs, operation: \">\", rhs: lhs)}\n    else if operation==\">\"{\n        array = make_operator(rhs, operation: \"<\", rhs: lhs)}\n    else if operation==\"<=\"{\n        array = make_operator(rhs, operation: \">=\", rhs: lhs)}\n    else if operation==\">=\"{\n        array = make_operator(rhs, operation: \"<=\", rhs: lhs)}\n    else {assert(false, \"Operator not reconginzed\")}\n    return array\n}\n\n// DOUBLE ASSIGNMENT\ninfix operator <- {}\nfunc <- (inout lhs:ndarray, rhs:Double){\n    let assign = ones(lhs.n) * rhs\n    lhs = assign\n}\n\n// EQUALITY\ninfix operator ~== {associativity none precedence 140}\nfunc ~== (lhs: ndarray, rhs: ndarray) -> Bool{\n    assert(lhs.n == rhs.n, \"`~==` only works on arrays of equal size\")\n    return max(abs(lhs - rhs)) > 1e-6 ? false : true;\n}\nfunc == (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"==\", rhs: rhs)}\nfunc !== (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"!==\", rhs: rhs)}\n\n// NICE ARITHMETIC\nfunc += (inout x: ndarray, right: Double){\n    x = x + right}\nfunc *= (inout x: ndarray, right: Double){\n    x = x * right}\nfunc -= (inout x: ndarray, right: Double){\n    x = x - right}\nfunc /= (inout x: ndarray, right: Double){\n    x = x / right}\n\n// MOD\ninfix operator % {associativity none precedence 140}\nfunc % (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \"%\", rhs: rhs)}\nfunc % (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"%\", rhs: rhs)}\nfunc % (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"%\", rhs: rhs)}\n// POW\ninfix operator ^ {associativity none precedence 140}\nfunc ^ (lhs: ndarray, rhs: Double) -> ndarray{\n    return pow(lhs, power: rhs)}\nfunc ^ (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return pow(lhs, y: rhs)}\nfunc ^ (lhs: Double, rhs: ndarray) -> ndarray{\n    return pow(lhs, y: rhs)}\n// PLUS\ninfix operator + {associativity none precedence 140}\nfunc + (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\nfunc + (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\nfunc + (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \"+\", rhs: rhs)}\n// MINUS\ninfix operator - {associativity none precedence 140}\nfunc - (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\nfunc - (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\nfunc - (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \"-\", rhs: rhs)}\n// TIMES\ninfix operator * {associativity none precedence 140}\nfunc * (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\nfunc * (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\nfunc * (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \"*\", rhs: rhs)}\n// DIVIDE\ninfix operator / {associativity none precedence 140}\nfunc / (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)\n    }\nfunc / (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)}\nfunc / (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \"/\", rhs: rhs)}\n// LESS THAN\ninfix operator < {associativity none precedence 140}\nfunc < (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\nfunc < (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\nfunc < (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"<\", rhs: rhs)}\n// GREATER THAN\ninfix operator > {associativity none precedence 140}\nfunc > (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\nfunc > (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\nfunc > (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \">\", rhs: rhs)}\n// GREATER THAN OR EQUAL\ninfix operator >= {associativity none precedence 140}\nfunc >= (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\nfunc >= (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\nfunc >= (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \">=\", rhs: rhs)}\n// LESS THAN OR EQUAL\ninfix operator <= {associativity none precedence 140}\nfunc <= (lhs: ndarray, rhs: Double) -> ndarray{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\nfunc <= (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\nfunc <= (lhs: Double, rhs: ndarray) -> ndarray{\n    return make_operator(lhs, operation: \"<=\", rhs: rhs)}\n// LOGICAL AND\ninfix operator && {associativity none precedence 140}\nfunc && (lhs: ndarray, rhs: ndarray) -> ndarray{\n    return logical_and(lhs, y: rhs)}\n// LOGICAL OR\nfunc || (lhs: ndarray, rhs: ndarray) -> ndarray {\n    return logical_or(lhs, y: rhs)\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/ndarray/simple-math.swift",
    "content": "//\n//  oneD_math.swift\n//  swix\n//\n//  Created by Scott Sievert on 6/11/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n\nimport Foundation\nimport Accelerate\n\nfunc apply_function(function: Double->Double, x: ndarray) -> ndarray{\n    // apply a function to every element.\n    \n    // I've tried the below, but it doesn't apply the function to every element (at least in Xcode6b4)\n    //var function:Double->Double = sin\n    //var x = arange(N)*pi / N\n    //var y = zeros(x.count)\n    //dispatch_apply(UInt(N), dispatch_get_global_queue(0,0), {(i)->() in\n    //    y[Int(i)] = function(x[Int(i)])\n    //    })\n\n    var y = zeros(x.count)\n    for i in 0..<x.count{\n        y[i] = function(x[i])\n    }\n    return y\n}\nfunc apply_function(function: String, x: ndarray)->ndarray{\n    // apply select optimized functions\n    let y = zeros_like(x)\n    let n = x.n.length\n    var count = Int32(x.n)\n    if function==\"abs\"{\n        vDSP_vabsD(!x, 1, !y, 1, n);}\n    else if function==\"sign\"{\n        var o = CDouble(0)\n        var l = CDouble(1)\n        vDSP_vlimD(!x, 1.stride, &o, &l, !y, 1.stride, n)\n    }\n    else if function==\"cumsum\"{\n        var scalar:CDouble = 1\n        vDSP_vrsumD(!x, 1.stride, &scalar, !y, 1.stride, n)\n    }\n    else if function==\"floor\"{\n        vvfloor(!y, !x, &count)\n    }\n    else if function==\"log10\"{\n        assert(min(x) > 0, \"log must be called with positive values\")\n        vvlog10(!y, !x, &count)\n    }\n    else if function==\"log2\"{\n        assert(min(x) > 0, \"log must be called with positive values\")\n        vvlog2(!y, !x, &count)\n    }\n    else if function==\"exp2\"{\n        vvexp2(!y, !x, &count)\n    }\n    else if function==\"log\"{\n        assert(min(x) > 0, \"log must be called with positive values\")\n        vvlog(!y, !x, &count)\n    }\n    else if function==\"exp\"{\n        vvexp(!y, !x, &count)\n    }\n    else if function==\"cos\"{\n        vvcos(!y, !x, &count)\n    }\n    else if function==\"sin\"{\n        vvsin(!y, !x, &count)\n    }\n    else if function==\"tan\"{\n        vvtan(!y, !x, &count)\n    }\n    else if function==\"expm1\"{\n        vvexpm1(!y, !x, &count)\n    }\n    else if function==\"round\"{\n        vvnint(!y, !x, &count)\n    }\n    else if function==\"ceil\"{\n        vvceil(!y, !x, &count)\n    }\n    else if function == \"tanh\" {\n        vvtanh(!y, !x, &count)\n    }\n    else {assert(false, \"Function not recongized\")}\n    return y\n}\n\n// MIN/MAX\nfunc min(x: ndarray) -> Double{\n    // finds the min\n    return x.min()}\nfunc max(x: ndarray) -> Double{\n    // finds the max\n    return x.max()}\nfunc max(x: ndarray, y:ndarray)->ndarray{\n    // finds the max of two arrays element wise\n    assert(x.n == y.n)\n    let z = zeros_like(x)\n    vDSP_vmaxD(!x, 1.stride, !y, 1.stride, !z, 1.stride, x.n.length)\n    return z\n}\nfunc min(x: ndarray, y:ndarray)->ndarray{\n    // finds the min of two arrays element wise\n    assert(x.n == y.n)\n    let z = zeros_like(x)\n    vDSP_vminD(!x, 1.stride, !y, 1.stride, !z, 1.stride, x.n.length)\n    return z\n}\n\n// BASIC STATS\nfunc mean(x: ndarray) -> Double{\n    // finds the mean\n    return x.mean()\n}\nfunc std(x: ndarray) -> Double{\n    // standard deviation\n    return sqrt(variance(x))}\nfunc variance(x: ndarray) -> Double{\n    // the varianace\n    return sum(pow(x - mean(x), power: 2) / x.count.double)}\n\n// BASIC INFO\nfunc sign(x: ndarray)->ndarray{\n    // finds the sign\n    return apply_function(\"sign\", x: x)}\nfunc sum(x: ndarray) -> Double{\n    // finds the sum of an array\n    var ret:CDouble = 0\n    vDSP_sveD(!x, 1.stride, &ret, x.n.length)\n    return Double(ret)\n}\nfunc remainder(x1:ndarray, x2:ndarray)->ndarray{\n    // finds the remainder\n    return (x1 - floor(x1 / x2) * x2)\n}\nfunc cumsum(x: ndarray) -> ndarray{\n    // the sum of each element before.\n    return apply_function(\"cumsum\", x: x)}\nfunc abs(x: ndarray) -> ndarray{\n    // absolute value\n    return apply_function(\"abs\", x: x)}\nfunc prod(x:ndarray)->Double{\n    var y = x.copy()\n    var factor = 1.0\n    if min(y) < 0{\n        y[argwhere(y < 0.0)] *= -1.0\n        if sum(x < 0) % 2 == 1 {factor = -1}\n    }\n    return factor * exp(sum(log(y)))\n}\nfunc cumprod(x:ndarray)->ndarray{\n    var y = x.copy()\n    if min(y) < 0.0{\n        let i = y < 0\n        y[argwhere(i)] *= -1.0\n        let j = 1 - (cumsum(i) % 2.0) < S2_THRESHOLD\n        var z = exp(cumsum(log(y)))\n        z[argwhere(j)] *= -1.0\n        return z\n    }\n    return exp(cumsum(log(y)))\n}\n\n\n// POWER FUNCTIONS\nfunc pow(x:ndarray, power:Double)->ndarray{\n    // take the power. also callable with ^\n    let y = zeros_like(x)\n    CVWrapper.pow(!x, n:x.n.cint, power:power, into:!y)\n    return y\n}\nfunc pow(x:ndarray, y:ndarray)->ndarray{\n    // take the power. also callable with ^\n    let z = zeros_like(x)\n    var num = CInt(x.n)\n    vvpow(!z, !y, !x, &num)\n    return z\n}\nfunc pow(x:Double, y:ndarray)->ndarray{\n    // take the power. also callable with ^\n    let xx = ones(y.n) * x\n    return pow(xx, y: y)\n}\nfunc sqrt(x: ndarray) -> ndarray{\n    return x^0.5\n}\nfunc exp(x:ndarray)->ndarray{\n    return apply_function(\"exp\", x: x)\n}\nfunc exp2(x:ndarray)->ndarray{\n    return apply_function(\"exp2\", x: x)\n}\nfunc expm1(x:ndarray)->ndarray{\n    return apply_function(\"expm1\", x: x)\n}\n\n// ROUND\nfunc round(x:ndarray)->ndarray{\n    return apply_function(\"round\", x: x)\n}\nfunc round(x:ndarray, decimals:Double)->ndarray{\n    let factor = pow(10, decimals)\n    return round(x*factor) / factor\n}\nfunc floor(x: ndarray) -> ndarray{\n    return apply_function(\"floor\", x: x)\n}\nfunc ceil(x: ndarray) -> ndarray{\n    return apply_function(\"ceil\", x: x)\n}\n\n// LOG\nfunc log10(x:ndarray)->ndarray{\n    // log_10\n    return apply_function(\"log10\", x: x)\n}\nfunc log2(x:ndarray)->ndarray{\n    // log_2\n    return apply_function(\"log2\", x: x)\n}\nfunc log(x:ndarray)->ndarray{\n    // log_e\n    return apply_function(\"log\", x: x)\n}\n\n// TRIG\nfunc sin(x: ndarray) -> ndarray{\n    return apply_function(\"sin\", x: x)\n}\nfunc cos(x: ndarray) -> ndarray{\n    return apply_function(\"cos\", x: x)\n}\nfunc tan(x: ndarray) -> ndarray{\n    return apply_function(\"tan\", x: x)\n}\nfunc tanh(x: ndarray) -> ndarray {\n    return apply_function(\"tanh\", x: x)\n}\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/numbers.swift",
    "content": "//\n//  constants.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\n// should point to the swift folder\nlet S2_PREFIX = \"\\(NSHomeDirectory())/Developer/swix/swix/swix/swix/\"\nlet PYTHON_PATH = \"~/anaconda/bin/ipython\"\n\n// how close is close?\nlet S2_THRESHOLD = 1e-9\n\n// The random seed\nvar SWIX_SEED:__CLPK_integer = 42\n\n// various important constants\nvar pi = 3.1415926535897932384626433832795028841971693993751058\nvar π = pi\nvar tau = 2 * pi\nvar τ = tau\nvar phi = (1.0 + sqrt(5))/2\nvar φ = phi\nvar e = exp(1.double)\nvar euler = 0.57721566490153286060651209008240243104215933593992\n\n// largest possible value\nvar inf = Double.infinity\nvar nan = Double.NaN\n\n// smallest possible difference\nvar DOUBLE_EPSILON = DBL_EPSILON\nvar FLOAT_EPSILON = FLT_EPSILON\n\nfunc close(x: Double, y: Double)->Bool{\n    return abs(x-y) < S2_THRESHOLD\n}\nfunc ~= (x:Double, y:Double)->Bool{\n    return close(x, y: y)\n}\nfunc rad2deg(x:Double)->Double{\n    return x * 180.0 / pi\n}\nfunc deg2rad(x:Double)->Double{\n    return x * pi / 180.0\n}\nfunc max(x:Double, y:Double)->Double{\n    return x < y ? y : x\n}\nfunc min(x:Double, y:Double)->Double{\n    return x < y ? x : y\n}\nfunc factorial(n:Double)->Double{\n    let y = arange(n)+1\n    return prod(y)\n}\nfunc binom(n:Double, k:Double)->Double{\n    // similar to scipy.special.binom\n    let i = arange(k)+1\n    let result = (n+1-i) / i\n    return prod(result)\n}\n\n// use 3.double or 3.14.int or N.int\nextension Int{\n    var stride:vDSP_Stride {return vDSP_Stride(self)}\n    var length:vDSP_Length {return vDSP_Length(self)}\n    var int:Int {return Int(self)}\n    var cint:CInt {return CInt(self)}\n    var float:Float {return Float(self)}\n    var double:Double {return Double(self)}\n}\nextension Double{\n    var int:Int {return Int(self)}\n    var float:Float {return Float(self)}\n    var double:Double {return Double(self)}\n    var cdouble:CDouble {return CDouble(self)}\n}\nextension CInt{\n    var int:Int {return Int(self)}\n    var float:Float {return Float(self)}\n    var double:Double {return Double(self)}\n}\nextension Float{\n    var int:Int {return Int(self)}\n    var cfloat:CFloat {return CFloat(self)}\n    var float:Float {return Float(self)}\n    var double:Double {return Double(self)}\n\n}\nextension String {\n    var floatValue: Float {\n        return (self as NSString).floatValue\n    }\n    var doubleValue: Double {\n        return (self as NSString).doubleValue\n    }\n    var nsstring:NSString {return NSString(string:self)}\n}\n\n// damn integer division causes headaches\ninfix operator  / {associativity none precedence 140}\nfunc / (lhs: Int, rhs: Int) -> Double{\n    return lhs.double / rhs.double}\nfunc / (lhs: Double, rhs: Int) -> Double{\n    return lhs / rhs.double}\n\n// a quick hack to get what I want\nfunc isNumber(x: Double)   ->Bool{return true}\nfunc isNumber(x: Float)    ->Bool{return true}\nfunc isNumber(x: Int)      ->Bool{return true}\nfunc isNumber(x: CInt)     ->Bool{return true}\nfunc isNumber(x: ndarray)   ->Bool{return false}\nfunc isNumber(x: matrix) ->Bool{return false}\nfunc isNumber(x: AnyObject)->Bool{return false}\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/OpenCV.h",
    "content": "//\n//  fft.m\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Accelerate/Accelerate.h>\n\n#import <opencv2/opencv.hpp>\n#import <opencv2/core/core.hpp>\n#import <opencv2/highgui/highgui.hpp>\n#import <opencv2/ml/ml.hpp>\n\n@interface CVWrapper : NSObject\n+ (void) pointerTest;\n+ (void) repeat:(double *)x to:(double*)y n_x:(int)Nx n_repeat:(int)Nrepeat;\n+ (void) solve:(double *)A b:(double*)b x:(double*)x m:(int)m n:(int)n;\n+ (void) compare:(double*)x with:(double*)y using:(NSString*)op into:(double*)z ofLength:(int)N;\n+ (void) compare:(double*)x withDouble:(double)y\n           using:(NSString*)op into:(double*)z ofLength:(int)N;\n+ (void) flip:(double*)x into:(double*)y how:(NSString*)how M:(int)M N:(int)N;\n+ (void) argmax:(double*)x N:(int)N max:(int*)max;\n+ (void) argmin:(double*)x N:(int)N min:(int*)min;\n+ (void) argsort:(double*)x N:(int)N into:(int*)y;\n+ (void) pow:(double*)x N:(int)N power:(double)power into:(double*)y;\n+ (void) shuffle:(double*)x n:(int)n;\n+ (void) det:(double*)x n:(int)N m:(int)M result:(double*)result;\n\n@end\n\n// #### SVM (svm.mm)\n@interface cvSVM : NSObject{\n}\n- (void) train:(double *)x targets:(double *)targets m:(int)M n:(int)N;\n- (float) predict:(double *)x n:(int)N;\n- (double*) predict:(double*)x into:(double*)y m:(int)M n:(int)N;\n-(void)setParams:(NSString*)svm_type kernel:(NSString*)kernel nu:(float)nu;\n@end\n\n// #### k nearest neighbors (knn.mm)\n@interface kNN : NSObject{\n}\n- (void) train:(double *)x targets:(double *)tar m:(int)M n:(int)N;\n- (double) predict:(double *)x n:(int)N k:(int)k;\n@end"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/conversion.swift",
    "content": "//\n//  conversion.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/11/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\n\nfunc matrixToPointer(x: ndarray)->UnsafeMutablePointer<Double>{\n    // sustains since objc rewrites raw memory!\n    return UnsafeMutablePointer<Double>(x.grid)\n}\nfunc matrixToPointer(x: [Int])->UnsafeMutablePointer<Int>{\n    return UnsafeMutablePointer<Int>(x)\n}\n\n/// use !x to get the address. I tried &x but that doesn't work in beta3.\nprefix func ! (x: ndarray) -> UnsafeMutablePointer<Double> {\n    return matrixToPointer(x)\n}\nprefix func ! (x: matrix) -> UnsafeMutablePointer<Double> {\n    return matrixToPointer(x.flat)\n}\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/machine_learning.mm",
    "content": "//\n//  svm.m\n//  swix\n//\n//  Created by Scott Sievert on 7/16/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"OpenCV.h\"\n#import \"swix-Bridging-Header.h\"\nusing namespace cv;\n\nvoid doubleToFloat(double * x, float * y, int N){\n    vDSP_vdpsp(x, 1, y, 1, N);\n}\n\n// #### STATE VECTOR MACHINE\n@implementation cvSVM : NSObject\nCvSVM ocvSVM;\nCvSVMParams params;\nint N; // number of variables\nint M; // number of responses\nvoid copy_float_to_double(float* x, double* y, int N){\n    vDSP_vspdp(x, 1, y, 1, N);\n}\nvoid copy_float(float* x, float * y, int N){\n    cblas_scopy(N, x, 1, y, 1);\n}\n-(void)setParams:(NSString*)svm_type kernel:(NSString*)kernel nu:(float)nu{\n    if ([svm_type isEqualToString:@\"C_SVC\"])\n        { params.svm_type = CvSVM::C_SVC; }\n    else if ([svm_type isEqualToString:@\"ONE_CLASS\"])\n        { params.svm_type = CvSVM::ONE_CLASS;}\n    else if ([svm_type isEqualToString:@\"NU_SVC\"])\n        { params.svm_type = CvSVM::NU_SVC;}\n    else if ([svm_type isEqualToString:@\"NU_SVR\"])\n        { params.svm_type = CvSVM::NU_SVR;}\n    \n    if ([kernel isEqualToString:@\"LINEAR\"])\n        { params.kernel_type = CvSVM::LINEAR;}\n    else if ([kernel isEqualToString:@\"SIGMOID\"])\n        { params.kernel_type = CvSVM::SIGMOID;}\n    \n    params.nu = nu;\n}\n-(NSObject*)init{\n    params.svm_type    = CvSVM::C_SVC;\n    params.kernel_type = CvSVM::LINEAR;\n    params.term_crit   = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);\n    return self;\n}\n-(void) train:(double *)x targets:(double *)targets m:(int)M n:(int)N{\n    // M is the number of responses or rows; N is columns or variables\n    float * x2 = (float *)malloc(sizeof(float) * M * N);\n    float * t2 = (float *)malloc(sizeof(float) * M);\n    doubleToFloat(x, x2, M*N);\n    doubleToFloat(targets, t2, M*1);\n    Mat xMat(M, N, CV_32FC1, x2);\n    Mat tMat(M, 1, CV_32FC1, t2);\n    Mat x3 = Mat();\n    ocvSVM.train(xMat, tMat, x3, x3, params);\n}\n- (float) predict:(double *)x n:(int)N{\n    float * x2 = (float *)malloc(sizeof(float) * 1 * N);\n    doubleToFloat(x, x2, N);\n    Mat xMat(1, N, CV_32FC1, x2);\n    float targetPredict = ocvSVM.predict(xMat);\n    return targetPredict;\n}\n- (double*) predict:(double*)x into:(double*)y m:(int)M n:(int)N{\n    float * x2 = (float *)malloc(sizeof(float) * M * N);\n    doubleToFloat(x, x2, M*N);\n    float* y2 = (float *)malloc(sizeof(float) * M);\n    Mat xMat(M, N, CV_32FC1, x2);\n    Mat yMat(M, 1, CV_32FC1, y2);\n    \n    ocvSVM.predict(xMat, yMat);\n    copy_float_to_double(y2, y, M);\n    return y;\n}\n@end\n\n// #### STATE VECTOR MACHINE\n@implementation kNN : NSObject\nint kN;\nint kM;\n\nCvKNearest cvknn;\n\n-(NSObject*)init{\n    return self;\n}\n\n- (void) train:(double *)x targets:(double *)tar m:(int)M n:(int)N{\n    float * x2 = (float *)malloc(sizeof(float) * M * N);\n    float * t2 = (float *)malloc(sizeof(float) * M * 1);\n    Mat x3(M, N, CV_32FC1, x2);\n    Mat t3(M, 1, CV_32FC1, t2);\n    \n    cvknn.train(x3, t3);\n}\n- (double) predict:(double *)x n:(int)N k:(int)k{\n    float * x2 = (float *)malloc(sizeof(float) * N * 1);\n    Mat x3(1, N, CV_32FC1, x2);\n    Mat results(1, 1, CV_32FC1);\n    float targetPredict = -3.14;\n    targetPredict = cvknn.find_nearest(x3, k, &results);\n    \n    std::cout << results << std::endl;\n    std::cout << results.at<double>(0,0) << std::endl;\n    return results.at<double>(0,0);\n}\n@end\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/math.m",
    "content": "//\n//  fft.m\n//  swix\n//\n//  Created by Scott Sievert on 7/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Accelerate/Accelerate.h>\n\nvoid svd_objc(double * xx, int m, int n, double* s, double* vt, double* u, int compute_uv){\n    // adapted from the buggy code at http://stackoverflow.com/questions/5047503/lapack-svd-singular-value-decomposition\n    \n    char job;\n    if      (compute_uv == 0) job = 'N';\n    else if (compute_uv == 1) job = 'A';\n    \n    __CLPK_integer lda = (__CLPK_integer)m;\n    long numberOfSingularValues = m < n ? m : n;\n    \n    // Workspace and status variables:\n    __CLPK_integer _n = n;\n    __CLPK_integer _m = m;\n    double* work = (double*)malloc(sizeof(double) * 2);\n    __CLPK_integer lwork = -1;\n    __CLPK_integer * iwork = (__CLPK_integer *)malloc(sizeof(__CLPK_integer) * 8 * numberOfSingularValues);\n    __CLPK_integer info = 0;\n    \n    // Call dgesdd_ with lwork = -1 to query optimal workspace size:\n    dgesdd_(&job, &_m, &_n, xx, &lda, s, u, &_m, vt, &_n, work, &lwork, iwork, &info);\n    \n    // Optimal workspace size is returned in work[0].\n    lwork = work[0];\n    free(work);\n    work = (double *)malloc(lwork * sizeof(double));\n    \n    // Call dgesdd_ to do the actual computation:\n    dgesdd_(&job, &_m, &_n, xx, &lda, s, u, &_m, vt, &_n, work, &lwork, iwork, &info);\n    \n    free(work);\n    free(iwork);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv.mm",
    "content": "//\n//  knn.m\n//  swix\n//\n//  Created by Scott Sievert on 7/1/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Accelerate/Accelerate.h>\n\n#import <opencv2/core/core.hpp>\n#import <opencv2/highgui/highgui.hpp>\n#import <opencv2/ml/ml.hpp>\n\n#import \"OpenCV.h\"\nusing namespace cv;\n\nvoid copy(Mat x, double * y, int N);\n@implementation CVWrapper\n+ (void) pointerTest{\n    // to test whether a matrix copies to the pointer\n    // makes sense; the raw values have to be stored somewhere\n    // it does not make sense that repeat( , 1, r, ) vs repeat( , r , 1) has a difference in shared data\n    int N = 3;\n    int r = 2;\n    double * x = (double *)malloc(sizeof(double)* N);\n    double * y = (double *)malloc(sizeof(double)* N * r);\n    for (int i=0; i<N; i++) x[i] = i;\n    Mat xMat(N, 1, CV_64F, x);\n    Mat yMat(N * r, 1, CV_64F, y);\n\n    repeat(xMat, r, 1, yMat);\n    \n    std::cout << yMat << std::endl;\n    for (int i=0; i<N * r; i++) printf(\"%f, \", y[i]);\n    printf(\"\\n\");\n}\n+ (void) flip:(double*)x into:(double*)y how:(NSString*)how M:(int)M N:(int)N{\n    Mat xMat(M, N, CV_64F, x);\n    Mat yMat(M, N, CV_64F, y);\n    int direction=0;\n    if ([how isEqualToString:@\"ud\"]) direction=0;\n    if ([how isEqualToString:@\"lr\"]) direction=1;\n    \n    flip(xMat, yMat, direction);\n}\n+ (void) repeat:(double *)x to:(double *)y\n            n_x:(int)n_x n_repeat:(int)n_repeat{\n    Mat xMat(n_x, 1, CV_64F, x);\n    Mat yMat(n_x * n_repeat, 1, CV_64F, y);\n    \n    repeat(xMat, n_repeat, 1, yMat);\n}\n+ (void) solve:(double *)A b:(double*)b x:(double*)x m:(int)m n:(int)n{\n    Mat Amat(m, n, CV_64F, A);\n    Mat bMat(m, 1, CV_64F, b);\n    Mat xMat(n, 1, CV_64F, x);\n    solve(Amat, bMat, xMat);\n}\n+ (void) compare:(double*)x with:(double*)y\n           using:(NSString*)op into:(double*)z ofLength:(int)N{\n    // this isn't working.\n    // instead, I can do threshold(abs(x - y), 1e-9)\n    \n    // threshold: vDSP_vthrscD\n    // abs can be vectorized, - vectorized\n    Mat xMat(1, N, CV_64F, x);\n    Mat yMat(1, N, CV_64F, y);\n    Mat zMat;\n    if      ([op isEqualToString:@\"<\"  ]) {zMat = xMat < yMat;}\n    else if ([op isEqualToString:@\">\"  ]) {zMat = xMat > yMat;}\n    else if ([op isEqualToString:@\"<=\" ]) {zMat = xMat <= yMat;}\n    else if ([op isEqualToString:@\">=\" ]) {zMat = xMat >= yMat;}\n    else if ([op isEqualToString:@\"==\" ]) {zMat = xMat == yMat;}\n    else if ([op isEqualToString:@\"!==\"]) {compare(xMat, yMat, zMat, CMP_NE);}\n    else printf(\"*** Careful! Your operation isn't recognized!\\n\");\n    matArgWhereConvert(zMat, z, N);\n}\n+ (void) compare:(double*)x withDouble:(double)y\n           using:(NSString*)op into:(double*)z ofLength:(int)N{\n    \n    // this isn't working.\n    // instead, I can do threshold(abs(x - y), 1e-9)\n    \n    // threshold: vDSP_vthrscD\n    Mat xMat(1, N, CV_64F, x);\n    Mat zMat;\n    if      ([op isEqualToString:@\"<\"  ]) {zMat = xMat < y;}\n    else if ([op isEqualToString:@\">\"  ]) {zMat = xMat > y;}\n    else if ([op isEqualToString:@\"<=\" ]) {zMat = xMat <= y;}\n    else if ([op isEqualToString:@\">=\" ]) {zMat = xMat >= y;}\n    else if ([op isEqualToString:@\"==\" ]) {zMat = xMat == y;}\n    else if ([op isEqualToString:@\"!==\"]) {compare(xMat, y, zMat, CMP_NE);}\n    else printf(\"*** Careful! Your operation isn't recognized!\\n\");\n    matArgWhereConvert(zMat, z, N);\n}\n\n+ (void) argmax:(double*)x N:(int)N max:(int *)max{\n    Mat xMat(N, 1, CV_64F, x);\n    minMaxIdx(xMat, NULL, NULL, NULL, max);\n}\n+ (void) argmin:(double*)x N:(int)N min:(int *)min{\n    Mat xMat(N, 1, CV_64F, x);\n    minMaxIdx(xMat, NULL, NULL, min, NULL);\n}\n+ (void) argsort:(double*)x N:(int)N into:(int*)y{\n    Mat xMat(N, 1, CV_64F, x);\n    Mat yMat(N, 1, CV_32S, y);\n    sortIdx(xMat, yMat, CV_SORT_ASCENDING + CV_SORT_EVERY_COLUMN);\n}\n+ (void) pow:(double*)x N:(int)N power:(double)power into:(double*)y{\n    Mat xMat(N,1,CV_64F, x);\n    Mat yMat(N,1,CV_64F, y);\n    pow(xMat, power, yMat);\n}\n+ (void) shuffle:(double*)x n:(int)n{\n    Mat xMat(n, 1, CV_64F, x);\n    randShuffle(xMat);\n}\n+ (void) det:(double*)x n:(int)N m:(int)M result:(double*)result{\n    Mat xMat(N, M, CV_64F, x);\n    double r = determinant(xMat);\n    *result = r;\n}\n\nvoid matArgWhereConvert(Mat x, double * y, int N){\n    if  (!x.isContinuous()){\n        printf(\"Careful! The OpenCV::Mat-->double* conversion didn't go well as x is not continuous in memory! (message printed from swix/objc/opencv.mm:matArgWhereConvert)\\n\");\n    }\n    uchar* ptr = x.data;\n    // integer to double conversion\n    vDSP_vfltu8D(ptr, 1, y, 1, N);\n}\nvoid copy(double* x, double * y, int N){\n    cblas_dcopy(N, x, 1, y, 1);\n}\n@end\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/calib3d/calib3d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CALIB3D_HPP__\n#define __OPENCV_CALIB3D_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/****************************************************************************************\\\n*                      Camera Calibration, Pose Estimation and Stereo                    *\n\\****************************************************************************************/\n\ntypedef struct CvPOSITObject CvPOSITObject;\n\n/* Allocates and initializes CvPOSITObject structure before doing cvPOSIT */\nCVAPI(CvPOSITObject*)  cvCreatePOSITObject( CvPoint3D32f* points, int point_count );\n\n\n/* Runs POSIT (POSe from ITeration) algorithm for determining 3d position of\n   an object given its model and projection in a weak-perspective case */\nCVAPI(void)  cvPOSIT(  CvPOSITObject* posit_object, CvPoint2D32f* image_points,\n                       double focal_length, CvTermCriteria criteria,\n                       float* rotation_matrix, float* translation_vector);\n\n/* Releases CvPOSITObject structure */\nCVAPI(void)  cvReleasePOSITObject( CvPOSITObject**  posit_object );\n\n/* updates the number of RANSAC iterations */\nCVAPI(int) cvRANSACUpdateNumIters( double p, double err_prob,\n                                   int model_points, int max_iters );\n\nCVAPI(void) cvConvertPointsHomogeneous( const CvMat* src, CvMat* dst );\n\n/* Calculates fundamental matrix given a set of corresponding points */\n#define CV_FM_7POINT 1\n#define CV_FM_8POINT 2\n\n#define CV_LMEDS 4\n#define CV_RANSAC 8\n\n#define CV_FM_LMEDS_ONLY  CV_LMEDS\n#define CV_FM_RANSAC_ONLY CV_RANSAC\n#define CV_FM_LMEDS CV_LMEDS\n#define CV_FM_RANSAC CV_RANSAC\n\nenum\n{\n    CV_ITERATIVE = 0,\n    CV_EPNP = 1, // F.Moreno-Noguer, V.Lepetit and P.Fua \"EPnP: Efficient Perspective-n-Point Camera Pose Estimation\"\n    CV_P3P = 2 // X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; \"Complete Solution Classification for the Perspective-Three-Point Problem\"\n};\n\nCVAPI(int) cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,\n                                 CvMat* fundamental_matrix,\n                                 int method CV_DEFAULT(CV_FM_RANSAC),\n                                 double param1 CV_DEFAULT(3.), double param2 CV_DEFAULT(0.99),\n                                 CvMat* status CV_DEFAULT(NULL) );\n\n/* For each input point on one of images\n   computes parameters of the corresponding\n   epipolar line on the other image */\nCVAPI(void) cvComputeCorrespondEpilines( const CvMat* points,\n                                         int which_image,\n                                         const CvMat* fundamental_matrix,\n                                         CvMat* correspondent_lines );\n\n/* Triangulation functions */\n\nCVAPI(void) cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2,\n                                CvMat* projPoints1, CvMat* projPoints2,\n                                CvMat* points4D);\n\nCVAPI(void) cvCorrectMatches(CvMat* F, CvMat* points1, CvMat* points2,\n                             CvMat* new_points1, CvMat* new_points2);\n\n\n/* Computes the optimal new camera matrix according to the free scaling parameter alpha:\n   alpha=0 - only valid pixels will be retained in the undistorted image\n   alpha=1 - all the source image pixels will be retained in the undistorted image\n*/\nCVAPI(void) cvGetOptimalNewCameraMatrix( const CvMat* camera_matrix,\n                                         const CvMat* dist_coeffs,\n                                         CvSize image_size, double alpha,\n                                         CvMat* new_camera_matrix,\n                                         CvSize new_imag_size CV_DEFAULT(cvSize(0,0)),\n                                         CvRect* valid_pixel_ROI CV_DEFAULT(0),\n                                         int center_principal_point CV_DEFAULT(0));\n\n/* Converts rotation vector to rotation matrix or vice versa */\nCVAPI(int) cvRodrigues2( const CvMat* src, CvMat* dst,\n                         CvMat* jacobian CV_DEFAULT(0) );\n\n/* Finds perspective transformation between the object plane and image (view) plane */\nCVAPI(int) cvFindHomography( const CvMat* src_points,\n                             const CvMat* dst_points,\n                             CvMat* homography,\n                             int method CV_DEFAULT(0),\n                             double ransacReprojThreshold CV_DEFAULT(3),\n                             CvMat* mask CV_DEFAULT(0));\n\n/* Computes RQ decomposition for 3x3 matrices */\nCVAPI(void) cvRQDecomp3x3( const CvMat *matrixM, CvMat *matrixR, CvMat *matrixQ,\n                           CvMat *matrixQx CV_DEFAULT(NULL),\n                           CvMat *matrixQy CV_DEFAULT(NULL),\n                           CvMat *matrixQz CV_DEFAULT(NULL),\n                           CvPoint3D64f *eulerAngles CV_DEFAULT(NULL));\n\n/* Computes projection matrix decomposition */\nCVAPI(void) cvDecomposeProjectionMatrix( const CvMat *projMatr, CvMat *calibMatr,\n                                         CvMat *rotMatr, CvMat *posVect,\n                                         CvMat *rotMatrX CV_DEFAULT(NULL),\n                                         CvMat *rotMatrY CV_DEFAULT(NULL),\n                                         CvMat *rotMatrZ CV_DEFAULT(NULL),\n                                         CvPoint3D64f *eulerAngles CV_DEFAULT(NULL));\n\n/* Computes d(AB)/dA and d(AB)/dB */\nCVAPI(void) cvCalcMatMulDeriv( const CvMat* A, const CvMat* B, CvMat* dABdA, CvMat* dABdB );\n\n/* Computes r3 = rodrigues(rodrigues(r2)*rodrigues(r1)),\n   t3 = rodrigues(r2)*t1 + t2 and the respective derivatives */\nCVAPI(void) cvComposeRT( const CvMat* _rvec1, const CvMat* _tvec1,\n                         const CvMat* _rvec2, const CvMat* _tvec2,\n                         CvMat* _rvec3, CvMat* _tvec3,\n                         CvMat* dr3dr1 CV_DEFAULT(0), CvMat* dr3dt1 CV_DEFAULT(0),\n                         CvMat* dr3dr2 CV_DEFAULT(0), CvMat* dr3dt2 CV_DEFAULT(0),\n                         CvMat* dt3dr1 CV_DEFAULT(0), CvMat* dt3dt1 CV_DEFAULT(0),\n                         CvMat* dt3dr2 CV_DEFAULT(0), CvMat* dt3dt2 CV_DEFAULT(0) );\n\n/* Projects object points to the view plane using\n   the specified extrinsic and intrinsic camera parameters */\nCVAPI(void) cvProjectPoints2( const CvMat* object_points, const CvMat* rotation_vector,\n                              const CvMat* translation_vector, const CvMat* camera_matrix,\n                              const CvMat* distortion_coeffs, CvMat* image_points,\n                              CvMat* dpdrot CV_DEFAULT(NULL), CvMat* dpdt CV_DEFAULT(NULL),\n                              CvMat* dpdf CV_DEFAULT(NULL), CvMat* dpdc CV_DEFAULT(NULL),\n                              CvMat* dpddist CV_DEFAULT(NULL),\n                              double aspect_ratio CV_DEFAULT(0));\n\n/* Finds extrinsic camera parameters from\n   a few known corresponding point pairs and intrinsic parameters */\nCVAPI(void) cvFindExtrinsicCameraParams2( const CvMat* object_points,\n                                          const CvMat* image_points,\n                                          const CvMat* camera_matrix,\n                                          const CvMat* distortion_coeffs,\n                                          CvMat* rotation_vector,\n                                          CvMat* translation_vector,\n                                          int use_extrinsic_guess CV_DEFAULT(0) );\n\n/* Computes initial estimate of the intrinsic camera parameters\n   in case of planar calibration target (e.g. chessboard) */\nCVAPI(void) cvInitIntrinsicParams2D( const CvMat* object_points,\n                                     const CvMat* image_points,\n                                     const CvMat* npoints, CvSize image_size,\n                                     CvMat* camera_matrix,\n                                     double aspect_ratio CV_DEFAULT(1.) );\n\n#define CV_CALIB_CB_ADAPTIVE_THRESH  1\n#define CV_CALIB_CB_NORMALIZE_IMAGE  2\n#define CV_CALIB_CB_FILTER_QUADS     4\n#define CV_CALIB_CB_FAST_CHECK       8\n\n// Performs a fast check if a chessboard is in the input image. This is a workaround to\n// a problem of cvFindChessboardCorners being slow on images with no chessboard\n// - src: input image\n// - size: chessboard size\n// Returns 1 if a chessboard can be in this image and findChessboardCorners should be called,\n// 0 if there is no chessboard, -1 in case of error\nCVAPI(int) cvCheckChessboard(IplImage* src, CvSize size);\n\n    /* Detects corners on a chessboard calibration pattern */\nCVAPI(int) cvFindChessboardCorners( const void* image, CvSize pattern_size,\n                                    CvPoint2D32f* corners,\n                                    int* corner_count CV_DEFAULT(NULL),\n                                    int flags CV_DEFAULT(CV_CALIB_CB_ADAPTIVE_THRESH+CV_CALIB_CB_NORMALIZE_IMAGE) );\n\n/* Draws individual chessboard corners or the whole chessboard detected */\nCVAPI(void) cvDrawChessboardCorners( CvArr* image, CvSize pattern_size,\n                                     CvPoint2D32f* corners,\n                                     int count, int pattern_was_found );\n\n#define CV_CALIB_USE_INTRINSIC_GUESS  1\n#define CV_CALIB_FIX_ASPECT_RATIO     2\n#define CV_CALIB_FIX_PRINCIPAL_POINT  4\n#define CV_CALIB_ZERO_TANGENT_DIST    8\n#define CV_CALIB_FIX_FOCAL_LENGTH 16\n#define CV_CALIB_FIX_K1  32\n#define CV_CALIB_FIX_K2  64\n#define CV_CALIB_FIX_K3  128\n#define CV_CALIB_FIX_K4  2048\n#define CV_CALIB_FIX_K5  4096\n#define CV_CALIB_FIX_K6  8192\n#define CV_CALIB_RATIONAL_MODEL 16384\n\n/* Finds intrinsic and extrinsic camera parameters\n   from a few views of known calibration pattern */\nCVAPI(double) cvCalibrateCamera2( const CvMat* object_points,\n                                const CvMat* image_points,\n                                const CvMat* point_counts,\n                                CvSize image_size,\n                                CvMat* camera_matrix,\n                                CvMat* distortion_coeffs,\n                                CvMat* rotation_vectors CV_DEFAULT(NULL),\n                                CvMat* translation_vectors CV_DEFAULT(NULL),\n                                int flags CV_DEFAULT(0),\n                                CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria(\n                                    CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,DBL_EPSILON)) );\n\n/* Computes various useful characteristics of the camera from the data computed by\n   cvCalibrateCamera2 */\nCVAPI(void) cvCalibrationMatrixValues( const CvMat *camera_matrix,\n                                CvSize image_size,\n                                double aperture_width CV_DEFAULT(0),\n                                double aperture_height CV_DEFAULT(0),\n                                double *fovx CV_DEFAULT(NULL),\n                                double *fovy CV_DEFAULT(NULL),\n                                double *focal_length CV_DEFAULT(NULL),\n                                CvPoint2D64f *principal_point CV_DEFAULT(NULL),\n                                double *pixel_aspect_ratio CV_DEFAULT(NULL));\n\n#define CV_CALIB_FIX_INTRINSIC  256\n#define CV_CALIB_SAME_FOCAL_LENGTH 512\n\n/* Computes the transformation from one camera coordinate system to another one\n   from a few correspondent views of the same calibration target. Optionally, calibrates\n   both cameras */\nCVAPI(double) cvStereoCalibrate( const CvMat* object_points, const CvMat* image_points1,\n                               const CvMat* image_points2, const CvMat* npoints,\n                               CvMat* camera_matrix1, CvMat* dist_coeffs1,\n                               CvMat* camera_matrix2, CvMat* dist_coeffs2,\n                               CvSize image_size, CvMat* R, CvMat* T,\n                               CvMat* E CV_DEFAULT(0), CvMat* F CV_DEFAULT(0),\n                               CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria(\n                                   CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,1e-6)),\n                               int flags CV_DEFAULT(CV_CALIB_FIX_INTRINSIC));\n\n#define CV_CALIB_ZERO_DISPARITY 1024\n\n/* Computes 3D rotations (+ optional shift) for each camera coordinate system to make both\n   views parallel (=> to make all the epipolar lines horizontal or vertical) */\nCVAPI(void) cvStereoRectify( const CvMat* camera_matrix1, const CvMat* camera_matrix2,\n                             const CvMat* dist_coeffs1, const CvMat* dist_coeffs2,\n                             CvSize image_size, const CvMat* R, const CvMat* T,\n                             CvMat* R1, CvMat* R2, CvMat* P1, CvMat* P2,\n                             CvMat* Q CV_DEFAULT(0),\n                             int flags CV_DEFAULT(CV_CALIB_ZERO_DISPARITY),\n                             double alpha CV_DEFAULT(-1),\n                             CvSize new_image_size CV_DEFAULT(cvSize(0,0)),\n                             CvRect* valid_pix_ROI1 CV_DEFAULT(0),\n                             CvRect* valid_pix_ROI2 CV_DEFAULT(0));\n\n/* Computes rectification transformations for uncalibrated pair of images using a set\n   of point correspondences */\nCVAPI(int) cvStereoRectifyUncalibrated( const CvMat* points1, const CvMat* points2,\n                                        const CvMat* F, CvSize img_size,\n                                        CvMat* H1, CvMat* H2,\n                                        double threshold CV_DEFAULT(5));\n\n\n\n/* stereo correspondence parameters and functions */\n\n#define CV_STEREO_BM_NORMALIZED_RESPONSE  0\n#define CV_STEREO_BM_XSOBEL               1\n\n/* Block matching algorithm structure */\ntypedef struct CvStereoBMState\n{\n    // pre-filtering (normalization of input images)\n    int preFilterType; // =CV_STEREO_BM_NORMALIZED_RESPONSE now\n    int preFilterSize; // averaging window size: ~5x5..21x21\n    int preFilterCap; // the output of pre-filtering is clipped by [-preFilterCap,preFilterCap]\n\n    // correspondence using Sum of Absolute Difference (SAD)\n    int SADWindowSize; // ~5x5..21x21\n    int minDisparity;  // minimum disparity (can be negative)\n    int numberOfDisparities; // maximum disparity - minimum disparity (> 0)\n\n    // post-filtering\n    int textureThreshold;  // the disparity is only computed for pixels\n                           // with textured enough neighborhood\n    int uniquenessRatio;   // accept the computed disparity d* only if\n                           // SAD(d) >= SAD(d*)*(1 + uniquenessRatio/100.)\n                           // for any d != d*+/-1 within the search range.\n    int speckleWindowSize; // disparity variation window\n    int speckleRange; // acceptable range of variation in window\n\n    int trySmallerWindows; // if 1, the results may be more accurate,\n                           // at the expense of slower processing\n    CvRect roi1, roi2;\n    int disp12MaxDiff;\n\n    // temporary buffers\n    CvMat* preFilteredImg0;\n    CvMat* preFilteredImg1;\n    CvMat* slidingSumBuf;\n    CvMat* cost;\n    CvMat* disp;\n} CvStereoBMState;\n\n#define CV_STEREO_BM_BASIC 0\n#define CV_STEREO_BM_FISH_EYE 1\n#define CV_STEREO_BM_NARROW 2\n\nCVAPI(CvStereoBMState*) cvCreateStereoBMState(int preset CV_DEFAULT(CV_STEREO_BM_BASIC),\n                                              int numberOfDisparities CV_DEFAULT(0));\n\nCVAPI(void) cvReleaseStereoBMState( CvStereoBMState** state );\n\nCVAPI(void) cvFindStereoCorrespondenceBM( const CvArr* left, const CvArr* right,\n                                          CvArr* disparity, CvStereoBMState* state );\n\nCVAPI(CvRect) cvGetValidDisparityROI( CvRect roi1, CvRect roi2, int minDisparity,\n                                      int numberOfDisparities, int SADWindowSize );\n\nCVAPI(void) cvValidateDisparity( CvArr* disparity, const CvArr* cost,\n                                 int minDisparity, int numberOfDisparities,\n                                 int disp12MaxDiff CV_DEFAULT(1) );\n\n/* Reprojects the computed disparity image to the 3D space using the specified 4x4 matrix */\nCVAPI(void)  cvReprojectImageTo3D( const CvArr* disparityImage,\n                                   CvArr* _3dImage, const CvMat* Q,\n                                   int handleMissingValues CV_DEFAULT(0) );\n\n\n#ifdef __cplusplus\n}\n\n//////////////////////////////////////////////////////////////////////////////////////////\nclass CV_EXPORTS CvLevMarq\n{\npublic:\n    CvLevMarq();\n    CvLevMarq( int nparams, int nerrs, CvTermCriteria criteria=\n              cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),\n              bool completeSymmFlag=false );\n    ~CvLevMarq();\n    void init( int nparams, int nerrs, CvTermCriteria criteria=\n              cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),\n              bool completeSymmFlag=false );\n    bool update( const CvMat*& param, CvMat*& J, CvMat*& err );\n    bool updateAlt( const CvMat*& param, CvMat*& JtJ, CvMat*& JtErr, double*& errNorm );\n\n    void clear();\n    void step();\n    enum { DONE=0, STARTED=1, CALC_J=2, CHECK_ERR=3 };\n\n    cv::Ptr<CvMat> mask;\n    cv::Ptr<CvMat> prevParam;\n    cv::Ptr<CvMat> param;\n    cv::Ptr<CvMat> J;\n    cv::Ptr<CvMat> err;\n    cv::Ptr<CvMat> JtJ;\n    cv::Ptr<CvMat> JtJN;\n    cv::Ptr<CvMat> JtErr;\n    cv::Ptr<CvMat> JtJV;\n    cv::Ptr<CvMat> JtJW;\n    double prevErrNorm, errNorm;\n    int lambdaLg10;\n    CvTermCriteria criteria;\n    int state;\n    int iters;\n    bool completeSymmFlag;\n};\n\nnamespace cv\n{\n//! converts rotation vector to rotation matrix or vice versa using Rodrigues transformation\nCV_EXPORTS_W void Rodrigues(InputArray src, OutputArray dst, OutputArray jacobian=noArray());\n\n//! type of the robust estimation algorithm\nenum\n{\n    LMEDS=CV_LMEDS, //!< least-median algorithm\n    RANSAC=CV_RANSAC //!< RANSAC algorithm\n};\n\n//! computes the best-fit perspective transformation mapping srcPoints to dstPoints.\nCV_EXPORTS_W Mat findHomography( InputArray srcPoints, InputArray dstPoints,\n                                 int method=0, double ransacReprojThreshold=3,\n                                 OutputArray mask=noArray());\n\n//! variant of findHomography for backward compatibility\nCV_EXPORTS Mat findHomography( InputArray srcPoints, InputArray dstPoints,\n                               OutputArray mask, int method=0, double ransacReprojThreshold=3);\n\n//! Computes RQ decomposition of 3x3 matrix\nCV_EXPORTS_W Vec3d RQDecomp3x3( InputArray src, OutputArray mtxR, OutputArray mtxQ,\n                                OutputArray Qx=noArray(),\n                                OutputArray Qy=noArray(),\n                                OutputArray Qz=noArray());\n\n//! Decomposes the projection matrix into camera matrix and the rotation martix and the translation vector\nCV_EXPORTS_W void decomposeProjectionMatrix( InputArray projMatrix, OutputArray cameraMatrix,\n                                             OutputArray rotMatrix, OutputArray transVect,\n                                             OutputArray rotMatrixX=noArray(),\n                                             OutputArray rotMatrixY=noArray(),\n                                             OutputArray rotMatrixZ=noArray(),\n                                             OutputArray eulerAngles=noArray() );\n\n//! computes derivatives of the matrix product w.r.t each of the multiplied matrix coefficients\nCV_EXPORTS_W void matMulDeriv( InputArray A, InputArray B,\n                               OutputArray dABdA,\n                               OutputArray dABdB );\n\n//! composes 2 [R|t] transformations together. Also computes the derivatives of the result w.r.t the arguments\nCV_EXPORTS_W void composeRT( InputArray rvec1, InputArray tvec1,\n                             InputArray rvec2, InputArray tvec2,\n                             OutputArray rvec3, OutputArray tvec3,\n                             OutputArray dr3dr1=noArray(), OutputArray dr3dt1=noArray(),\n                             OutputArray dr3dr2=noArray(), OutputArray dr3dt2=noArray(),\n                             OutputArray dt3dr1=noArray(), OutputArray dt3dt1=noArray(),\n                             OutputArray dt3dr2=noArray(), OutputArray dt3dt2=noArray() );\n\n//! projects points from the model coordinate space to the image coordinates. Also computes derivatives of the image coordinates w.r.t the intrinsic and extrinsic camera parameters\nCV_EXPORTS_W void projectPoints( InputArray objectPoints,\n                                 InputArray rvec, InputArray tvec,\n                                 InputArray cameraMatrix, InputArray distCoeffs,\n                                 OutputArray imagePoints,\n                                 OutputArray jacobian=noArray(),\n                                 double aspectRatio=0 );\n\n//! computes the camera pose from a few 3D points and the corresponding projections. The outliers are not handled.\nenum\n{\n    ITERATIVE=CV_ITERATIVE,\n    EPNP=CV_EPNP,\n    P3P=CV_P3P\n};\nCV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints,\n                            InputArray cameraMatrix, InputArray distCoeffs,\n                            OutputArray rvec, OutputArray tvec,\n                            bool useExtrinsicGuess=false, int flags=ITERATIVE);\n\n//! computes the camera pose from a few 3D points and the corresponding projections. The outliers are possible.\nCV_EXPORTS_W void solvePnPRansac( InputArray objectPoints,\n                                  InputArray imagePoints,\n                                  InputArray cameraMatrix,\n                                  InputArray distCoeffs,\n                                  OutputArray rvec,\n                                  OutputArray tvec,\n                                  bool useExtrinsicGuess = false,\n                                  int iterationsCount = 100,\n                                  float reprojectionError = 8.0,\n                                  int minInliersCount = 100,\n                                  OutputArray inliers = noArray(),\n                                  int flags = ITERATIVE);\n\n//! initializes camera matrix from a few 3D points and the corresponding projections.\nCV_EXPORTS_W Mat initCameraMatrix2D( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints,\n                                     Size imageSize, double aspectRatio=1. );\n\nenum { CALIB_CB_ADAPTIVE_THRESH = 1, CALIB_CB_NORMALIZE_IMAGE = 2,\n       CALIB_CB_FILTER_QUADS = 4, CALIB_CB_FAST_CHECK = 8 };\n\n//! finds checkerboard pattern of the specified size in the image\nCV_EXPORTS_W bool findChessboardCorners( InputArray image, Size patternSize,\n                                         OutputArray corners,\n                                         int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE );\n\n//! finds subpixel-accurate positions of the chessboard corners\nCV_EXPORTS bool find4QuadCornerSubpix(InputArray img, InputOutputArray corners, Size region_size);\n\n//! draws the checkerboard pattern (found or partly found) in the image\nCV_EXPORTS_W void drawChessboardCorners( InputOutputArray image, Size patternSize,\n                                         InputArray corners, bool patternWasFound );\n\nenum { CALIB_CB_SYMMETRIC_GRID = 1, CALIB_CB_ASYMMETRIC_GRID = 2,\n       CALIB_CB_CLUSTERING = 4 };\n\n//! finds circles' grid pattern of the specified size in the image\nCV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize,\n                                 OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID,\n                                 const Ptr<FeatureDetector> &blobDetector = new SimpleBlobDetector());\n\n//! the deprecated function. Use findCirclesGrid() instead of it.\nCV_EXPORTS_W bool findCirclesGridDefault( InputArray image, Size patternSize,\n                                          OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID );\nenum\n{\n    CALIB_USE_INTRINSIC_GUESS = CV_CALIB_USE_INTRINSIC_GUESS,\n    CALIB_FIX_ASPECT_RATIO = CV_CALIB_FIX_ASPECT_RATIO,\n    CALIB_FIX_PRINCIPAL_POINT = CV_CALIB_FIX_PRINCIPAL_POINT,\n    CALIB_ZERO_TANGENT_DIST = CV_CALIB_ZERO_TANGENT_DIST,\n    CALIB_FIX_FOCAL_LENGTH = CV_CALIB_FIX_FOCAL_LENGTH,\n    CALIB_FIX_K1 = CV_CALIB_FIX_K1,\n    CALIB_FIX_K2 = CV_CALIB_FIX_K2,\n    CALIB_FIX_K3 = CV_CALIB_FIX_K3,\n    CALIB_FIX_K4 = CV_CALIB_FIX_K4,\n    CALIB_FIX_K5 = CV_CALIB_FIX_K5,\n    CALIB_FIX_K6 = CV_CALIB_FIX_K6,\n    CALIB_RATIONAL_MODEL = CV_CALIB_RATIONAL_MODEL,\n    // only for stereo\n    CALIB_FIX_INTRINSIC = CV_CALIB_FIX_INTRINSIC,\n    CALIB_SAME_FOCAL_LENGTH = CV_CALIB_SAME_FOCAL_LENGTH,\n    // for stereo rectification\n    CALIB_ZERO_DISPARITY = CV_CALIB_ZERO_DISPARITY\n};\n\n//! finds intrinsic and extrinsic camera parameters from several fews of a known calibration pattern.\nCV_EXPORTS_W double calibrateCamera( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints,\n                                     Size imageSize,\n                                     CV_OUT InputOutputArray cameraMatrix,\n                                     CV_OUT InputOutputArray distCoeffs,\n                                     OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs,\n                                     int flags=0, TermCriteria criteria = TermCriteria(\n                                         TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) );\n\n//! computes several useful camera characteristics from the camera matrix, camera frame resolution and the physical sensor size.\nCV_EXPORTS_W void calibrationMatrixValues( InputArray cameraMatrix,\n                                Size imageSize,\n                                double apertureWidth,\n                                double apertureHeight,\n                                CV_OUT double& fovx,\n                                CV_OUT double& fovy,\n                                CV_OUT double& focalLength,\n                                CV_OUT Point2d& principalPoint,\n                                CV_OUT double& aspectRatio );\n\n//! finds intrinsic and extrinsic parameters of a stereo camera\nCV_EXPORTS_W double stereoCalibrate( InputArrayOfArrays objectPoints,\n                                     InputArrayOfArrays imagePoints1,\n                                     InputArrayOfArrays imagePoints2,\n                                     CV_OUT InputOutputArray cameraMatrix1,\n                                     CV_OUT InputOutputArray distCoeffs1,\n                                     CV_OUT InputOutputArray cameraMatrix2,\n                                     CV_OUT InputOutputArray distCoeffs2,\n                                     Size imageSize, OutputArray R,\n                                     OutputArray T, OutputArray E, OutputArray F,\n                                     TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6),\n                                     int flags=CALIB_FIX_INTRINSIC );\n\n\n//! computes the rectification transformation for a stereo camera from its intrinsic and extrinsic parameters\nCV_EXPORTS_W void stereoRectify( InputArray cameraMatrix1, InputArray distCoeffs1,\n                               InputArray cameraMatrix2, InputArray distCoeffs2,\n                               Size imageSize, InputArray R, InputArray T,\n                               OutputArray R1, OutputArray R2,\n                               OutputArray P1, OutputArray P2,\n                               OutputArray Q, int flags=CALIB_ZERO_DISPARITY,\n                               double alpha=-1, Size newImageSize=Size(),\n                               CV_OUT Rect* validPixROI1=0, CV_OUT Rect* validPixROI2=0 );\n\n//! computes the rectification transformation for an uncalibrated stereo camera (zero distortion is assumed)\nCV_EXPORTS_W bool stereoRectifyUncalibrated( InputArray points1, InputArray points2,\n                                             InputArray F, Size imgSize,\n                                             OutputArray H1, OutputArray H2,\n                                             double threshold=5 );\n\n//! computes the rectification transformations for 3-head camera, where all the heads are on the same line.\nCV_EXPORTS_W float rectify3Collinear( InputArray cameraMatrix1, InputArray distCoeffs1,\n                                      InputArray cameraMatrix2, InputArray distCoeffs2,\n                                      InputArray cameraMatrix3, InputArray distCoeffs3,\n                                      InputArrayOfArrays imgpt1, InputArrayOfArrays imgpt3,\n                                      Size imageSize, InputArray R12, InputArray T12,\n                                      InputArray R13, InputArray T13,\n                                      OutputArray R1, OutputArray R2, OutputArray R3,\n                                      OutputArray P1, OutputArray P2, OutputArray P3,\n                                      OutputArray Q, double alpha, Size newImgSize,\n                                      CV_OUT Rect* roi1, CV_OUT Rect* roi2, int flags );\n\n//! returns the optimal new camera matrix\nCV_EXPORTS_W Mat getOptimalNewCameraMatrix( InputArray cameraMatrix, InputArray distCoeffs,\n                                            Size imageSize, double alpha, Size newImgSize=Size(),\n                                            CV_OUT Rect* validPixROI=0, bool centerPrincipalPoint=false);\n\n//! converts point coordinates from normal pixel coordinates to homogeneous coordinates ((x,y)->(x,y,1))\nCV_EXPORTS_W void convertPointsToHomogeneous( InputArray src, OutputArray dst );\n\n//! converts point coordinates from homogeneous to normal pixel coordinates ((x,y,z)->(x/z, y/z))\nCV_EXPORTS_W void convertPointsFromHomogeneous( InputArray src, OutputArray dst );\n\n//! for backward compatibility\nCV_EXPORTS void convertPointsHomogeneous( InputArray src, OutputArray dst );\n\n//! the algorithm for finding fundamental matrix\nenum\n{\n    FM_7POINT = CV_FM_7POINT, //!< 7-point algorithm\n    FM_8POINT = CV_FM_8POINT, //!< 8-point algorithm\n    FM_LMEDS = CV_FM_LMEDS,  //!< least-median algorithm\n    FM_RANSAC = CV_FM_RANSAC  //!< RANSAC algorithm\n};\n\n//! finds fundamental matrix from a set of corresponding 2D points\nCV_EXPORTS_W Mat findFundamentalMat( InputArray points1, InputArray points2,\n                                     int method=FM_RANSAC,\n                                     double param1=3., double param2=0.99,\n                                     OutputArray mask=noArray());\n\n//! variant of findFundamentalMat for backward compatibility\nCV_EXPORTS Mat findFundamentalMat( InputArray points1, InputArray points2,\n                                   OutputArray mask, int method=FM_RANSAC,\n                                   double param1=3., double param2=0.99);\n\n//! finds coordinates of epipolar lines corresponding the specified points\nCV_EXPORTS_W void computeCorrespondEpilines( InputArray points,\n                                             int whichImage, InputArray F,\n                                             OutputArray lines );\n\nCV_EXPORTS_W void triangulatePoints( InputArray projMatr1, InputArray projMatr2,\n                                     InputArray projPoints1, InputArray projPoints2,\n                                     OutputArray points4D );\n\nCV_EXPORTS_W void correctMatches( InputArray F, InputArray points1, InputArray points2,\n                                  OutputArray newPoints1, OutputArray newPoints2 );\n\ntemplate<> CV_EXPORTS void Ptr<CvStereoBMState>::delete_obj();\n\n/*!\n Block Matching Stereo Correspondence Algorithm\n\n The class implements BM stereo correspondence algorithm by K. Konolige.\n*/\nclass CV_EXPORTS_W StereoBM\n{\npublic:\n    enum { PREFILTER_NORMALIZED_RESPONSE = 0, PREFILTER_XSOBEL = 1,\n        BASIC_PRESET=0, FISH_EYE_PRESET=1, NARROW_PRESET=2 };\n\n    //! the default constructor\n    CV_WRAP StereoBM();\n    //! the full constructor taking the camera-specific preset, number of disparities and the SAD window size\n    CV_WRAP StereoBM(int preset, int ndisparities=0, int SADWindowSize=21);\n    //! the method that reinitializes the state. The previous content is destroyed\n    void init(int preset, int ndisparities=0, int SADWindowSize=21);\n    //! the stereo correspondence operator. Finds the disparity for the specified rectified stereo pair\n    CV_WRAP_AS(compute) void operator()( InputArray left, InputArray right,\n                                         OutputArray disparity, int disptype=CV_16S );\n\n    //! pointer to the underlying CvStereoBMState\n    Ptr<CvStereoBMState> state;\n};\n\n\n/*!\n Semi-Global Block Matching Stereo Correspondence Algorithm\n\n The class implements the original SGBM stereo correspondence algorithm by H. Hirschmuller and some its modification.\n */\nclass CV_EXPORTS_W StereoSGBM\n{\npublic:\n    enum { DISP_SHIFT=4, DISP_SCALE = (1<<DISP_SHIFT) };\n\n    //! the default constructor\n    CV_WRAP StereoSGBM();\n\n    //! the full constructor taking all the necessary algorithm parameters\n    CV_WRAP StereoSGBM(int minDisparity, int numDisparities, int SADWindowSize,\n               int P1=0, int P2=0, int disp12MaxDiff=0,\n               int preFilterCap=0, int uniquenessRatio=0,\n               int speckleWindowSize=0, int speckleRange=0,\n               bool fullDP=false);\n    //! the destructor\n    virtual ~StereoSGBM();\n\n    //! the stereo correspondence operator that computes disparity map for the specified rectified stereo pair\n    CV_WRAP_AS(compute) virtual void operator()(InputArray left, InputArray right,\n                                                OutputArray disp);\n\n    CV_PROP_RW int minDisparity;\n    CV_PROP_RW int numberOfDisparities;\n    CV_PROP_RW int SADWindowSize;\n    CV_PROP_RW int preFilterCap;\n    CV_PROP_RW int uniquenessRatio;\n    CV_PROP_RW int P1;\n    CV_PROP_RW int P2;\n    CV_PROP_RW int speckleWindowSize;\n    CV_PROP_RW int speckleRange;\n    CV_PROP_RW int disp12MaxDiff;\n    CV_PROP_RW bool fullDP;\n\nprotected:\n    Mat buffer;\n};\n\n//! filters off speckles (small regions of incorrectly computed disparity)\nCV_EXPORTS_W void filterSpeckles( InputOutputArray img, double newVal, int maxSpeckleSize, double maxDiff,\n                                  InputOutputArray buf=noArray() );\n\n//! computes valid disparity ROI from the valid ROIs of the rectified images (that are returned by cv::stereoRectify())\nCV_EXPORTS_W Rect getValidDisparityROI( Rect roi1, Rect roi2,\n                                        int minDisparity, int numberOfDisparities,\n                                        int SADWindowSize );\n\n//! validates disparity using the left-right check. The matrix \"cost\" should be computed by the stereo correspondence algorithm\nCV_EXPORTS_W void validateDisparity( InputOutputArray disparity, InputArray cost,\n                                     int minDisparity, int numberOfDisparities,\n                                     int disp12MaxDisp=1 );\n\n//! reprojects disparity image to 3D: (x,y,d)->(X,Y,Z) using the matrix Q returned by cv::stereoRectify\nCV_EXPORTS_W void reprojectImageTo3D( InputArray disparity,\n                                      OutputArray _3dImage, InputArray Q,\n                                      bool handleMissingValues=false,\n                                      int ddepth=-1 );\n\nCV_EXPORTS_W  int estimateAffine3D(InputArray src, InputArray dst,\n                                   OutputArray out, OutputArray inliers,\n                                   double ransacThreshold=3, double confidence=0.99);\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/contrib/contrib.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CONTRIB_HPP__\n#define __OPENCV_CONTRIB_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/objdetect/objdetect.hpp\"\n\n#ifdef __cplusplus\n\n/****************************************************************************************\\\n*                                   Adaptive Skin Detector                               *\n\\****************************************************************************************/\n\nclass CV_EXPORTS CvAdaptiveSkinDetector\n{\nprivate:\n    enum {\n        GSD_HUE_LT = 3,\n        GSD_HUE_UT = 33,\n        GSD_INTENSITY_LT = 15,\n        GSD_INTENSITY_UT = 250\n    };\n\n    class CV_EXPORTS Histogram\n    {\n    private:\n        enum {\n            HistogramSize = (GSD_HUE_UT - GSD_HUE_LT + 1)\n        };\n\n    protected:\n        int findCoverageIndex(double surfaceToCover, int defaultValue = 0);\n\n    public:\n        CvHistogram *fHistogram;\n        Histogram();\n        virtual ~Histogram();\n\n        void findCurveThresholds(int &x1, int &x2, double percent = 0.05);\n        void mergeWith(Histogram *source, double weight);\n    };\n\n    int nStartCounter, nFrameCount, nSkinHueLowerBound, nSkinHueUpperBound, nMorphingMethod, nSamplingDivider;\n    double fHistogramMergeFactor, fHuePercentCovered;\n    Histogram histogramHueMotion, skinHueHistogram;\n    IplImage *imgHueFrame, *imgSaturationFrame, *imgLastGrayFrame, *imgMotionFrame, *imgFilteredFrame;\n    IplImage *imgShrinked, *imgTemp, *imgGrayFrame, *imgHSVFrame;\n\nprotected:\n    void initData(IplImage *src, int widthDivider, int heightDivider);\n    void adaptiveFilter();\n\npublic:\n\n    enum {\n        MORPHING_METHOD_NONE = 0,\n        MORPHING_METHOD_ERODE = 1,\n        MORPHING_METHOD_ERODE_ERODE = 2,\n        MORPHING_METHOD_ERODE_DILATE = 3\n    };\n\n    CvAdaptiveSkinDetector(int samplingDivider = 1, int morphingMethod = MORPHING_METHOD_NONE);\n    virtual ~CvAdaptiveSkinDetector();\n\n    virtual void process(IplImage *inputBGRImage, IplImage *outputHueMask);\n};\n\n\n/****************************************************************************************\\\n *                                  Fuzzy MeanShift Tracker                               *\n \\****************************************************************************************/\n\nclass CV_EXPORTS CvFuzzyPoint {\npublic:\n    double x, y, value;\n\n    CvFuzzyPoint(double _x, double _y);\n};\n\nclass CV_EXPORTS CvFuzzyCurve {\nprivate:\n    std::vector<CvFuzzyPoint> points;\n    double value, centre;\n\n    bool between(double x, double x1, double x2);\n\npublic:\n    CvFuzzyCurve();\n    ~CvFuzzyCurve();\n\n    void setCentre(double _centre);\n    double getCentre();\n    void clear();\n    void addPoint(double x, double y);\n    double calcValue(double param);\n    double getValue();\n    void setValue(double _value);\n};\n\nclass CV_EXPORTS CvFuzzyFunction {\npublic:\n    std::vector<CvFuzzyCurve> curves;\n\n    CvFuzzyFunction();\n    ~CvFuzzyFunction();\n    void addCurve(CvFuzzyCurve *curve, double value = 0);\n    void resetValues();\n    double calcValue();\n    CvFuzzyCurve *newCurve();\n};\n\nclass CV_EXPORTS CvFuzzyRule {\nprivate:\n    CvFuzzyCurve *fuzzyInput1, *fuzzyInput2;\n    CvFuzzyCurve *fuzzyOutput;\npublic:\n    CvFuzzyRule();\n    ~CvFuzzyRule();\n    void setRule(CvFuzzyCurve *c1, CvFuzzyCurve *c2, CvFuzzyCurve *o1);\n    double calcValue(double param1, double param2);\n    CvFuzzyCurve *getOutputCurve();\n};\n\nclass CV_EXPORTS CvFuzzyController {\nprivate:\n    std::vector<CvFuzzyRule*> rules;\npublic:\n    CvFuzzyController();\n    ~CvFuzzyController();\n    void addRule(CvFuzzyCurve *c1, CvFuzzyCurve *c2, CvFuzzyCurve *o1);\n    double calcOutput(double param1, double param2);\n};\n\nclass CV_EXPORTS CvFuzzyMeanShiftTracker\n{\nprivate:\n    class FuzzyResizer\n    {\n    private:\n        CvFuzzyFunction iInput, iOutput;\n        CvFuzzyController fuzzyController;\n    public:\n        FuzzyResizer();\n        int calcOutput(double edgeDensity, double density);\n    };\n\n    class SearchWindow\n    {\n    public:\n        FuzzyResizer *fuzzyResizer;\n        int x, y;\n        int width, height, maxWidth, maxHeight, ellipseHeight, ellipseWidth;\n        int ldx, ldy, ldw, ldh, numShifts, numIters;\n        int xGc, yGc;\n        long m00, m01, m10, m11, m02, m20;\n        double ellipseAngle;\n        double density;\n        unsigned int depthLow, depthHigh;\n        int verticalEdgeLeft, verticalEdgeRight, horizontalEdgeTop, horizontalEdgeBottom;\n\n        SearchWindow();\n        ~SearchWindow();\n        void setSize(int _x, int _y, int _width, int _height);\n        void initDepthValues(IplImage *maskImage, IplImage *depthMap);\n        bool shift();\n        void extractInfo(IplImage *maskImage, IplImage *depthMap, bool initDepth);\n        void getResizeAttribsEdgeDensityLinear(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh);\n        void getResizeAttribsInnerDensity(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh);\n        void getResizeAttribsEdgeDensityFuzzy(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh);\n        bool meanShift(IplImage *maskImage, IplImage *depthMap, int maxIteration, bool initDepth);\n    };\n\npublic:\n    enum TrackingState\n    {\n        tsNone          = 0,\n        tsSearching     = 1,\n        tsTracking      = 2,\n        tsSetWindow     = 3,\n        tsDisabled      = 10\n    };\n\n    enum ResizeMethod {\n        rmEdgeDensityLinear     = 0,\n        rmEdgeDensityFuzzy      = 1,\n        rmInnerDensity          = 2\n    };\n\n    enum {\n        MinKernelMass           = 1000\n    };\n\n    SearchWindow kernel;\n    int searchMode;\n\nprivate:\n    enum\n    {\n        MaxMeanShiftIteration   = 5,\n        MaxSetSizeIteration     = 5\n    };\n\n    void findOptimumSearchWindow(SearchWindow &searchWindow, IplImage *maskImage, IplImage *depthMap, int maxIteration, int resizeMethod, bool initDepth);\n\npublic:\n    CvFuzzyMeanShiftTracker();\n    ~CvFuzzyMeanShiftTracker();\n\n    void track(IplImage *maskImage, IplImage *depthMap, int resizeMethod, bool resetSearch, int minKernelMass = MinKernelMass);\n};\n\n\nnamespace cv\n{\n\n    class CV_EXPORTS Octree\n    {\n    public:\n        struct Node\n        {\n            Node() {}\n            int begin, end;\n            float x_min, x_max, y_min, y_max, z_min, z_max;\n            int maxLevels;\n            bool isLeaf;\n            int children[8];\n        };\n\n        Octree();\n        Octree( const vector<Point3f>& points, int maxLevels = 10, int minPoints = 20 );\n        virtual ~Octree();\n\n        virtual void buildTree( const vector<Point3f>& points, int maxLevels = 10, int minPoints = 20 );\n        virtual void getPointsWithinSphere( const Point3f& center, float radius,\n                                           vector<Point3f>& points ) const;\n        const vector<Node>& getNodes() const { return nodes; }\n    private:\n        int minPoints;\n        vector<Point3f> points;\n        vector<Node> nodes;\n\n        virtual void buildNext(size_t node_ind);\n    };\n\n\n    class CV_EXPORTS Mesh3D\n    {\n    public:\n        struct EmptyMeshException {};\n\n        Mesh3D();\n        Mesh3D(const vector<Point3f>& vtx);\n        ~Mesh3D();\n\n        void buildOctree();\n        void clearOctree();\n        float estimateResolution(float tryRatio = 0.1f);\n        void computeNormals(float normalRadius, int minNeighbors = 20);\n        void computeNormals(const vector<int>& subset, float normalRadius, int minNeighbors = 20);\n\n        void writeAsVrml(const String& file, const vector<Scalar>& colors = vector<Scalar>()) const;\n\n        vector<Point3f> vtx;\n        vector<Point3f> normals;\n        float resolution;\n        Octree octree;\n\n        const static Point3f allzero;\n    };\n\n    class CV_EXPORTS SpinImageModel\n    {\n    public:\n\n        /* model parameters, leave unset for default or auto estimate */\n        float normalRadius;\n        int minNeighbors;\n\n        float binSize;\n        int imageWidth;\n\n        float lambda;\n        float gamma;\n\n        float T_GeometriccConsistency;\n        float T_GroupingCorespondances;\n\n        /* public interface */\n        SpinImageModel();\n        explicit SpinImageModel(const Mesh3D& mesh);\n        ~SpinImageModel();\n\n        void setLogger(std::ostream* log);\n        void selectRandomSubset(float ratio);\n        void setSubset(const vector<int>& subset);\n        void compute();\n\n        void match(const SpinImageModel& scene, vector< vector<Vec2i> >& result);\n\n        Mat packRandomScaledSpins(bool separateScale = false, size_t xCount = 10, size_t yCount = 10) const;\n\n        size_t getSpinCount() const { return spinImages.rows; }\n        Mat getSpinImage(size_t index) const { return spinImages.row((int)index); }\n        const Point3f& getSpinVertex(size_t index) const { return mesh.vtx[subset[index]]; }\n        const Point3f& getSpinNormal(size_t index) const { return mesh.normals[subset[index]]; }\n\n        const Mesh3D& getMesh() const { return mesh; }\n        Mesh3D& getMesh() { return mesh; }\n\n        /* static utility functions */\n        static bool spinCorrelation(const Mat& spin1, const Mat& spin2, float lambda, float& result);\n\n        static Point2f calcSpinMapCoo(const Point3f& point, const Point3f& vertex, const Point3f& normal);\n\n        static float geometricConsistency(const Point3f& pointScene1, const Point3f& normalScene1,\n                                          const Point3f& pointModel1, const Point3f& normalModel1,\n                                          const Point3f& pointScene2, const Point3f& normalScene2,\n                                          const Point3f& pointModel2, const Point3f& normalModel2);\n\n        static float groupingCreteria(const Point3f& pointScene1, const Point3f& normalScene1,\n                                      const Point3f& pointModel1, const Point3f& normalModel1,\n                                      const Point3f& pointScene2, const Point3f& normalScene2,\n                                      const Point3f& pointModel2, const Point3f& normalModel2,\n                                      float gamma);\n    protected:\n        void defaultParams();\n\n        void matchSpinToModel(const Mat& spin, vector<int>& indeces,\n                              vector<float>& corrCoeffs, bool useExtremeOutliers = true) const;\n\n        void repackSpinImages(const vector<uchar>& mask, Mat& spinImages, bool reAlloc = true) const;\n\n        vector<int> subset;\n        Mesh3D mesh;\n        Mat spinImages;\n        std::ostream* out;\n    };\n\n    class CV_EXPORTS TickMeter\n    {\n    public:\n        TickMeter();\n        void start();\n        void stop();\n\n        int64 getTimeTicks() const;\n        double getTimeMicro() const;\n        double getTimeMilli() const;\n        double getTimeSec()   const;\n        int64 getCounter() const;\n\n        void reset();\n    private:\n        int64 counter;\n        int64 sumTime;\n        int64 startTime;\n    };\n\n    CV_EXPORTS std::ostream& operator<<(std::ostream& out, const TickMeter& tm);\n\n    class CV_EXPORTS SelfSimDescriptor\n    {\n    public:\n        SelfSimDescriptor();\n        SelfSimDescriptor(int _ssize, int _lsize,\n                          int _startDistanceBucket=DEFAULT_START_DISTANCE_BUCKET,\n                          int _numberOfDistanceBuckets=DEFAULT_NUM_DISTANCE_BUCKETS,\n                          int _nangles=DEFAULT_NUM_ANGLES);\n        SelfSimDescriptor(const SelfSimDescriptor& ss);\n        virtual ~SelfSimDescriptor();\n        SelfSimDescriptor& operator = (const SelfSimDescriptor& ss);\n\n        size_t getDescriptorSize() const;\n        Size getGridSize( Size imgsize, Size winStride ) const;\n\n        virtual void compute(const Mat& img, vector<float>& descriptors, Size winStride=Size(),\n                             const vector<Point>& locations=vector<Point>()) const;\n        virtual void computeLogPolarMapping(Mat& mappingMask) const;\n        virtual void SSD(const Mat& img, Point pt, Mat& ssd) const;\n\n        int smallSize;\n        int largeSize;\n        int startDistanceBucket;\n        int numberOfDistanceBuckets;\n        int numberOfAngles;\n\n        enum { DEFAULT_SMALL_SIZE = 5, DEFAULT_LARGE_SIZE = 41,\n            DEFAULT_NUM_ANGLES = 20, DEFAULT_START_DISTANCE_BUCKET = 3,\n            DEFAULT_NUM_DISTANCE_BUCKETS = 7 };\n    };\n\n\n    typedef bool (*BundleAdjustCallback)(int iteration, double norm_error, void* user_data);\n\n    class CV_EXPORTS LevMarqSparse {\n    public:\n        LevMarqSparse();\n        LevMarqSparse(int npoints, // number of points\n                      int ncameras, // number of cameras\n                      int nPointParams, // number of params per one point  (3 in case of 3D points)\n                      int nCameraParams, // number of parameters per one camera\n                      int nErrParams, // number of parameters in measurement vector\n                      // for 1 point at one camera (2 in case of 2D projections)\n                      Mat& visibility, // visibility matrix. rows correspond to points, columns correspond to cameras\n                      // 1 - point is visible for the camera, 0 - invisible\n                      Mat& P0, // starting vector of parameters, first cameras then points\n                      Mat& X, // measurements, in order of visibility. non visible cases are skipped\n                      TermCriteria criteria, // termination criteria\n\n                      // callback for estimation of Jacobian matrices\n                      void (CV_CDECL * fjac)(int i, int j, Mat& point_params,\n                                             Mat& cam_params, Mat& A, Mat& B, void* data),\n                      // callback for estimation of backprojection errors\n                      void (CV_CDECL * func)(int i, int j, Mat& point_params,\n                                             Mat& cam_params, Mat& estim, void* data),\n                      void* data, // user-specific data passed to the callbacks\n                      BundleAdjustCallback cb, void* user_data\n                      );\n\n        virtual ~LevMarqSparse();\n\n        virtual void run( int npoints, // number of points\n                         int ncameras, // number of cameras\n                         int nPointParams, // number of params per one point  (3 in case of 3D points)\n                         int nCameraParams, // number of parameters per one camera\n                         int nErrParams, // number of parameters in measurement vector\n                         // for 1 point at one camera (2 in case of 2D projections)\n                         Mat& visibility, // visibility matrix. rows correspond to points, columns correspond to cameras\n                         // 1 - point is visible for the camera, 0 - invisible\n                         Mat& P0, // starting vector of parameters, first cameras then points\n                         Mat& X, // measurements, in order of visibility. non visible cases are skipped\n                         TermCriteria criteria, // termination criteria\n\n                         // callback for estimation of Jacobian matrices\n                         void (CV_CDECL * fjac)(int i, int j, Mat& point_params,\n                                                Mat& cam_params, Mat& A, Mat& B, void* data),\n                         // callback for estimation of backprojection errors\n                         void (CV_CDECL * func)(int i, int j, Mat& point_params,\n                                                Mat& cam_params, Mat& estim, void* data),\n                         void* data // user-specific data passed to the callbacks\n                         );\n\n        virtual void clear();\n\n        // useful function to do simple bundle adjustment tasks\n        static void bundleAdjust(vector<Point3d>& points, // positions of points in global coordinate system (input and output)\n                                 const vector<vector<Point2d> >& imagePoints, // projections of 3d points for every camera\n                                 const vector<vector<int> >& visibility, // visibility of 3d points for every camera\n                                 vector<Mat>& cameraMatrix, // intrinsic matrices of all cameras (input and output)\n                                 vector<Mat>& R, // rotation matrices of all cameras (input and output)\n                                 vector<Mat>& T, // translation vector of all cameras (input and output)\n                                 vector<Mat>& distCoeffs, // distortion coefficients of all cameras (input and output)\n                                 const TermCriteria& criteria=\n                                 TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON),\n                                 BundleAdjustCallback cb = 0, void* user_data = 0);\n\n    public:\n        virtual void optimize(CvMat &_vis); //main function that runs minimization\n\n        //iteratively asks for measurement for visible camera-point pairs\n        void ask_for_proj(CvMat &_vis,bool once=false);\n        //iteratively asks for Jacobians for every camera_point pair\n        void ask_for_projac(CvMat &_vis);\n\n        CvMat* err; //error X-hX\n        double prevErrNorm, errNorm;\n        double lambda;\n        CvTermCriteria criteria;\n        int iters;\n\n        CvMat** U; //size of array is equal to number of cameras\n        CvMat** V; //size of array is equal to number of points\n        CvMat** inv_V_star; //inverse of V*\n\n        CvMat** A;\n        CvMat** B;\n        CvMat** W;\n\n        CvMat* X; //measurement\n        CvMat* hX; //current measurement extimation given new parameter vector\n\n        CvMat* prevP; //current already accepted parameter.\n        CvMat* P; // parameters used to evaluate function with new params\n        // this parameters may be rejected\n\n        CvMat* deltaP; //computed increase of parameters (result of normal system solution )\n\n        CvMat** ea; // sum_i  AijT * e_ij , used as right part of normal equation\n        // length of array is j = number of cameras\n        CvMat** eb; // sum_j  BijT * e_ij , used as right part of normal equation\n        // length of array is i = number of points\n\n        CvMat** Yj; //length of array is i = num_points\n\n        CvMat* S; //big matrix of block Sjk  , each block has size num_cam_params x num_cam_params\n\n        CvMat* JtJ_diag; //diagonal of JtJ,  used to backup diagonal elements before augmentation\n\n        CvMat* Vis_index; // matrix which element is index of measurement for point i and camera j\n\n        int num_cams;\n        int num_points;\n        int num_err_param;\n        int num_cam_param;\n        int num_point_param;\n\n        //target function and jacobian pointers, which needs to be initialized\n        void (*fjac)(int i, int j, Mat& point_params, Mat& cam_params, Mat& A, Mat& B, void* data);\n        void (*func)(int i, int j, Mat& point_params, Mat& cam_params, Mat& estim, void* data);\n\n        void* data;\n\n        BundleAdjustCallback cb;\n        void* user_data;\n    };\n\n    CV_EXPORTS_W int chamerMatching( Mat& img, Mat& templ,\n                                  CV_OUT vector<vector<Point> >& results, CV_OUT vector<float>& cost,\n                                  double templScale=1, int maxMatches = 20,\n                                  double minMatchDistance = 1.0, int padX = 3,\n                                  int padY = 3, int scales = 5, double minScale = 0.6, double maxScale = 1.6,\n                                  double orientationWeight = 0.5, double truncate = 20);\n\n\n    class CV_EXPORTS_W StereoVar\n    {\n    public:\n        // Flags\n        enum {USE_INITIAL_DISPARITY = 1, USE_EQUALIZE_HIST = 2, USE_SMART_ID = 4, USE_AUTO_PARAMS = 8, USE_MEDIAN_FILTERING = 16};\n        enum {CYCLE_O, CYCLE_V};\n        enum {PENALIZATION_TICHONOV, PENALIZATION_CHARBONNIER, PENALIZATION_PERONA_MALIK};\n\n        //! the default constructor\n        CV_WRAP StereoVar();\n\n        //! the full constructor taking all the necessary algorithm parameters\n        CV_WRAP StereoVar(int levels, double pyrScale, int nIt, int minDisp, int maxDisp, int poly_n, double poly_sigma, float fi, float lambda, int penalization, int cycle, int flags);\n\n        //! the destructor\n        virtual ~StereoVar();\n\n        //! the stereo correspondence operator that computes disparity map for the specified rectified stereo pair\n        CV_WRAP_AS(compute) virtual void operator()(const Mat& left, const Mat& right, CV_OUT Mat& disp);\n\n        CV_PROP_RW int      levels;\n        CV_PROP_RW double   pyrScale;\n        CV_PROP_RW int      nIt;\n        CV_PROP_RW int      minDisp;\n        CV_PROP_RW int      maxDisp;\n        CV_PROP_RW int      poly_n;\n        CV_PROP_RW double   poly_sigma;\n        CV_PROP_RW float    fi;\n        CV_PROP_RW float    lambda;\n        CV_PROP_RW int      penalization;\n        CV_PROP_RW int      cycle;\n        CV_PROP_RW int      flags;\n\n    private:\n        void autoParams();\n        void FMG(Mat &I1, Mat &I2, Mat &I2x, Mat &u, int level);\n        void VCycle_MyFAS(Mat &I1_h, Mat &I2_h, Mat &I2x_h, Mat &u_h, int level);\n        void VariationalSolver(Mat &I1_h, Mat &I2_h, Mat &I2x_h, Mat &u_h, int level);\n    };\n\n    CV_EXPORTS void polyfit(const Mat& srcx, const Mat& srcy, Mat& dst, int order);\n\n    class CV_EXPORTS Directory\n    {\n        public:\n            static std::vector<std::string> GetListFiles  ( const std::string& path, const std::string & exten = \"*\", bool addPath = true );\n            static std::vector<std::string> GetListFilesR ( const std::string& path, const std::string & exten = \"*\", bool addPath = true );\n            static std::vector<std::string> GetListFolders( const std::string& path, const std::string & exten = \"*\", bool addPath = true );\n    };\n\n    /*\n     * Generation of a set of different colors by the following way:\n     * 1) generate more then need colors (in \"factor\" times) in RGB,\n     * 2) convert them to Lab,\n     * 3) choose the needed count of colors from the set that are more different from\n     *    each other,\n     * 4) convert the colors back to RGB\n     */\n    CV_EXPORTS void generateColors( std::vector<Scalar>& colors, size_t count, size_t factor=100 );\n\n\n    /*\n     *  Estimate the rigid body motion from frame0 to frame1. The method is based on the paper\n     *  \"Real-Time Visual Odometry from Dense RGB-D Images\", F. Steinbucker, J. Strum, D. Cremers, ICCV, 2011.\n     */\n    enum { ROTATION          = 1,\n           TRANSLATION       = 2,\n           RIGID_BODY_MOTION = 4\n         };\n    CV_EXPORTS bool RGBDOdometry( Mat& Rt, const Mat& initRt,\n                                  const Mat& image0, const Mat& depth0, const Mat& mask0,\n                                  const Mat& image1, const Mat& depth1, const Mat& mask1,\n                                  const Mat& cameraMatrix, float minDepth=0.f, float maxDepth=4.f, float maxDepthDiff=0.07f,\n                                  const std::vector<int>& iterCounts=std::vector<int>(),\n                                  const std::vector<float>& minGradientMagnitudes=std::vector<float>(),\n                                  int transformType=RIGID_BODY_MOTION );\n\n    /**\n    *Bilinear interpolation technique.\n    *\n    *The value of a desired cortical pixel is obtained through a bilinear interpolation of the values\n    *of the four nearest neighbouring Cartesian pixels to the center of the RF.\n    *The same principle is applied to the inverse transformation.\n    *\n    *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5\n    */\n    class CV_EXPORTS LogPolar_Interp\n    {\n    public:\n\n        LogPolar_Interp() {}\n\n        /**\n        *Constructor\n        *\\param w the width of the input image\n        *\\param h the height of the input image\n        *\\param center the transformation center: where the output precision is maximal\n        *\\param R the number of rings of the cortical image (default value 70 pixel)\n        *\\param ro0 the radius of the blind spot (default value 3 pixel)\n        *\\param full \\a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle.\n        *            \\a 0 means that the retinal image is computed within the inscribed circle.\n        *\\param S the number of sectors of the cortical image (default value 70 pixel).\n        *         Its value is usually internally computed to obtain a pixel aspect ratio equals to 1.\n        *\\param sp \\a 1 (default value) means that the parameter \\a S is internally computed.\n        *          \\a 0 means that the parameter \\a S is provided by the user.\n        */\n        LogPolar_Interp(int w, int h, Point2i center, int R=70, double ro0=3.0,\n                        int interp=INTER_LINEAR, int full=1, int S=117, int sp=1);\n        /**\n        *Transformation from Cartesian image to cortical (log-polar) image.\n        *\\param source the Cartesian image\n        *\\return the transformed image (cortical image)\n        */\n        const Mat to_cortical(const Mat &source);\n        /**\n        *Transformation from cortical image to retinal (inverse log-polar) image.\n        *\\param source the cortical image\n        *\\return the transformed image (retinal image)\n        */\n        const Mat to_cartesian(const Mat &source);\n        /**\n        *Destructor\n        */\n        ~LogPolar_Interp();\n\n    protected:\n\n        Mat Rsri;\n        Mat Csri;\n\n        int S, R, M, N;\n        int top, bottom,left,right;\n        double ro0, romax, a, q;\n        int interp;\n\n        Mat ETAyx;\n        Mat CSIyx;\n\n        void create_map(int M, int N, int R, int S, double ro0);\n    };\n\n    /**\n    *Overlapping circular receptive fields technique\n    *\n    *The Cartesian plane is divided in two regions: the fovea and the periphery.\n    *The fovea (oversampling) is handled by using the bilinear interpolation technique described above, whereas in\n    *the periphery we use the overlapping Gaussian circular RFs.\n    *\n    *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5\n    */\n    class CV_EXPORTS LogPolar_Overlapping\n    {\n    public:\n        LogPolar_Overlapping() {}\n\n        /**\n        *Constructor\n        *\\param w the width of the input image\n        *\\param h the height of the input image\n        *\\param center the transformation center: where the output precision is maximal\n        *\\param R the number of rings of the cortical image (default value 70 pixel)\n        *\\param ro0 the radius of the blind spot (default value 3 pixel)\n        *\\param full \\a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle.\n        *            \\a 0 means that the retinal image is computed within the inscribed circle.\n        *\\param S the number of sectors of the cortical image (default value 70 pixel).\n        *         Its value is usually internally computed to obtain a pixel aspect ratio equals to 1.\n        *\\param sp \\a 1 (default value) means that the parameter \\a S is internally computed.\n        *          \\a 0 means that the parameter \\a S is provided by the user.\n        */\n        LogPolar_Overlapping(int w, int h, Point2i center, int R=70,\n                             double ro0=3.0, int full=1, int S=117, int sp=1);\n        /**\n        *Transformation from Cartesian image to cortical (log-polar) image.\n        *\\param source the Cartesian image\n        *\\return the transformed image (cortical image)\n        */\n        const Mat to_cortical(const Mat &source);\n        /**\n        *Transformation from cortical image to retinal (inverse log-polar) image.\n        *\\param source the cortical image\n        *\\return the transformed image (retinal image)\n        */\n        const Mat to_cartesian(const Mat &source);\n        /**\n        *Destructor\n        */\n        ~LogPolar_Overlapping();\n\n    protected:\n\n        Mat Rsri;\n        Mat Csri;\n        vector<int> Rsr;\n        vector<int> Csr;\n        vector<double> Wsr;\n\n        int S, R, M, N, ind1;\n        int top, bottom,left,right;\n        double ro0, romax, a, q;\n\n        struct kernel\n        {\n            kernel() { w = 0; }\n            vector<double> weights;\n            int w;\n        };\n\n        Mat ETAyx;\n        Mat CSIyx;\n        vector<kernel> w_ker_2D;\n\n        void create_map(int M, int N, int R, int S, double ro0);\n    };\n\n    /**\n    * Adjacent receptive fields technique\n    *\n    *All the Cartesian pixels, whose coordinates in the cortical domain share the same integer part, are assigned to the same RF.\n    *The precision of the boundaries of the RF can be improved by breaking each pixel into subpixels and assigning each of them to the correct RF.\n    *This technique is implemented from: Traver, V., Pla, F.: Log-polar mapping template design: From task-level requirements\n    *to geometry parameters. Image Vision Comput. 26(10) (2008) 1354-1370\n    *\n    *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5\n    */\n    class CV_EXPORTS LogPolar_Adjacent\n    {\n    public:\n        LogPolar_Adjacent() {}\n\n        /**\n         *Constructor\n         *\\param w the width of the input image\n         *\\param h the height of the input image\n         *\\param center the transformation center: where the output precision is maximal\n         *\\param R the number of rings of the cortical image (default value 70 pixel)\n         *\\param ro0 the radius of the blind spot (default value 3 pixel)\n         *\\param smin the size of the subpixel (default value 0.25 pixel)\n         *\\param full \\a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle.\n         *            \\a 0 means that the retinal image is computed within the inscribed circle.\n         *\\param S the number of sectors of the cortical image (default value 70 pixel).\n         *         Its value is usually internally computed to obtain a pixel aspect ratio equals to 1.\n         *\\param sp \\a 1 (default value) means that the parameter \\a S is internally computed.\n         *          \\a 0 means that the parameter \\a S is provided by the user.\n         */\n        LogPolar_Adjacent(int w, int h, Point2i center, int R=70, double ro0=3.0, double smin=0.25, int full=1, int S=117, int sp=1);\n        /**\n         *Transformation from Cartesian image to cortical (log-polar) image.\n         *\\param source the Cartesian image\n         *\\return the transformed image (cortical image)\n         */\n        const Mat to_cortical(const Mat &source);\n        /**\n         *Transformation from cortical image to retinal (inverse log-polar) image.\n         *\\param source the cortical image\n         *\\return the transformed image (retinal image)\n         */\n        const Mat to_cartesian(const Mat &source);\n        /**\n         *Destructor\n         */\n        ~LogPolar_Adjacent();\n\n    protected:\n        struct pixel\n        {\n            pixel() { u = v = 0; a = 0.; }\n            int u;\n            int v;\n            double a;\n        };\n        int S, R, M, N;\n        int top, bottom,left,right;\n        double ro0, romax, a, q;\n        vector<vector<pixel> > L;\n        vector<double> A;\n\n        void subdivide_recursively(double x, double y, int i, int j, double length, double smin);\n        bool get_uv(double x, double y, int&u, int&v);\n        void create_map(int M, int N, int R, int S, double ro0, double smin);\n    };\n\n    CV_EXPORTS Mat subspaceProject(InputArray W, InputArray mean, InputArray src);\n    CV_EXPORTS Mat subspaceReconstruct(InputArray W, InputArray mean, InputArray src);\n\n    class CV_EXPORTS LDA\n    {\n    public:\n        // Initializes a LDA with num_components (default 0) and specifies how\n        // samples are aligned (default dataAsRow=true).\n        LDA(int num_components = 0) :\n            _num_components(num_components) {};\n\n        // Initializes and performs a Discriminant Analysis with Fisher's\n        // Optimization Criterion on given data in src and corresponding labels\n        // in labels. If 0 (or less) number of components are given, they are\n        // automatically determined for given data in computation.\n        LDA(const Mat& src, vector<int> labels,\n                int num_components = 0) :\n                    _num_components(num_components)\n        {\n            this->compute(src, labels); //! compute eigenvectors and eigenvalues\n        }\n\n        // Initializes and performs a Discriminant Analysis with Fisher's\n        // Optimization Criterion on given data in src and corresponding labels\n        // in labels. If 0 (or less) number of components are given, they are\n        // automatically determined for given data in computation.\n        LDA(InputArrayOfArrays src, InputArray labels,\n                int num_components = 0) :\n                    _num_components(num_components)\n        {\n            this->compute(src, labels); //! compute eigenvectors and eigenvalues\n        }\n\n        // Serializes this object to a given filename.\n        void save(const string& filename) const;\n\n        // Deserializes this object from a given filename.\n        void load(const string& filename);\n\n        // Serializes this object to a given cv::FileStorage.\n        void save(FileStorage& fs) const;\n\n            // Deserializes this object from a given cv::FileStorage.\n        void load(const FileStorage& node);\n\n        // Destructor.\n        ~LDA() {}\n\n        //! Compute the discriminants for data in src and labels.\n        void compute(InputArrayOfArrays src, InputArray labels);\n\n        // Projects samples into the LDA subspace.\n        Mat project(InputArray src);\n\n        // Reconstructs projections from the LDA subspace.\n        Mat reconstruct(InputArray src);\n\n        // Returns the eigenvectors of this LDA.\n        Mat eigenvectors() const { return _eigenvectors; };\n\n        // Returns the eigenvalues of this LDA.\n        Mat eigenvalues() const { return _eigenvalues; }\n\n    protected:\n        bool _dataAsRow;\n        int _num_components;\n        Mat _eigenvectors;\n        Mat _eigenvalues;\n\n        void lda(InputArrayOfArrays src, InputArray labels);\n    };\n\n    class CV_EXPORTS_W FaceRecognizer : public Algorithm\n    {\n    public:\n        //! virtual destructor\n        virtual ~FaceRecognizer() {}\n\n        // Trains a FaceRecognizer.\n        CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels) = 0;\n\n        // Updates a FaceRecognizer.\n        CV_WRAP void update(InputArrayOfArrays src, InputArray labels);\n\n        // Gets a prediction from a FaceRecognizer.\n        virtual int predict(InputArray src) const = 0;\n\n        // Predicts the label and confidence for a given sample.\n        CV_WRAP virtual void predict(InputArray src, CV_OUT int &label, CV_OUT double &confidence) const = 0;\n\n        // Serializes this object to a given filename.\n        CV_WRAP virtual void save(const string& filename) const;\n\n        // Deserializes this object from a given filename.\n        CV_WRAP virtual void load(const string& filename);\n\n        // Serializes this object to a given cv::FileStorage.\n        virtual void save(FileStorage& fs) const = 0;\n\n        // Deserializes this object from a given cv::FileStorage.\n        virtual void load(const FileStorage& fs) = 0;\n\n    };\n\n    CV_EXPORTS_W Ptr<FaceRecognizer> createEigenFaceRecognizer(int num_components = 0, double threshold = DBL_MAX);\n    CV_EXPORTS_W Ptr<FaceRecognizer> createFisherFaceRecognizer(int num_components = 0, double threshold = DBL_MAX);\n    CV_EXPORTS_W Ptr<FaceRecognizer> createLBPHFaceRecognizer(int radius=1, int neighbors=8,\n                                                            int grid_x=8, int grid_y=8, double threshold = DBL_MAX);\n\n    enum\n    {\n        COLORMAP_AUTUMN = 0,\n        COLORMAP_BONE = 1,\n        COLORMAP_JET = 2,\n        COLORMAP_WINTER = 3,\n        COLORMAP_RAINBOW = 4,\n        COLORMAP_OCEAN = 5,\n        COLORMAP_SUMMER = 6,\n        COLORMAP_SPRING = 7,\n        COLORMAP_COOL = 8,\n        COLORMAP_HSV = 9,\n        COLORMAP_PINK = 10,\n        COLORMAP_HOT = 11\n    };\n\n    CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap);\n\n    CV_EXPORTS bool initModule_contrib();\n}\n\n#include \"opencv2/contrib/retina.hpp\"\n\n#include \"opencv2/contrib/openfabmap.hpp\"\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/contrib/detection_based_tracker.hpp",
    "content": "#pragma once\n\n#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID)\n\n#include <opencv2/core/core.hpp>\n#include <opencv2/objdetect/objdetect.hpp>\n\n#include <vector>\n\nclass DetectionBasedTracker\n{\n    public:\n        struct Parameters\n        {\n            int minObjectSize;\n            int maxObjectSize;\n            double scaleFactor;\n            int maxTrackLifetime;\n            int minNeighbors;\n            int minDetectionPeriod; //the minimal time between run of the big object detector (on the whole frame) in ms (1000 mean 1 sec), default=0\n\n            Parameters();\n        };\n\n        DetectionBasedTracker(const std::string& cascadeFilename, const Parameters& params);\n        virtual ~DetectionBasedTracker();\n\n        virtual bool run();\n        virtual void stop();\n        virtual void resetTracking();\n\n        virtual void process(const cv::Mat& imageGray);\n\n        bool setParameters(const Parameters& params);\n        const Parameters& getParameters();\n\n\n        typedef std::pair<cv::Rect, int> Object;\n        virtual void getObjects(std::vector<cv::Rect>& result) const;\n        virtual void getObjects(std::vector<Object>& result) const;\n\n    protected:\n        class SeparateDetectionWork;\n        cv::Ptr<SeparateDetectionWork> separateDetectionWork;\n        friend void* workcycleObjectDetectorFunction(void* p);\n\n\n        struct InnerParameters\n        {\n            int numLastPositionsToTrack;\n            int numStepsToWaitBeforeFirstShow;\n            int numStepsToTrackWithoutDetectingIfObjectHasNotBeenShown;\n            int numStepsToShowWithoutDetecting;\n\n            float coeffTrackingWindowSize;\n            float coeffObjectSizeToTrack;\n            float coeffObjectSpeedUsingInPrediction;\n\n            InnerParameters();\n        };\n        Parameters parameters;\n        InnerParameters innerParameters;\n\n        struct TrackedObject\n        {\n            typedef std::vector<cv::Rect> PositionsVector;\n\n            PositionsVector lastPositions;\n\n            int numDetectedFrames;\n            int numFramesNotDetected;\n            int id;\n\n            TrackedObject(const cv::Rect& rect):numDetectedFrames(1), numFramesNotDetected(0)\n            {\n                lastPositions.push_back(rect);\n                id=getNextId();\n            };\n\n            static int getNextId()\n            {\n                static int _id=0;\n                return _id++;\n            }\n        };\n\n        int numTrackedSteps;\n        std::vector<TrackedObject> trackedObjects;\n\n        std::vector<float> weightsPositionsSmoothing;\n        std::vector<float> weightsSizesSmoothing;\n\n        cv::CascadeClassifier cascadeForTracking;\n\n\n        void updateTrackedObjects(const std::vector<cv::Rect>& detectedObjects);\n        cv::Rect calcTrackedObjectPositionToShow(int i) const;\n        void detectInRegion(const cv::Mat& img, const cv::Rect& r, std::vector<cv::Rect>& detectedObjectsInRegions);\n};\n\nnamespace cv\n{\n    using ::DetectionBasedTracker;\n} //end of cv namespace\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/contrib/hybridtracker.hpp",
    "content": "//*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                                License Agreement\n//                       For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HYBRIDTRACKER_H_\n#define __OPENCV_HYBRIDTRACKER_H_\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/operations.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/video/tracking.hpp\"\n#include \"opencv2/ml/ml.hpp\"\n\n#ifdef __cplusplus\n\nnamespace cv\n{\n\n// Motion model for tracking algorithm. Currently supports objects that do not move much.\n// To add Kalman filter\nstruct CV_EXPORTS CvMotionModel\n{\n    enum {LOW_PASS_FILTER = 0, KALMAN_FILTER = 1, EM = 2};\n\n    CvMotionModel()\n    {\n    }\n\n    float low_pass_gain;    // low pass gain\n};\n\n// Mean Shift Tracker parameters for specifying use of HSV channel and CamShift parameters.\nstruct CV_EXPORTS CvMeanShiftTrackerParams\n{\n    enum {  H = 0, HS = 1, HSV = 2  };\n    CvMeanShiftTrackerParams(int tracking_type = CvMeanShiftTrackerParams::HS,\n            CvTermCriteria term_crit = CvTermCriteria());\n\n    int tracking_type;\n    vector<float> h_range;\n    vector<float> s_range;\n    vector<float> v_range;\n    CvTermCriteria term_crit;\n};\n\n// Feature tracking parameters\nstruct CV_EXPORTS CvFeatureTrackerParams\n{\n    enum {  SIFT = 0, SURF = 1, OPTICAL_FLOW = 2 };\n    CvFeatureTrackerParams(int featureType = 0, int windowSize = 0)\n    {\n        feature_type = featureType;\n        window_size = windowSize;\n    }\n\n    int feature_type; // Feature type to use\n    int window_size; // Window size in pixels around which to search for new window\n};\n\n// Hybrid Tracking parameters for specifying weights of individual trackers and motion model.\nstruct CV_EXPORTS CvHybridTrackerParams\n{\n    CvHybridTrackerParams(float ft_tracker_weight = 0.5, float ms_tracker_weight = 0.5,\n            CvFeatureTrackerParams ft_params = CvFeatureTrackerParams(),\n            CvMeanShiftTrackerParams ms_params = CvMeanShiftTrackerParams(),\n            CvMotionModel model = CvMotionModel());\n\n    float ft_tracker_weight;\n    float ms_tracker_weight;\n    CvFeatureTrackerParams ft_params;\n    CvMeanShiftTrackerParams ms_params;\n    int motion_model;\n    float low_pass_gain;\n};\n\n// Performs Camshift using parameters from MeanShiftTrackerParams\nclass CV_EXPORTS CvMeanShiftTracker\n{\nprivate:\n    Mat hsv, hue;\n    Mat backproj;\n    Mat mask, maskroi;\n    MatND hist;\n    Rect prev_trackwindow;\n    RotatedRect prev_trackbox;\n    Point2f prev_center;\n\npublic:\n    CvMeanShiftTrackerParams params;\n\n    CvMeanShiftTracker();\n    explicit CvMeanShiftTracker(CvMeanShiftTrackerParams _params);\n    ~CvMeanShiftTracker();\n    void newTrackingWindow(Mat image, Rect selection);\n    RotatedRect updateTrackingWindow(Mat image);\n    Mat getHistogramProjection(int type);\n    void setTrackingWindow(Rect _window);\n    Rect getTrackingWindow();\n    RotatedRect getTrackingEllipse();\n    Point2f getTrackingCenter();\n};\n\n// Performs SIFT/SURF feature tracking using parameters from FeatureTrackerParams\nclass CV_EXPORTS CvFeatureTracker\n{\nprivate:\n    Ptr<Feature2D> dd;\n    Ptr<DescriptorMatcher> matcher;\n    vector<DMatch> matches;\n\n    Mat prev_image;\n    Mat prev_image_bw;\n    Rect prev_trackwindow;\n    Point2d prev_center;\n\n    int ittr;\n    vector<Point2f> features[2];\n\npublic:\n    Mat disp_matches;\n    CvFeatureTrackerParams params;\n\n    CvFeatureTracker();\n    explicit CvFeatureTracker(CvFeatureTrackerParams params);\n    ~CvFeatureTracker();\n    void newTrackingWindow(Mat image, Rect selection);\n    Rect updateTrackingWindow(Mat image);\n    Rect updateTrackingWindowWithSIFT(Mat image);\n    Rect updateTrackingWindowWithFlow(Mat image);\n    void setTrackingWindow(Rect _window);\n    Rect getTrackingWindow();\n    Point2f getTrackingCenter();\n};\n\n// Performs Hybrid Tracking and combines individual trackers using EM or filters\nclass CV_EXPORTS CvHybridTracker\n{\nprivate:\n    CvMeanShiftTracker* mstracker;\n    CvFeatureTracker* fttracker;\n\n    CvMat* samples;\n    CvMat* labels;\n\n    Rect prev_window;\n    Point2f prev_center;\n    Mat prev_proj;\n    RotatedRect trackbox;\n\n    int ittr;\n    Point2f curr_center;\n\n    inline float getL2Norm(Point2f p1, Point2f p2);\n    Mat getDistanceProjection(Mat image, Point2f center);\n    Mat getGaussianProjection(Mat image, int ksize, double sigma, Point2f center);\n    void updateTrackerWithEM(Mat image);\n    void updateTrackerWithLowPassFilter(Mat image);\n\npublic:\n    CvHybridTrackerParams params;\n    CvHybridTracker();\n    explicit CvHybridTracker(CvHybridTrackerParams params);\n    ~CvHybridTracker();\n\n    void newTracker(Mat image, Rect selection);\n    void updateTracker(Mat image);\n    Rect getTrackingWindow();\n};\n\ntypedef CvMotionModel MotionModel;\ntypedef CvMeanShiftTrackerParams MeanShiftTrackerParams;\ntypedef CvFeatureTrackerParams FeatureTrackerParams;\ntypedef CvHybridTrackerParams HybridTrackerParams;\ntypedef CvMeanShiftTracker MeanShiftTracker;\ntypedef CvFeatureTracker FeatureTracker;\ntypedef CvHybridTracker HybridTracker;\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/contrib/openfabmap.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n// This file originates from the openFABMAP project:\n// [http://code.google.com/p/openfabmap/]\n//\n// For published work which uses all or part of OpenFABMAP, please cite:\n// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6224843]\n//\n// Original Algorithm by Mark Cummins and Paul Newman:\n// [http://ijr.sagepub.com/content/27/6/647.short]\n// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5613942]\n// [http://ijr.sagepub.com/content/30/9/1100.abstract]\n//\n//                           License Agreement\n//\n// Copyright (C) 2012 Arren Glover [aj.glover@qut.edu.au] and\n//                    Will Maddern [w.maddern@qut.edu.au], all rights reserved.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPENFABMAP_H_\n#define __OPENCV_OPENFABMAP_H_\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n\n#include <vector>\n#include <list>\n#include <map>\n#include <set>\n#include <valarray>\n\nnamespace cv {\n\nnamespace of2 {\n\nusing std::list;\nusing std::map;\nusing std::multiset;\n\n/*\n    Return data format of a FABMAP compare call\n*/\nstruct CV_EXPORTS IMatch {\n\n    IMatch() :\n        queryIdx(-1), imgIdx(-1), likelihood(-DBL_MAX), match(-DBL_MAX) {\n    }\n    IMatch(int _queryIdx, int _imgIdx, double _likelihood, double _match) :\n        queryIdx(_queryIdx), imgIdx(_imgIdx), likelihood(_likelihood), match(\n                _match) {\n    }\n\n    int queryIdx;    //query index\n    int imgIdx;      //test index\n\n    double likelihood;  //raw loglikelihood\n    double match;      //normalised probability\n\n    bool operator<(const IMatch& m) const {\n        return match < m.match;\n    }\n\n};\n\n/*\n    Base FabMap class. Each FabMap method inherits from this class.\n*/\nclass CV_EXPORTS FabMap {\npublic:\n\n    //FabMap options\n    enum {\n        MEAN_FIELD = 1,\n        SAMPLED = 2,\n        NAIVE_BAYES = 4,\n        CHOW_LIU = 8,\n        MOTION_MODEL = 16\n    };\n\n    FabMap(const Mat& clTree, double PzGe, double PzGNe, int flags,\n            int numSamples = 0);\n    virtual ~FabMap();\n\n    //methods to add training data for sampling method\n    virtual void addTraining(const Mat& queryImgDescriptor);\n    virtual void addTraining(const vector<Mat>& queryImgDescriptors);\n\n    //methods to add to the test data\n    virtual void add(const Mat& queryImgDescriptor);\n    virtual void add(const vector<Mat>& queryImgDescriptors);\n\n    //accessors\n    const vector<Mat>& getTrainingImgDescriptors() const;\n    const vector<Mat>& getTestImgDescriptors() const;\n\n    //Main FabMap image comparison\n    void compare(const Mat& queryImgDescriptor,\n            vector<IMatch>& matches, bool addQuery = false,\n            const Mat& mask = Mat());\n    void compare(const Mat& queryImgDescriptor,\n            const Mat& testImgDescriptors, vector<IMatch>& matches,\n            const Mat& mask = Mat());\n    void compare(const Mat& queryImgDescriptor,\n            const vector<Mat>& testImgDescriptors,\n            vector<IMatch>& matches, const Mat& mask = Mat());\n    void compare(const vector<Mat>& queryImgDescriptors, vector<\n            IMatch>& matches, bool addQuery = false, const Mat& mask =\n            Mat());\n    void compare(const vector<Mat>& queryImgDescriptors,\n            const vector<Mat>& testImgDescriptors,\n            vector<IMatch>& matches, const Mat& mask = Mat());\n\nprotected:\n\n    void compareImgDescriptor(const Mat& queryImgDescriptor,\n            int queryIndex, const vector<Mat>& testImgDescriptors,\n            vector<IMatch>& matches);\n\n    void addImgDescriptor(const Mat& queryImgDescriptor);\n\n    //the getLikelihoods method is overwritten for each different FabMap\n    //method.\n    virtual void getLikelihoods(const Mat& queryImgDescriptor,\n            const vector<Mat>& testImgDescriptors,\n            vector<IMatch>& matches);\n    virtual double getNewPlaceLikelihood(const Mat& queryImgDescriptor);\n\n    //turn likelihoods into probabilities (also add in motion model if used)\n    void normaliseDistribution(vector<IMatch>& matches);\n\n    //Chow-Liu Tree\n    int pq(int q);\n    double Pzq(int q, bool zq);\n    double PzqGzpq(int q, bool zq, bool zpq);\n\n    //FAB-MAP Core\n    double PzqGeq(bool zq, bool eq);\n    double PeqGL(int q, bool Lzq, bool eq);\n    double PzqGL(int q, bool zq, bool zpq, bool Lzq);\n    double PzqGzpqL(int q, bool zq, bool zpq, bool Lzq);\n    double (FabMap::*PzGL)(int q, bool zq, bool zpq, bool Lzq);\n\n    //data\n    Mat clTree;\n    vector<Mat> trainingImgDescriptors;\n    vector<Mat> testImgDescriptors;\n    vector<IMatch> priorMatches;\n\n    //parameters\n    double PzGe;\n    double PzGNe;\n    double Pnew;\n\n    double mBias;\n    double sFactor;\n\n    int flags;\n    int numSamples;\n\n};\n\n/*\n    The original FAB-MAP algorithm, developed based on:\n    http://ijr.sagepub.com/content/27/6/647.short\n*/\nclass CV_EXPORTS FabMap1: public FabMap {\npublic:\n    FabMap1(const Mat& clTree, double PzGe, double PzGNe, int flags,\n            int numSamples = 0);\n    virtual ~FabMap1();\nprotected:\n\n    //FabMap1 implementation of likelihood comparison\n    void getLikelihoods(const Mat& queryImgDescriptor, const vector<\n            Mat>& testImgDescriptors, vector<IMatch>& matches);\n};\n\n/*\n    A computationally faster version of the original FAB-MAP algorithm. A look-\n    up-table is used to precompute many of the reoccuring calculations\n*/\nclass CV_EXPORTS FabMapLUT: public FabMap {\npublic:\n    FabMapLUT(const Mat& clTree, double PzGe, double PzGNe,\n            int flags, int numSamples = 0, int precision = 6);\n    virtual ~FabMapLUT();\nprotected:\n\n    //FabMap look-up-table implementation of the likelihood comparison\n    void getLikelihoods(const Mat& queryImgDescriptor, const vector<\n            Mat>& testImgDescriptors, vector<IMatch>& matches);\n\n    //precomputed data\n    int (*table)[8];\n\n    //data precision\n    int precision;\n};\n\n/*\n    The Accelerated FAB-MAP algorithm, developed based on:\n    http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5613942\n*/\nclass CV_EXPORTS FabMapFBO: public FabMap {\npublic:\n    FabMapFBO(const Mat& clTree, double PzGe, double PzGNe, int flags,\n            int numSamples = 0, double rejectionThreshold = 1e-8, double PsGd =\n                    1e-8, int bisectionStart = 512, int bisectionIts = 9);\n    virtual ~FabMapFBO();\n\nprotected:\n\n    //FabMap Fast Bail-out implementation of the likelihood comparison\n    void getLikelihoods(const Mat& queryImgDescriptor, const vector<\n            Mat>& testImgDescriptors, vector<IMatch>& matches);\n\n    //stucture used to determine word comparison order\n    struct WordStats {\n        WordStats() :\n            q(0), info(0), V(0), M(0) {\n        }\n\n        WordStats(int _q, double _info) :\n            q(_q), info(_info), V(0), M(0) {\n        }\n\n        int q;\n        double info;\n        mutable double V;\n        mutable double M;\n\n        bool operator<(const WordStats& w) const {\n            return info < w.info;\n        }\n\n    };\n\n    //private fast bail-out necessary functions\n    void setWordStatistics(const Mat& queryImgDescriptor, multiset<WordStats>& wordData);\n    double limitbisection(double v, double m);\n    double bennettInequality(double v, double m, double delta);\n    static bool compInfo(const WordStats& first, const WordStats& second);\n\n    //parameters\n    double PsGd;\n    double rejectionThreshold;\n    int bisectionStart;\n    int bisectionIts;\n};\n\n/*\n    The FAB-MAP2.0 algorithm, developed based on:\n    http://ijr.sagepub.com/content/30/9/1100.abstract\n*/\nclass CV_EXPORTS FabMap2: public FabMap {\npublic:\n\n    FabMap2(const Mat& clTree, double PzGe, double PzGNe, int flags);\n    virtual ~FabMap2();\n\n    //FabMap2 builds the inverted index and requires an additional training/test\n    //add function\n    void addTraining(const Mat& queryImgDescriptors) {\n        FabMap::addTraining(queryImgDescriptors);\n    }\n    void addTraining(const vector<Mat>& queryImgDescriptors);\n\n    void add(const Mat& queryImgDescriptors) {\n        FabMap::add(queryImgDescriptors);\n    }\n    void add(const vector<Mat>& queryImgDescriptors);\n\nprotected:\n\n    //FabMap2 implementation of the likelihood comparison\n    void getLikelihoods(const Mat& queryImgDescriptor, const vector<\n            Mat>& testImgDescriptors, vector<IMatch>& matches);\n    double getNewPlaceLikelihood(const Mat& queryImgDescriptor);\n\n    //the likelihood function using the inverted index\n    void getIndexLikelihoods(const Mat& queryImgDescriptor, vector<\n                             double>& defaults, map<int, vector<int> >& invertedMap,\n            vector<IMatch>& matches);\n    void addToIndex(const Mat& queryImgDescriptor,\n            vector<double>& defaults,\n            map<int, vector<int> >& invertedMap);\n\n    //data\n    vector<double> d1, d2, d3, d4;\n    vector<vector<int> > children;\n\n    // TODO: inverted map a vector?\n\n    vector<double> trainingDefaults;\n    map<int, vector<int> > trainingInvertedMap;\n\n    vector<double> testDefaults;\n    map<int, vector<int> > testInvertedMap;\n\n};\n/*\n    A Chow-Liu tree is required by FAB-MAP. The Chow-Liu tree provides an\n    estimate of the full distribution of visual words using a minimum spanning\n    tree. The tree is generated through training data.\n*/\nclass CV_EXPORTS ChowLiuTree {\npublic:\n    ChowLiuTree();\n    virtual ~ChowLiuTree();\n\n    //add data to the chow-liu tree before calling make\n    void add(const Mat& imgDescriptor);\n    void add(const vector<Mat>& imgDescriptors);\n\n    const vector<Mat>& getImgDescriptors() const;\n\n    Mat make(double infoThreshold = 0.0);\n\nprivate:\n    vector<Mat> imgDescriptors;\n    Mat mergedImgDescriptors;\n\n    typedef struct info {\n        float score;\n        short word1;\n        short word2;\n    } info;\n\n    //probabilities extracted from mergedImgDescriptors\n    double P(int a, bool za);\n    double JP(int a, bool za, int b, bool zb); //a & b\n    double CP(int a, bool za, int b, bool zb); // a | b\n\n    //calculating mutual information of all edges\n    void createBaseEdges(list<info>& edges, double infoThreshold);\n    double calcMutInfo(int word1, int word2);\n    static bool sortInfoScores(const info& first, const info& second);\n\n    //selecting minimum spanning egdges with maximum information\n    bool reduceEdgesToMinSpan(list<info>& edges);\n\n    //building the tree sctructure\n    Mat buildTree(int root_word, list<info> &edges);\n    void recAddToTree(Mat &cltree, int q, int pq,\n        list<info> &remaining_edges);\n    vector<int> extractChildren(list<info> &remaining_edges, int q);\n\n};\n\n/*\n    A custom vocabulary training method based on:\n    http://www.springerlink.com/content/d1h6j8x552532003/\n*/\nclass CV_EXPORTS BOWMSCTrainer: public BOWTrainer {\npublic:\n    BOWMSCTrainer(double clusterSize = 0.4);\n    virtual ~BOWMSCTrainer();\n\n    // Returns trained vocabulary (i.e. cluster centers).\n    virtual Mat cluster() const;\n    virtual Mat cluster(const Mat& descriptors) const;\n\nprotected:\n\n    double clusterSize;\n\n};\n\n}\n\n}\n\n#endif /* OPENFABMAP_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/contrib/retina.hpp",
    "content": "/*#******************************************************************************\n ** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n **\n ** By downloading, copying, installing or using the software you agree to this license.\n ** If you do not agree to this license, do not download, install,\n ** copy or use the software.\n **\n **\n ** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab.\n ** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping.\n **\n ** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications)\n **\n **  Creation - enhancement process 2007-2011\n **      Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France\n **\n ** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr).\n ** Refer to the following research paper for more information:\n ** Benoit A., Caplier A., Durette B., Herault, J., \"USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING\", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011\n ** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book:\n ** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.\n **\n ** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author :\n ** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper:\n ** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). \"Efficient demosaicing through recursive filtering\", IEEE International Conference on Image Processing ICIP 2007\n ** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions.\n ** ====> more informations in the above cited Jeanny Heraults's book.\n **\n **                          License Agreement\n **               For Open Source Computer Vision Library\n **\n ** Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n ** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved.\n **\n **               For Human Visual System tools (hvstools)\n ** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved.\n **\n ** Third party copyrights are property of their respective owners.\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 ** * Redistributions of source code must retain the above copyright notice,\n **    this list of conditions and the following disclaimer.\n **\n ** * Redistributions in binary form must reproduce the above copyright notice,\n **    this list of conditions and the following disclaimer in the documentation\n **    and/or other materials provided with the distribution.\n **\n ** * The name of the copyright holders 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 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 disclaimed.\n ** In no event shall the Intel Corporation or contributors be liable for any direct,\n ** 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\n ** and on any theory of liability, whether in contract, strict liability,\n ** or tort (including negligence or otherwise) arising in any way out of\n ** the use of this software, even if advised of the possibility of such damage.\n *******************************************************************************/\n\n#ifndef __OPENCV_CONTRIB_RETINA_HPP__\n#define __OPENCV_CONTRIB_RETINA_HPP__\n\n/*\n * Retina.hpp\n *\n *  Created on: Jul 19, 2011\n *      Author: Alexandre Benoit\n */\n\n#include \"opencv2/core/core.hpp\" // for all OpenCV core functionalities access, including cv::Exception support\n#include <valarray>\n\nnamespace cv\n{\n\nenum RETINA_COLORSAMPLINGMETHOD\n{\n    RETINA_COLOR_RANDOM, //!< each pixel position is either R, G or B in a random choice\n    RETINA_COLOR_DIAGONAL,//!< color sampling is RGBRGBRGB..., line 2 BRGBRGBRG..., line 3, GBRGBRGBR...\n    RETINA_COLOR_BAYER//!< standard bayer sampling\n};\n\nclass RetinaFilter;\n\n/**\n * @class Retina a wrapper class which allows the Gipsa/Listic Labs model to be used.\n * This retina model allows spatio-temporal image processing (applied on still images, video sequences).\n * As a summary, these are the retina model properties:\n * => It applies a spectral whithening (mid-frequency details enhancement)\n * => high frequency spatio-temporal noise reduction\n * => low frequency luminance to be reduced (luminance range compression)\n * => local logarithmic luminance compression allows details to be enhanced in low light conditions\n *\n * USE : this model can be used basically for spatio-temporal video effects but also for :\n *      _using the getParvo method output matrix : texture analysiswith enhanced signal to noise ratio and enhanced details robust against input images luminance ranges\n *      _using the getMagno method output matrix : motion analysis also with the previously cited properties\n *\n * for more information, reer to the following papers :\n * Benoit A., Caplier A., Durette B., Herault, J., \"USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING\", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011\n * Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891.\n *\n * The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author :\n * _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper:\n * ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). \"Efficient demosaicing through recursive filtering\", IEEE International Conference on Image Processing ICIP 2007\n * _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions.\n * ====> more informations in the above cited Jeanny Heraults's book.\n */\nclass CV_EXPORTS Retina {\n\npublic:\n\n    // parameters structure for better clarity, check explenations on the comments of methods : setupOPLandIPLParvoChannel and setupIPLMagnoChannel\n    struct RetinaParameters{\n        struct OPLandIplParvoParameters{ // Outer Plexiform Layer (OPL) and Inner Plexiform Layer Parvocellular (IplParvo) parameters\n               OPLandIplParvoParameters():colorMode(true),\n                                 normaliseOutput(true),\n                                 photoreceptorsLocalAdaptationSensitivity(0.7f),\n                                 photoreceptorsTemporalConstant(0.5f),\n                                 photoreceptorsSpatialConstant(0.53f),\n                                 horizontalCellsGain(0.0f),\n                                 hcellsTemporalConstant(1.f),\n                                 hcellsSpatialConstant(7.f),\n                                 ganglionCellsSensitivity(0.7f){};// default setup\n               bool colorMode, normaliseOutput;\n               float photoreceptorsLocalAdaptationSensitivity, photoreceptorsTemporalConstant, photoreceptorsSpatialConstant, horizontalCellsGain, hcellsTemporalConstant, hcellsSpatialConstant, ganglionCellsSensitivity;\n           };\n           struct IplMagnoParameters{ // Inner Plexiform Layer Magnocellular channel (IplMagno)\n               IplMagnoParameters():\n                          normaliseOutput(true),\n                          parasolCells_beta(0.f),\n                          parasolCells_tau(0.f),\n                          parasolCells_k(7.f),\n                          amacrinCellsTemporalCutFrequency(1.2f),\n                          V0CompressionParameter(0.95f),\n                          localAdaptintegration_tau(0.f),\n                          localAdaptintegration_k(7.f){};// default setup\n               bool normaliseOutput;\n               float parasolCells_beta, parasolCells_tau, parasolCells_k, amacrinCellsTemporalCutFrequency, V0CompressionParameter, localAdaptintegration_tau, localAdaptintegration_k;\n           };\n            struct OPLandIplParvoParameters OPLandIplParvo;\n            struct IplMagnoParameters IplMagno;\n    };\n\n    /**\n     * Main constructor with most commun use setup : create an instance of color ready retina model\n     * @param inputSize : the input frame size\n     */\n    Retina(Size inputSize);\n\n    /**\n     * Complete Retina filter constructor which allows all basic structural parameters definition\n         * @param inputSize : the input frame size\n     * @param colorMode : the chosen processing mode : with or without color processing\n     * @param colorSamplingMethod: specifies which kind of color sampling will be used\n     * @param useRetinaLogSampling: activate retina log sampling, if true, the 2 following parameters can be used\n     * @param reductionFactor: only usefull if param useRetinaLogSampling=true, specifies the reduction factor of the output frame (as the center (fovea) is high resolution and corners can be underscaled, then a reduction of the output is allowed without precision leak\n     * @param samplingStrenght: only usefull if param useRetinaLogSampling=true, specifies the strenght of the log scale that is applied\n     */\n    Retina(Size inputSize, const bool colorMode, RETINA_COLORSAMPLINGMETHOD colorSamplingMethod=RETINA_COLOR_BAYER, const bool useRetinaLogSampling=false, const double reductionFactor=1.0, const double samplingStrenght=10.0);\n\n    virtual ~Retina();\n\n    /**\n    * retreive retina input buffer size\n    */\n    Size inputSize();\n\n    /**\n    * retreive retina output buffer size\n    */\n    Size outputSize();\n\n    /**\n     * try to open an XML retina parameters file to adjust current retina instance setup\n     * => if the xml file does not exist, then default setup is applied\n     * => warning, Exceptions are thrown if read XML file is not valid\n     * @param retinaParameterFile : the parameters filename\n         * @param applyDefaultSetupOnFailure : set to true if an error must be thrown on error\n     */\n    void setup(std::string retinaParameterFile=\"\", const bool applyDefaultSetupOnFailure=true);\n\n\n    /**\n     * try to open an XML retina parameters file to adjust current retina instance setup\n     * => if the xml file does not exist, then default setup is applied\n     * => warning, Exceptions are thrown if read XML file is not valid\n     * @param fs : the open Filestorage which contains retina parameters\n     * @param applyDefaultSetupOnFailure : set to true if an error must be thrown on error\n     */\n    void setup(cv::FileStorage &fs, const bool applyDefaultSetupOnFailure=true);\n\n    /**\n     * try to open an XML retina parameters file to adjust current retina instance setup\n     * => if the xml file does not exist, then default setup is applied\n     * => warning, Exceptions are thrown if read XML file is not valid\n     * @param newParameters : a parameters structures updated with the new target configuration\n         * @param applyDefaultSetupOnFailure : set to true if an error must be thrown on error\n     */\n    void setup(RetinaParameters newParameters);\n\n    /**\n     * @return the current parameters setup\n     */\n    Retina::RetinaParameters getParameters();\n\n    /**\n     * parameters setup display method\n     * @return a string which contains formatted parameters information\n     */\n    const std::string printSetup();\n\n    /**\n     * write xml/yml formated parameters information\n     * @rparam fs : the filename of the xml file that will be open and writen with formatted parameters information\n     */\n    virtual void write( std::string fs ) const;\n\n\n    /**\n     * write xml/yml formated parameters information\n     * @param fs : a cv::Filestorage object ready to be filled\n         */\n    virtual void write( FileStorage& fs ) const;\n\n    /**\n     * setup the OPL and IPL parvo channels (see biologocal model)\n     * OPL is referred as Outer Plexiform Layer of the retina, it allows the spatio-temporal filtering which withens the spectrum and reduces spatio-temporal noise while attenuating global luminance (low frequency energy)\n     * IPL parvo is the OPL next processing stage, it refers to Inner Plexiform layer of the retina, it allows high contours sensitivity in foveal vision.\n     * for more informations, please have a look at the paper Benoit A., Caplier A., Durette B., Herault, J., \"USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING\", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011\n     * @param colorMode : specifies if (true) color is processed of not (false) to then processing gray level image\n     * @param normaliseOutput : specifies if (true) output is rescaled between 0 and 255 of not (false)\n     * @param photoreceptorsLocalAdaptationSensitivity: the photoreceptors sensitivity renage is 0-1 (more log compression effect when value increases)\n     * @param photoreceptorsTemporalConstant: the time constant of the first order low pass filter of the photoreceptors, use it to cut high temporal frequencies (noise or fast motion), unit is frames, typical value is 1 frame\n     * @param photoreceptorsSpatialConstant: the spatial constant of the first order low pass filter of the photoreceptors, use it to cut high spatial frequencies (noise or thick contours), unit is pixels, typical value is 1 pixel\n     * @param horizontalCellsGain: gain of the horizontal cells network, if 0, then the mean value of the output is zero, if the parameter is near 1, then, the luminance is not filtered and is still reachable at the output, typicall value is 0\n     * @param HcellsTemporalConstant: the time constant of the first order low pass filter of the horizontal cells, use it to cut low temporal frequencies (local luminance variations), unit is frames, typical value is 1 frame, as the photoreceptors\n     * @param HcellsSpatialConstant: the spatial constant of the first order low pass filter of the horizontal cells, use it to cut low spatial frequencies (local luminance), unit is pixels, typical value is 5 pixel, this value is also used for local contrast computing when computing the local contrast adaptation at the ganglion cells level (Inner Plexiform Layer parvocellular channel model)\n     * @param ganglionCellsSensitivity: the compression strengh of the ganglion cells local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 230\n     */\n    void setupOPLandIPLParvoChannel(const bool colorMode=true, const bool normaliseOutput = true, const float photoreceptorsLocalAdaptationSensitivity=0.7, const float photoreceptorsTemporalConstant=0.5, const float photoreceptorsSpatialConstant=0.53, const float horizontalCellsGain=0, const float HcellsTemporalConstant=1, const float HcellsSpatialConstant=7, const float ganglionCellsSensitivity=0.7);\n\n    /**\n     * set parameters values for the Inner Plexiform Layer (IPL) magnocellular channel\n     * this channel processes signals outpint from OPL processing stage in peripheral vision, it allows motion information enhancement. It is decorrelated from the details channel. See reference paper for more details.\n     * @param normaliseOutput : specifies if (true) output is rescaled between 0 and 255 of not (false)\n     * @param parasolCells_beta: the low pass filter gain used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), typical value is 0\n     * @param parasolCells_tau: the low pass filter time constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is frame, typical value is 0 (immediate response)\n     * @param parasolCells_k: the low pass filter spatial constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is pixels, typical value is 5\n     * @param amacrinCellsTemporalCutFrequency: the time constant of the first order high pass fiter of the magnocellular way (motion information channel), unit is frames, tipicall value is 5\n     * @param V0CompressionParameter: the compression strengh of the ganglion cells local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 200\n     * @param localAdaptintegration_tau: specifies the temporal constant of the low pas filter involved in the computation of the local \"motion mean\" for the local adaptation computation\n     * @param localAdaptintegration_k: specifies the spatial constant of the low pas filter involved in the computation of the local \"motion mean\" for the local adaptation computation\n     */\n    void setupIPLMagnoChannel(const bool normaliseOutput = true, const float parasolCells_beta=0, const float parasolCells_tau=0, const float parasolCells_k=7, const float amacrinCellsTemporalCutFrequency=1.2, const float V0CompressionParameter=0.95, const float localAdaptintegration_tau=0, const float localAdaptintegration_k=7);\n\n    /**\n     * method which allows retina to be applied on an input image, after run, encapsulated retina module is ready to deliver its outputs using dedicated acccessors, see getParvo and getMagno methods\n     * @param inputImage : the input cv::Mat image to be processed, can be gray level or BGR coded in any format (from 8bit to 16bits)\n     */\n    void run(const Mat &inputImage);\n\n    /**\n     * accessor of the details channel of the retina (models foveal vision)\n     * @param retinaOutput_parvo : the output buffer (reallocated if necessary), this output is rescaled for standard 8bits image processing use in OpenCV\n     */\n    void getParvo(Mat &retinaOutput_parvo);\n\n    /**\n     * accessor of the details channel of the retina (models foveal vision)\n     * @param retinaOutput_parvo : the output buffer (reallocated if necessary), this output is the original retina filter model output, without any quantification or rescaling\n     */\n    void getParvo(std::valarray<float> &retinaOutput_parvo);\n\n    /**\n     * accessor of the motion channel of the retina (models peripheral vision)\n     * @param retinaOutput_magno : the output buffer (reallocated if necessary), this output is rescaled for standard 8bits image processing use in OpenCV\n     */\n    void getMagno(Mat &retinaOutput_magno);\n\n    /**\n     * accessor of the motion channel of the retina (models peripheral vision)\n     * @param retinaOutput_magno : the output buffer (reallocated if necessary), this output is the original retina filter model output, without any quantification or rescaling\n     */\n    void getMagno(std::valarray<float> &retinaOutput_magno);\n\n    // original API level data accessors : get buffers addresses...\n    const std::valarray<float> & getMagno() const;\n    const std::valarray<float> & getParvo() const;\n\n    /**\n     * activate color saturation as the final step of the color demultiplexing process\n     * -> this saturation is a sigmoide function applied to each channel of the demultiplexed image.\n     * @param saturateColors: boolean that activates color saturation (if true) or desactivate (if false)\n     * @param colorSaturationValue: the saturation factor\n     */\n    void setColorSaturation(const bool saturateColors=true, const float colorSaturationValue=4.0);\n\n    /**\n     * clear all retina buffers (equivalent to opening the eyes after a long period of eye close ;o)\n     */\n    void clearBuffers();\n\n    /**\n    * Activate/desactivate the Magnocellular pathway processing (motion information extraction), by default, it is activated\n    * @param activate: true if Magnocellular output should be activated, false if not\n    */\n    void activateMovingContoursProcessing(const bool activate);\n\n    /**\n    * Activate/desactivate the Parvocellular pathway processing (contours information extraction), by default, it is activated\n    * @param activate: true if Parvocellular (contours information extraction) output should be activated, false if not\n    */\n    void activateContoursProcessing(const bool activate);\n\nprotected:\n    // Parameteres setup members\n    RetinaParameters _retinaParameters; // structure of parameters\n\n        // Retina model related modules\n    std::valarray<float> _inputBuffer; //!< buffer used to convert input cv::Mat to internal retina buffers format (valarrays)\n\n    // pointer to retina model\n    RetinaFilter* _retinaFilter; //!< the pointer to the retina module, allocated with instance construction\n\n    /**\n     * exports a valarray buffer outing from HVStools objects to a cv::Mat in CV_8UC1 (gray level picture) or CV_8UC3 (color) format\n     * @param grayMatrixToConvert the valarray to export to OpenCV\n     * @param nbRows : the number of rows of the valarray flatten matrix\n     * @param nbColumns : the number of rows of the valarray flatten matrix\n     * @param colorMode : a flag which mentions if matrix is color (true) or graylevel (false)\n     * @param outBuffer : the output matrix which is reallocated to satisfy Retina output buffer dimensions\n     */\n    void _convertValarrayBuffer2cvMat(const std::valarray<float> &grayMatrixToConvert, const unsigned int nbRows, const unsigned int nbColumns, const bool colorMode, Mat &outBuffer);\n\n    /**\n     *\n     * @param inputMatToConvert : the OpenCV cv::Mat that has to be converted to gray or RGB valarray buffer that will be processed by the retina model\n     * @param outputValarrayMatrix : the output valarray\n     * @return the input image color mode (color=true, gray levels=false)\n     */\n        bool _convertCvMat2ValarrayBuffer(const cv::Mat inputMatToConvert, std::valarray<float> &outputValarrayMatrix);\n\n    //! private method called by constructors, gathers their parameters and use them in a unified way\n    void _init(const Size inputSize, const bool colorMode, RETINA_COLORSAMPLINGMETHOD colorSamplingMethod=RETINA_COLOR_BAYER, const bool useRetinaLogSampling=false, const double reductionFactor=1.0, const double samplingStrenght=10.0);\n\n\n};\n\n}\n#endif /* __OPENCV_CONTRIB_RETINA_HPP__ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/affine.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_AFFINE3_HPP__\n#define __OPENCV_CORE_AFFINE3_HPP__\n\n#ifdef __cplusplus\n\n#include <opencv2/core/core.hpp>\n\nnamespace cv\n{\n    template<typename T>\n    class Affine3\n    {\n    public:\n        typedef T float_type;\n        typedef Matx<float_type, 3, 3> Mat3;\n        typedef Matx<float_type, 4, 4> Mat4;\n        typedef Vec<float_type, 3> Vec3;\n\n        Affine3();\n\n        //Augmented affine matrix\n        Affine3(const Mat4& affine);\n\n        //Rotation matrix\n        Affine3(const Mat3& R, const Vec3& t = Vec3::all(0));\n\n        //Rodrigues vector\n        Affine3(const Vec3& rvec, const Vec3& t = Vec3::all(0));\n\n        //Combines all contructors above. Supports 4x4, 4x3, 3x3, 1x3, 3x1 sizes of data matrix\n        explicit Affine3(const Mat& data, const Vec3& t = Vec3::all(0));\n\n        //From 16th element array\n        explicit Affine3(const float_type* vals);\n\n        static Affine3 Identity();\n\n        //Rotation matrix\n        void rotation(const Mat3& R);\n\n        //Rodrigues vector\n        void rotation(const Vec3& rvec);\n\n        //Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix;\n        void rotation(const Mat& data);\n\n        void linear(const Mat3& L);\n        void translation(const Vec3& t);\n\n        Mat3 rotation() const;\n        Mat3 linear() const;\n        Vec3 translation() const;\n\n        //Rodrigues vector\n        Vec3 rvec() const;\n\n        Affine3 inv(int method = cv::DECOMP_SVD) const;\n\n        // a.rotate(R) is equivalent to Affine(R, 0) * a;\n        Affine3 rotate(const Mat3& R) const;\n\n        // a.rotate(R) is equivalent to Affine(rvec, 0) * a;\n        Affine3 rotate(const Vec3& rvec) const;\n\n        // a.translate(t) is equivalent to Affine(E, t) * a;\n        Affine3 translate(const Vec3& t) const;\n\n        // a.concatenate(affine) is equivalent to affine * a;\n        Affine3 concatenate(const Affine3& affine) const;\n\n        template <typename Y> operator Affine3<Y>() const;\n\n        template <typename Y> Affine3<Y> cast() const;\n\n        Mat4 matrix;\n\n#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H\n        Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine);\n        Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine);\n        operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const;\n        operator Eigen::Transform<T, 3, Eigen::Affine>() const;\n#endif\n    };\n\n    template<typename T> static\n    Affine3<T> operator*(const Affine3<T>& affine1, const Affine3<T>& affine2);\n\n    template<typename T, typename V> static\n    V operator*(const Affine3<T>& affine, const V& vector);\n\n    typedef Affine3<float> Affine3f;\n    typedef Affine3<double> Affine3d;\n\n    static Vec3f operator*(const Affine3f& affine, const Vec3f& vector);\n    static Vec3d operator*(const Affine3d& affine, const Vec3d& vector);\n\n    template<typename _Tp> class DataType< Affine3<_Tp> >\n    {\n    public:\n        typedef Affine3<_Tp>                               value_type;\n        typedef Affine3<typename DataType<_Tp>::work_type> work_type;\n        typedef _Tp                                        channel_type;\n\n        enum { generic_type = 0,\n               depth        = DataType<channel_type>::depth,\n               channels     = 16,\n               fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8),\n               type         = CV_MAKETYPE(depth, channels)\n             };\n\n        typedef Vec<channel_type, channels> vec_type;\n    };\n}\n\n\n///////////////////////////////////////////////////////////////////////////////////\n/// Implementaiton\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3()\n    : matrix(Mat4::eye())\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Mat4& affine)\n    : matrix(affine)\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Mat3& R, const Vec3& t)\n{\n    rotation(R);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Vec3& _rvec, const Vec3& t)\n{\n    rotation(_rvec);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const cv::Mat& data, const Vec3& t)\n{\n    CV_Assert(data.type() == cv::DataType<T>::type);\n\n    if (data.cols == 4 && data.rows == 4)\n    {\n        data.copyTo(matrix);\n        return;\n    }\n    else if (data.cols == 4 && data.rows == 3)\n    {\n        rotation(data(Rect(0, 0, 3, 3)));\n        translation(data(Rect(3, 0, 1, 3)));\n        return;\n    }\n\n    rotation(data);\n    translation(t);\n    matrix.val[12] = matrix.val[13] = matrix.val[14] = 0;\n    matrix.val[15] = 1;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const float_type* vals) : matrix(vals)\n{}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::Identity()\n{\n    return Affine3<T>(cv::Affine3<T>::Mat4::eye());\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const Mat3& R)\n{\n    linear(R);\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const Vec3& _rvec)\n{\n    double rx = _rvec[0], ry = _rvec[1], rz = _rvec[2];\n    double theta = std::sqrt(rx*rx + ry*ry + rz*rz);\n\n    if (theta < DBL_EPSILON)\n        rotation(Mat3::eye());\n    else\n    {\n        const double I[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 };\n\n        double c = std::cos(theta);\n        double s = std::sin(theta);\n        double c1 = 1. - c;\n        double itheta = theta ? 1./theta : 0.;\n\n        rx *= itheta; ry *= itheta; rz *= itheta;\n\n        double rrt[] = { rx*rx, rx*ry, rx*rz, rx*ry, ry*ry, ry*rz, rx*rz, ry*rz, rz*rz };\n        double _r_x_[] = { 0, -rz, ry, rz, 0, -rx, -ry, rx, 0 };\n        Mat3 R;\n\n        // R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x]\n        // where [r_x] is [0 -rz ry; rz 0 -rx; -ry rx 0]\n        for(int k = 0; k < 9; ++k)\n            R.val[k] = static_cast<float_type>(c*I[k] + c1*rrt[k] + s*_r_x_[k]);\n\n        rotation(R);\n    }\n}\n\n//Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix;\ntemplate<typename T> inline\nvoid cv::Affine3<T>::rotation(const cv::Mat& data)\n{\n    CV_Assert(data.type() == cv::DataType<T>::type);\n\n    if (data.cols == 3 && data.rows == 3)\n    {\n        Mat3 R;\n        data.copyTo(R);\n        rotation(R);\n    }\n    else if ((data.cols == 3 && data.rows == 1) || (data.cols == 1 && data.rows == 3))\n    {\n        Vec3 _rvec;\n        data.reshape(1, 3).copyTo(_rvec);\n        rotation(_rvec);\n    }\n    else\n        CV_Assert(!\"Input marix can be 3x3, 1x3 or 3x1\");\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::linear(const Mat3& L)\n{\n    matrix.val[0] = L.val[0]; matrix.val[1] = L.val[1];  matrix.val[ 2] = L.val[2];\n    matrix.val[4] = L.val[3]; matrix.val[5] = L.val[4];  matrix.val[ 6] = L.val[5];\n    matrix.val[8] = L.val[6]; matrix.val[9] = L.val[7];  matrix.val[10] = L.val[8];\n}\n\ntemplate<typename T> inline\nvoid cv::Affine3<T>::translation(const Vec3& t)\n{\n    matrix.val[3] = t[0]; matrix.val[7] = t[1]; matrix.val[11] = t[2];\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Mat3 cv::Affine3<T>::rotation() const\n{\n    return linear();\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Mat3 cv::Affine3<T>::linear() const\n{\n    typename cv::Affine3<T>::Mat3 R;\n    R.val[0] = matrix.val[0];  R.val[1] = matrix.val[1];  R.val[2] = matrix.val[ 2];\n    R.val[3] = matrix.val[4];  R.val[4] = matrix.val[5];  R.val[5] = matrix.val[ 6];\n    R.val[6] = matrix.val[8];  R.val[7] = matrix.val[9];  R.val[8] = matrix.val[10];\n    return R;\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Vec3 cv::Affine3<T>::translation() const\n{\n    return Vec3(matrix.val[3], matrix.val[7], matrix.val[11]);\n}\n\ntemplate<typename T> inline\ntypename cv::Affine3<T>::Vec3 cv::Affine3<T>::rvec() const\n{\n    cv::Vec3d w;\n    cv::Matx33d u, vt, R = rotation();\n    cv::SVD::compute(R, w, u, vt, cv::SVD::FULL_UV + cv::SVD::MODIFY_A);\n    R = u * vt;\n\n    double rx = R.val[7] - R.val[5];\n    double ry = R.val[2] - R.val[6];\n    double rz = R.val[3] - R.val[1];\n\n    double s = std::sqrt((rx*rx + ry*ry + rz*rz)*0.25);\n    double c = (R.val[0] + R.val[4] + R.val[8] - 1) * 0.5;\n    c = c > 1.0 ? 1.0 : c < -1.0 ? -1.0 : c;\n    double theta = acos(c);\n\n    if( s < 1e-5 )\n    {\n        if( c > 0 )\n            rx = ry = rz = 0;\n        else\n        {\n            double t;\n            t = (R.val[0] + 1) * 0.5;\n            rx = std::sqrt(std::max(t, 0.0));\n            t = (R.val[4] + 1) * 0.5;\n            ry = std::sqrt(std::max(t, 0.0)) * (R.val[1] < 0 ? -1.0 : 1.0);\n            t = (R.val[8] + 1) * 0.5;\n            rz = std::sqrt(std::max(t, 0.0)) * (R.val[2] < 0 ? -1.0 : 1.0);\n\n            if( fabs(rx) < fabs(ry) && fabs(rx) < fabs(rz) && (R.val[5] > 0) != (ry*rz > 0) )\n                rz = -rz;\n            theta /= std::sqrt(rx*rx + ry*ry + rz*rz);\n            rx *= theta;\n            ry *= theta;\n            rz *= theta;\n        }\n    }\n    else\n    {\n        double vth = 1/(2*s);\n        vth *= theta;\n        rx *= vth; ry *= vth; rz *= vth;\n    }\n\n    return cv::Vec3d(rx, ry, rz);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::inv(int method) const\n{\n    return matrix.inv(method);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::rotate(const Mat3& R) const\n{\n    Mat3 Lc = linear();\n    Vec3 tc = translation();\n    Mat4 result;\n    result.val[12] = result.val[13] = result.val[14] = 0;\n    result.val[15] = 1;\n\n    for(int j = 0; j < 3; ++j)\n    {\n        for(int i = 0; i < 3; ++i)\n        {\n            float_type value = 0;\n            for(int k = 0; k < 3; ++k)\n                value += R(j, k) * Lc(k, i);\n            result(j, i) = value;\n        }\n\n        result(j, 3) = R.row(j).dot(tc.t());\n    }\n    return result;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::rotate(const Vec3& _rvec) const\n{\n    return rotate(Affine3f(_rvec).rotation());\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::translate(const Vec3& t) const\n{\n    Mat4 m = matrix;\n    m.val[ 3] += t[0];\n    m.val[ 7] += t[1];\n    m.val[11] += t[2];\n    return m;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::Affine3<T>::concatenate(const Affine3<T>& affine) const\n{\n    return (*this).rotate(affine.rotation()).translate(affine.translation());\n}\n\ntemplate<typename T> template <typename Y> inline\ncv::Affine3<T>::operator Affine3<Y>() const\n{\n    return Affine3<Y>(matrix);\n}\n\ntemplate<typename T> template <typename Y> inline\ncv::Affine3<Y> cv::Affine3<T>::cast() const\n{\n    return Affine3<Y>(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T> cv::operator*(const cv::Affine3<T>& affine1, const cv::Affine3<T>& affine2)\n{\n    return affine2.concatenate(affine1);\n}\n\ntemplate<typename T, typename V> inline\nV cv::operator*(const cv::Affine3<T>& affine, const V& v)\n{\n    const typename Affine3<T>::Mat4& m = affine.matrix;\n\n    V r;\n    r.x = m.val[0] * v.x + m.val[1] * v.y + m.val[ 2] * v.z + m.val[ 3];\n    r.y = m.val[4] * v.x + m.val[5] * v.y + m.val[ 6] * v.z + m.val[ 7];\n    r.z = m.val[8] * v.x + m.val[9] * v.y + m.val[10] * v.z + m.val[11];\n    return r;\n}\n\nstatic inline\ncv::Vec3f cv::operator*(const cv::Affine3f& affine, const cv::Vec3f& v)\n{\n    const cv::Matx44f& m = affine.matrix;\n    cv::Vec3f r;\n    r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3];\n    r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7];\n    r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11];\n    return r;\n}\n\nstatic inline\ncv::Vec3d cv::operator*(const cv::Affine3d& affine, const cv::Vec3d& v)\n{\n    const cv::Matx44d& m = affine.matrix;\n    cv::Vec3d r;\n    r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3];\n    r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7];\n    r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11];\n    return r;\n}\n\n\n\n#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine)\n{\n    cv::Mat(4, 4, cv::DataType<T>::type, affine.matrix().data()).copyTo(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine)\n{\n    Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> a = affine;\n    cv::Mat(4, 4, cv::DataType<T>::type, a.matrix().data()).copyTo(matrix);\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const\n{\n    Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> r;\n    cv::Mat hdr(4, 4, cv::DataType<T>::type, r.matrix().data());\n    cv::Mat(matrix, false).copyTo(hdr);\n    return r;\n}\n\ntemplate<typename T> inline\ncv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine>() const\n{\n    return this->operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>();\n}\n\n#endif /* defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H */\n\n\n#endif /* __cplusplus */\n\n#endif /* __OPENCV_CORE_AFFINE3_HPP__ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/core.hpp",
    "content": "/*! \\file core.hpp\n    \\brief The Core Functionality\n */\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_HPP__\n#define __OPENCV_CORE_HPP__\n\n#include \"opencv2/core/types_c.h\"\n#include \"opencv2/core/version.hpp\"\n\n#ifdef __cplusplus\n\n#ifndef SKIP_INCLUDES\n#include <limits.h>\n#include <algorithm>\n#include <cmath>\n#include <cstddef>\n#include <complex>\n#include <map>\n#include <new>\n#include <string>\n#include <vector>\n#include <sstream>\n#endif // SKIP_INCLUDES\n\n/*! \\namespace cv\n    Namespace where all the C++ OpenCV functionality resides\n*/\nnamespace cv {\n\n#undef abs\n#undef min\n#undef max\n#undef Complex\n\nusing std::vector;\nusing std::string;\nusing std::ptrdiff_t;\n\ntemplate<typename _Tp> class Size_;\ntemplate<typename _Tp> class Point_;\ntemplate<typename _Tp> class Rect_;\ntemplate<typename _Tp, int cn> class Vec;\ntemplate<typename _Tp, int m, int n> class Matx;\n\ntypedef std::string String;\n\nclass Mat;\nclass SparseMat;\ntypedef Mat MatND;\n\nnamespace ogl {\n    class Buffer;\n    class Texture2D;\n    class Arrays;\n}\n\n// < Deprecated\nclass GlBuffer;\nclass GlTexture;\nclass GlArrays;\nclass GlCamera;\n// >\n\nnamespace gpu {\n    class GpuMat;\n}\n\nclass CV_EXPORTS MatExpr;\nclass CV_EXPORTS MatOp_Base;\nclass CV_EXPORTS MatArg;\nclass CV_EXPORTS MatConstIterator;\n\ntemplate<typename _Tp> class Mat_;\ntemplate<typename _Tp> class MatIterator_;\ntemplate<typename _Tp> class MatConstIterator_;\ntemplate<typename _Tp> class MatCommaInitializer_;\n\n#if !defined(ANDROID) || (defined(_GLIBCXX_USE_WCHAR_T) && _GLIBCXX_USE_WCHAR_T)\ntypedef std::basic_string<wchar_t> WString;\n\nCV_EXPORTS string fromUtf16(const WString& str);\nCV_EXPORTS WString toUtf16(const string& str);\n#endif\n\nCV_EXPORTS string format( const char* fmt, ... );\nCV_EXPORTS string tempfile( const char* suffix CV_DEFAULT(0));\n\n// matrix decomposition types\nenum { DECOMP_LU=0, DECOMP_SVD=1, DECOMP_EIG=2, DECOMP_CHOLESKY=3, DECOMP_QR=4, DECOMP_NORMAL=16 };\nenum { NORM_INF=1, NORM_L1=2, NORM_L2=4, NORM_L2SQR=5, NORM_HAMMING=6, NORM_HAMMING2=7, NORM_TYPE_MASK=7, NORM_RELATIVE=8, NORM_MINMAX=32 };\nenum { CMP_EQ=0, CMP_GT=1, CMP_GE=2, CMP_LT=3, CMP_LE=4, CMP_NE=5 };\nenum { GEMM_1_T=1, GEMM_2_T=2, GEMM_3_T=4 };\nenum { DFT_INVERSE=1, DFT_SCALE=2, DFT_ROWS=4, DFT_COMPLEX_OUTPUT=16, DFT_REAL_OUTPUT=32,\n    DCT_INVERSE = DFT_INVERSE, DCT_ROWS=DFT_ROWS };\n\n\n/*!\n The standard OpenCV exception class.\n Instances of the class are thrown by various functions and methods in the case of critical errors.\n */\nclass CV_EXPORTS Exception : public std::exception\n{\npublic:\n    /*!\n     Default constructor\n     */\n    Exception();\n    /*!\n     Full constructor. Normally the constuctor is not called explicitly.\n     Instead, the macros CV_Error(), CV_Error_() and CV_Assert() are used.\n    */\n    Exception(int _code, const string& _err, const string& _func, const string& _file, int _line);\n    virtual ~Exception() throw();\n\n    /*!\n     \\return the error description and the context as a text string.\n    */\n    virtual const char *what() const throw();\n    void formatMessage();\n\n    string msg; ///< the formatted error message\n\n    int code; ///< error code @see CVStatus\n    string err; ///< error description\n    string func; ///< function name. Available only when the compiler supports getting it\n    string file; ///< source file name where the error has occured\n    int line; ///< line number in the source file where the error has occured\n};\n\n\n//! Signals an error and raises the exception.\n\n/*!\n  By default the function prints information about the error to stderr,\n  then it either stops if setBreakOnError() had been called before or raises the exception.\n  It is possible to alternate error processing by using redirectError().\n\n  \\param exc the exception raisen.\n */\nCV_EXPORTS void error( const Exception& exc );\n\n//! Sets/resets the break-on-error mode.\n\n/*!\n  When the break-on-error mode is set, the default error handler\n  issues a hardware exception, which can make debugging more convenient.\n\n  \\return the previous state\n */\nCV_EXPORTS bool setBreakOnError(bool flag);\n\ntypedef int (CV_CDECL *ErrorCallback)( int status, const char* func_name,\n                                       const char* err_msg, const char* file_name,\n                                       int line, void* userdata );\n\n//! Sets the new error handler and the optional user data.\n\n/*!\n  The function sets the new error handler, called from cv::error().\n\n  \\param errCallback the new error handler. If NULL, the default error handler is used.\n  \\param userdata the optional user data pointer, passed to the callback.\n  \\param prevUserdata the optional output parameter where the previous user data pointer is stored\n\n  \\return the previous error handler\n*/\nCV_EXPORTS ErrorCallback redirectError( ErrorCallback errCallback,\n                                        void* userdata=0, void** prevUserdata=0);\n\n\n#if defined __GNUC__\n#define CV_Func __func__\n#elif defined _MSC_VER\n#define CV_Func __FUNCTION__\n#else\n#define CV_Func \"\"\n#endif\n\n#define CV_Error( code, msg ) cv::error( cv::Exception(code, msg, CV_Func, __FILE__, __LINE__) )\n#define CV_Error_( code, args ) cv::error( cv::Exception(code, cv::format args, CV_Func, __FILE__, __LINE__) )\n#define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Exception(CV_StsAssert, #expr, CV_Func, __FILE__, __LINE__) )\n\n#ifdef _DEBUG\n#define CV_DbgAssert(expr) CV_Assert(expr)\n#else\n#define CV_DbgAssert(expr)\n#endif\n\nCV_EXPORTS void glob(String pattern, std::vector<String>& result, bool recursive = false);\n\nCV_EXPORTS void setNumThreads(int nthreads);\nCV_EXPORTS int getNumThreads();\nCV_EXPORTS int getThreadNum();\n\nCV_EXPORTS_W const string& getBuildInformation();\n\n//! Returns the number of ticks.\n\n/*!\n  The function returns the number of ticks since the certain event (e.g. when the machine was turned on).\n  It can be used to initialize cv::RNG or to measure a function execution time by reading the tick count\n  before and after the function call. The granularity of ticks depends on the hardware and OS used. Use\n  cv::getTickFrequency() to convert ticks to seconds.\n*/\nCV_EXPORTS_W int64 getTickCount();\n\n/*!\n  Returns the number of ticks per seconds.\n\n  The function returns the number of ticks (as returned by cv::getTickCount()) per second.\n  The following code computes the execution time in milliseconds:\n\n  \\code\n  double exec_time = (double)getTickCount();\n  // do something ...\n  exec_time = ((double)getTickCount() - exec_time)*1000./getTickFrequency();\n  \\endcode\n*/\nCV_EXPORTS_W double getTickFrequency();\n\n/*!\n  Returns the number of CPU ticks.\n\n  On platforms where the feature is available, the function returns the number of CPU ticks\n  since the certain event (normally, the system power-on moment). Using this function\n  one can accurately measure the execution time of very small code fragments,\n  for which cv::getTickCount() granularity is not enough.\n*/\nCV_EXPORTS_W int64 getCPUTickCount();\n\n/*!\n  Returns SSE etc. support status\n\n  The function returns true if certain hardware features are available.\n  Currently, the following features are recognized:\n  - CV_CPU_MMX - MMX\n  - CV_CPU_SSE - SSE\n  - CV_CPU_SSE2 - SSE 2\n  - CV_CPU_SSE3 - SSE 3\n  - CV_CPU_SSSE3 - SSSE 3\n  - CV_CPU_SSE4_1 - SSE 4.1\n  - CV_CPU_SSE4_2 - SSE 4.2\n  - CV_CPU_POPCNT - POPCOUNT\n  - CV_CPU_AVX - AVX\n\n  \\note {Note that the function output is not static. Once you called cv::useOptimized(false),\n  most of the hardware acceleration is disabled and thus the function will returns false,\n  until you call cv::useOptimized(true)}\n*/\nCV_EXPORTS_W bool checkHardwareSupport(int feature);\n\n//! returns the number of CPUs (including hyper-threading)\nCV_EXPORTS_W int getNumberOfCPUs();\n\n/*!\n  Allocates memory buffer\n\n  This is specialized OpenCV memory allocation function that returns properly aligned memory buffers.\n  The usage is identical to malloc(). The allocated buffers must be freed with cv::fastFree().\n  If there is not enough memory, the function calls cv::error(), which raises an exception.\n\n  \\param bufSize buffer size in bytes\n  \\return the allocated memory buffer.\n*/\nCV_EXPORTS void* fastMalloc(size_t bufSize);\n\n/*!\n  Frees the memory allocated with cv::fastMalloc\n\n  This is the corresponding deallocation function for cv::fastMalloc().\n  When ptr==NULL, the function has no effect.\n*/\nCV_EXPORTS void fastFree(void* ptr);\n\ntemplate<typename _Tp> static inline _Tp* allocate(size_t n)\n{\n    return new _Tp[n];\n}\n\ntemplate<typename _Tp> static inline void deallocate(_Tp* ptr, size_t)\n{\n    delete[] ptr;\n}\n\n/*!\n  Aligns pointer by the certain number of bytes\n\n  This small inline function aligns the pointer by the certian number of bytes by shifting\n  it forward by 0 or a positive offset.\n*/\ntemplate<typename _Tp> static inline _Tp* alignPtr(_Tp* ptr, int n=(int)sizeof(_Tp))\n{\n    return (_Tp*)(((size_t)ptr + n-1) & -n);\n}\n\n/*!\n  Aligns buffer size by the certain number of bytes\n\n  This small inline function aligns a buffer size by the certian number of bytes by enlarging it.\n*/\nstatic inline size_t alignSize(size_t sz, int n)\n{\n    assert((n & (n - 1)) == 0); // n is a power of 2\n    return (sz + n-1) & -n;\n}\n\n/*!\n  Turns on/off available optimization\n\n  The function turns on or off the optimized code in OpenCV. Some optimization can not be enabled\n  or disabled, but, for example, most of SSE code in OpenCV can be temporarily turned on or off this way.\n\n  \\note{Since optimization may imply using special data structures, it may be unsafe\n  to call this function anywhere in the code. Instead, call it somewhere at the top level.}\n*/\nCV_EXPORTS_W void setUseOptimized(bool onoff);\n\n/*!\n  Returns the current optimization status\n\n  The function returns the current optimization status, which is controlled by cv::setUseOptimized().\n*/\nCV_EXPORTS_W bool useOptimized();\n\n/*!\n  The STL-compilant memory Allocator based on cv::fastMalloc() and cv::fastFree()\n*/\ntemplate<typename _Tp> class Allocator\n{\npublic:\n    typedef _Tp value_type;\n    typedef value_type* pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type& reference;\n    typedef const value_type& const_reference;\n    typedef size_t size_type;\n    typedef ptrdiff_t difference_type;\n    template<typename U> class rebind { typedef Allocator<U> other; };\n\n    explicit Allocator() {}\n    ~Allocator() {}\n    explicit Allocator(Allocator const&) {}\n    template<typename U>\n    explicit Allocator(Allocator<U> const&) {}\n\n    // address\n    pointer address(reference r) { return &r; }\n    const_pointer address(const_reference r) { return &r; }\n\n    pointer allocate(size_type count, const void* =0)\n    { return reinterpret_cast<pointer>(fastMalloc(count * sizeof (_Tp))); }\n\n    void deallocate(pointer p, size_type) {fastFree(p); }\n\n    size_type max_size() const\n    { return max(static_cast<_Tp>(-1)/sizeof(_Tp), 1); }\n\n    void construct(pointer p, const _Tp& v) { new(static_cast<void*>(p)) _Tp(v); }\n    void destroy(pointer p) { p->~_Tp(); }\n};\n\n/////////////////////// Vec (used as element of multi-channel images /////////////////////\n\n/*!\n  A helper class for cv::DataType\n\n  The class is specialized for each fundamental numerical data type supported by OpenCV.\n  It provides DataDepth<T>::value constant.\n*/\ntemplate<typename _Tp> class DataDepth {};\n\ntemplate<> class DataDepth<bool> { public: enum { value = CV_8U, fmt=(int)'u' }; };\ntemplate<> class DataDepth<uchar> { public: enum { value = CV_8U, fmt=(int)'u' }; };\ntemplate<> class DataDepth<schar> { public: enum { value = CV_8S, fmt=(int)'c' }; };\ntemplate<> class DataDepth<char> { public: enum { value = CV_8S, fmt=(int)'c' }; };\ntemplate<> class DataDepth<ushort> { public: enum { value = CV_16U, fmt=(int)'w' }; };\ntemplate<> class DataDepth<short> { public: enum { value = CV_16S, fmt=(int)'s' }; };\ntemplate<> class DataDepth<int> { public: enum { value = CV_32S, fmt=(int)'i' }; };\n// this is temporary solution to support 32-bit unsigned integers\ntemplate<> class DataDepth<unsigned> { public: enum { value = CV_32S, fmt=(int)'i' }; };\ntemplate<> class DataDepth<float> { public: enum { value = CV_32F, fmt=(int)'f' }; };\ntemplate<> class DataDepth<double> { public: enum { value = CV_64F, fmt=(int)'d' }; };\ntemplate<typename _Tp> class DataDepth<_Tp*> { public: enum { value = CV_USRTYPE1, fmt=(int)'r' }; };\n\n\n////////////////////////////// Small Matrix ///////////////////////////\n\n/*!\n A short numerical vector.\n\n This template class represents short numerical vectors (of 1, 2, 3, 4 ... elements)\n on which you can perform basic arithmetical operations, access individual elements using [] operator etc.\n The vectors are allocated on stack, as opposite to std::valarray, std::vector, cv::Mat etc.,\n which elements are dynamically allocated in the heap.\n\n The template takes 2 parameters:\n -# _Tp element type\n -# cn the number of elements\n\n In addition to the universal notation like Vec<float, 3>, you can use shorter aliases\n for the most popular specialized variants of Vec, e.g. Vec3f ~ Vec<float, 3>.\n */\n\nstruct CV_EXPORTS Matx_AddOp {};\nstruct CV_EXPORTS Matx_SubOp {};\nstruct CV_EXPORTS Matx_ScaleOp {};\nstruct CV_EXPORTS Matx_MulOp {};\nstruct CV_EXPORTS Matx_MatMulOp {};\nstruct CV_EXPORTS Matx_TOp {};\n\ntemplate<typename _Tp, int m, int n> class Matx\n{\npublic:\n    typedef _Tp value_type;\n    typedef Matx<_Tp, (m < n ? m : n), 1> diag_type;\n    typedef Matx<_Tp, m, n> mat_type;\n    enum { depth = DataDepth<_Tp>::value, rows = m, cols = n, channels = rows*cols,\n           type = CV_MAKETYPE(depth, channels) };\n\n    //! default constructor\n    Matx();\n\n    Matx(_Tp v0); //!< 1x1 matrix\n    Matx(_Tp v0, _Tp v1); //!< 1x2 or 2x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2); //!< 1x3 or 3x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3); //!< 1x4, 2x2 or 4x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4); //!< 1x5 or 5x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5); //!< 1x6, 2x3, 3x2 or 6x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6); //!< 1x7 or 7x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7); //!< 1x8, 2x4, 4x2 or 8x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8); //!< 1x9, 3x3 or 9x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9); //!< 1x10, 2x5 or 5x2 or 10x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n         _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n         _Tp v8, _Tp v9, _Tp v10, _Tp v11); //!< 1x12, 2x6, 3x4, 4x3, 6x2 or 12x1 matrix\n    Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n         _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n         _Tp v8, _Tp v9, _Tp v10, _Tp v11,\n         _Tp v12, _Tp v13, _Tp v14, _Tp v15); //!< 1x16, 4x4 or 16x1 matrix\n    explicit Matx(const _Tp* vals); //!< initialize from a plain array\n\n    static Matx all(_Tp alpha);\n    static Matx zeros();\n    static Matx ones();\n    static Matx eye();\n    static Matx diag(const diag_type& d);\n    static Matx randu(_Tp a, _Tp b);\n    static Matx randn(_Tp a, _Tp b);\n\n    //! dot product computed with the default precision\n    _Tp dot(const Matx<_Tp, m, n>& v) const;\n\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Matx<_Tp, m, n>& v) const;\n\n    //! convertion to another data type\n    template<typename T2> operator Matx<T2, m, n>() const;\n\n    //! change the matrix shape\n    template<int m1, int n1> Matx<_Tp, m1, n1> reshape() const;\n\n    //! extract part of the matrix\n    template<int m1, int n1> Matx<_Tp, m1, n1> get_minor(int i, int j) const;\n\n    //! extract the matrix row\n    Matx<_Tp, 1, n> row(int i) const;\n\n    //! extract the matrix column\n    Matx<_Tp, m, 1> col(int i) const;\n\n    //! extract the matrix diagonal\n    diag_type diag() const;\n\n    //! transpose the matrix\n    Matx<_Tp, n, m> t() const;\n\n    //! invert matrix the matrix\n    Matx<_Tp, n, m> inv(int method=DECOMP_LU) const;\n\n    //! solve linear system\n    template<int l> Matx<_Tp, n, l> solve(const Matx<_Tp, m, l>& rhs, int flags=DECOMP_LU) const;\n    Vec<_Tp, n> solve(const Vec<_Tp, m>& rhs, int method) const;\n\n    //! multiply two matrices element-wise\n    Matx<_Tp, m, n> mul(const Matx<_Tp, m, n>& a) const;\n\n    //! element access\n    const _Tp& operator ()(int i, int j) const;\n    _Tp& operator ()(int i, int j);\n\n    //! 1D element access\n    const _Tp& operator ()(int i) const;\n    _Tp& operator ()(int i);\n\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_AddOp);\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp);\n    template<typename _T2> Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp);\n    Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp);\n    template<int l> Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp);\n    Matx(const Matx<_Tp, n, m>& a, Matx_TOp);\n\n    _Tp val[m*n]; //< matrix elements\n};\n\n\ntypedef Matx<float, 1, 2> Matx12f;\ntypedef Matx<double, 1, 2> Matx12d;\ntypedef Matx<float, 1, 3> Matx13f;\ntypedef Matx<double, 1, 3> Matx13d;\ntypedef Matx<float, 1, 4> Matx14f;\ntypedef Matx<double, 1, 4> Matx14d;\ntypedef Matx<float, 1, 6> Matx16f;\ntypedef Matx<double, 1, 6> Matx16d;\n\ntypedef Matx<float, 2, 1> Matx21f;\ntypedef Matx<double, 2, 1> Matx21d;\ntypedef Matx<float, 3, 1> Matx31f;\ntypedef Matx<double, 3, 1> Matx31d;\ntypedef Matx<float, 4, 1> Matx41f;\ntypedef Matx<double, 4, 1> Matx41d;\ntypedef Matx<float, 6, 1> Matx61f;\ntypedef Matx<double, 6, 1> Matx61d;\n\ntypedef Matx<float, 2, 2> Matx22f;\ntypedef Matx<double, 2, 2> Matx22d;\ntypedef Matx<float, 2, 3> Matx23f;\ntypedef Matx<double, 2, 3> Matx23d;\ntypedef Matx<float, 3, 2> Matx32f;\ntypedef Matx<double, 3, 2> Matx32d;\n\ntypedef Matx<float, 3, 3> Matx33f;\ntypedef Matx<double, 3, 3> Matx33d;\n\ntypedef Matx<float, 3, 4> Matx34f;\ntypedef Matx<double, 3, 4> Matx34d;\ntypedef Matx<float, 4, 3> Matx43f;\ntypedef Matx<double, 4, 3> Matx43d;\n\ntypedef Matx<float, 4, 4> Matx44f;\ntypedef Matx<double, 4, 4> Matx44d;\ntypedef Matx<float, 6, 6> Matx66f;\ntypedef Matx<double, 6, 6> Matx66d;\n\n\n/*!\n  A short numerical vector.\n\n  This template class represents short numerical vectors (of 1, 2, 3, 4 ... elements)\n  on which you can perform basic arithmetical operations, access individual elements using [] operator etc.\n  The vectors are allocated on stack, as opposite to std::valarray, std::vector, cv::Mat etc.,\n  which elements are dynamically allocated in the heap.\n\n  The template takes 2 parameters:\n  -# _Tp element type\n  -# cn the number of elements\n\n  In addition to the universal notation like Vec<float, 3>, you can use shorter aliases\n  for the most popular specialized variants of Vec, e.g. Vec3f ~ Vec<float, 3>.\n*/\ntemplate<typename _Tp, int cn> class Vec : public Matx<_Tp, cn, 1>\n{\npublic:\n    typedef _Tp value_type;\n    enum { depth = DataDepth<_Tp>::value, channels = cn, type = CV_MAKETYPE(depth, channels) };\n\n    //! default constructor\n    Vec();\n\n    Vec(_Tp v0); //!< 1-element vector constructor\n    Vec(_Tp v0, _Tp v1); //!< 2-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2); //!< 3-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3); //!< 4-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4); //!< 5-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5); //!< 6-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6); //!< 7-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7); //!< 8-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8); //!< 9-element vector constructor\n    Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9); //!< 10-element vector constructor\n    explicit Vec(const _Tp* values);\n\n    Vec(const Vec<_Tp, cn>& v);\n\n    static Vec all(_Tp alpha);\n\n    //! per-element multiplication\n    Vec mul(const Vec<_Tp, cn>& v) const;\n\n    //! conjugation (makes sense for complex numbers and quaternions)\n    Vec conj() const;\n\n    /*!\n      cross product of the two 3D vectors.\n\n      For other dimensionalities the exception is raised\n    */\n    Vec cross(const Vec& v) const;\n    //! convertion to another data type\n    template<typename T2> operator Vec<T2, cn>() const;\n    //! conversion to 4-element CvScalar.\n    operator CvScalar() const;\n\n    /*! element access */\n    const _Tp& operator [](int i) const;\n    _Tp& operator[](int i);\n    const _Tp& operator ()(int i) const;\n    _Tp& operator ()(int i);\n\n    Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp);\n    Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp);\n    template<typename _T2> Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp);\n};\n\n\n/* \\typedef\n\n   Shorter aliases for the most popular specializations of Vec<T,n>\n*/\ntypedef Vec<uchar, 2> Vec2b;\ntypedef Vec<uchar, 3> Vec3b;\ntypedef Vec<uchar, 4> Vec4b;\n\ntypedef Vec<short, 2> Vec2s;\ntypedef Vec<short, 3> Vec3s;\ntypedef Vec<short, 4> Vec4s;\n\ntypedef Vec<ushort, 2> Vec2w;\ntypedef Vec<ushort, 3> Vec3w;\ntypedef Vec<ushort, 4> Vec4w;\n\ntypedef Vec<int, 2> Vec2i;\ntypedef Vec<int, 3> Vec3i;\ntypedef Vec<int, 4> Vec4i;\ntypedef Vec<int, 6> Vec6i;\ntypedef Vec<int, 8> Vec8i;\n\ntypedef Vec<float, 2> Vec2f;\ntypedef Vec<float, 3> Vec3f;\ntypedef Vec<float, 4> Vec4f;\ntypedef Vec<float, 6> Vec6f;\n\ntypedef Vec<double, 2> Vec2d;\ntypedef Vec<double, 3> Vec3d;\ntypedef Vec<double, 4> Vec4d;\ntypedef Vec<double, 6> Vec6d;\n\n\n//////////////////////////////// Complex //////////////////////////////\n\n/*!\n  A complex number class.\n\n  The template class is similar and compatible with std::complex, however it provides slightly\n  more convenient access to the real and imaginary parts using through the simple field access, as opposite\n  to std::complex::real() and std::complex::imag().\n*/\ntemplate<typename _Tp> class Complex\n{\npublic:\n\n    //! constructors\n    Complex();\n    Complex( _Tp _re, _Tp _im=0 );\n    Complex( const std::complex<_Tp>& c );\n\n    //! conversion to another data type\n    template<typename T2> operator Complex<T2>() const;\n    //! conjugation\n    Complex conj() const;\n    //! conversion to std::complex\n    operator std::complex<_Tp>() const;\n\n    _Tp re, im; //< the real and the imaginary parts\n};\n\n\n/*!\n  \\typedef\n*/\ntypedef Complex<float> Complexf;\ntypedef Complex<double> Complexd;\n\n\n//////////////////////////////// Point_ ////////////////////////////////\n\n/*!\n  template 2D point class.\n\n  The class defines a point in 2D space. Data type of the point coordinates is specified\n  as a template parameter. There are a few shorter aliases available for user convenience.\n  See cv::Point, cv::Point2i, cv::Point2f and cv::Point2d.\n*/\ntemplate<typename _Tp> class Point_\n{\npublic:\n    typedef _Tp value_type;\n\n    // various constructors\n    Point_();\n    Point_(_Tp _x, _Tp _y);\n    Point_(const Point_& pt);\n    Point_(const CvPoint& pt);\n    Point_(const CvPoint2D32f& pt);\n    Point_(const Size_<_Tp>& sz);\n    Point_(const Vec<_Tp, 2>& v);\n\n    Point_& operator = (const Point_& pt);\n    //! conversion to another data type\n    template<typename _Tp2> operator Point_<_Tp2>() const;\n\n    //! conversion to the old-style C structures\n    operator CvPoint() const;\n    operator CvPoint2D32f() const;\n    operator Vec<_Tp, 2>() const;\n\n    //! dot product\n    _Tp dot(const Point_& pt) const;\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Point_& pt) const;\n    //! cross-product\n    double cross(const Point_& pt) const;\n    //! checks whether the point is inside the specified rectangle\n    bool inside(const Rect_<_Tp>& r) const;\n\n    _Tp x, y; //< the point coordinates\n};\n\n/*!\n  template 3D point class.\n\n  The class defines a point in 3D space. Data type of the point coordinates is specified\n  as a template parameter.\n\n  \\see cv::Point3i, cv::Point3f and cv::Point3d\n*/\ntemplate<typename _Tp> class Point3_\n{\npublic:\n    typedef _Tp value_type;\n\n    // various constructors\n    Point3_();\n    Point3_(_Tp _x, _Tp _y, _Tp _z);\n    Point3_(const Point3_& pt);\n    explicit Point3_(const Point_<_Tp>& pt);\n    Point3_(const CvPoint3D32f& pt);\n    Point3_(const Vec<_Tp, 3>& v);\n\n    Point3_& operator = (const Point3_& pt);\n    //! conversion to another data type\n    template<typename _Tp2> operator Point3_<_Tp2>() const;\n    //! conversion to the old-style CvPoint...\n    operator CvPoint3D32f() const;\n    //! conversion to cv::Vec<>\n    operator Vec<_Tp, 3>() const;\n\n    //! dot product\n    _Tp dot(const Point3_& pt) const;\n    //! dot product computed in double-precision arithmetics\n    double ddot(const Point3_& pt) const;\n    //! cross product of the 2 3D points\n    Point3_ cross(const Point3_& pt) const;\n\n    _Tp x, y, z; //< the point coordinates\n};\n\n//////////////////////////////// Size_ ////////////////////////////////\n\n/*!\n  The 2D size class\n\n  The class represents the size of a 2D rectangle, image size, matrix size etc.\n  Normally, cv::Size ~ cv::Size_<int> is used.\n*/\ntemplate<typename _Tp> class Size_\n{\npublic:\n    typedef _Tp value_type;\n\n    //! various constructors\n    Size_();\n    Size_(_Tp _width, _Tp _height);\n    Size_(const Size_& sz);\n    Size_(const CvSize& sz);\n    Size_(const CvSize2D32f& sz);\n    Size_(const Point_<_Tp>& pt);\n\n    Size_& operator = (const Size_& sz);\n    //! the area (width*height)\n    _Tp area() const;\n\n    //! conversion of another data type.\n    template<typename _Tp2> operator Size_<_Tp2>() const;\n\n    //! conversion to the old-style OpenCV types\n    operator CvSize() const;\n    operator CvSize2D32f() const;\n\n    _Tp width, height; // the width and the height\n};\n\n//////////////////////////////// Rect_ ////////////////////////////////\n\n/*!\n  The 2D up-right rectangle class\n\n  The class represents a 2D rectangle with coordinates of the specified data type.\n  Normally, cv::Rect ~ cv::Rect_<int> is used.\n*/\ntemplate<typename _Tp> class Rect_\n{\npublic:\n    typedef _Tp value_type;\n\n    //! various constructors\n    Rect_();\n    Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);\n    Rect_(const Rect_& r);\n    Rect_(const CvRect& r);\n    Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz);\n    Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2);\n\n    Rect_& operator = ( const Rect_& r );\n    //! the top-left corner\n    Point_<_Tp> tl() const;\n    //! the bottom-right corner\n    Point_<_Tp> br() const;\n\n    //! size (width, height) of the rectangle\n    Size_<_Tp> size() const;\n    //! area (width*height) of the rectangle\n    _Tp area() const;\n\n    //! conversion to another data type\n    template<typename _Tp2> operator Rect_<_Tp2>() const;\n    //! conversion to the old-style CvRect\n    operator CvRect() const;\n\n    //! checks whether the rectangle contains the point\n    bool contains(const Point_<_Tp>& pt) const;\n\n    _Tp x, y, width, height; //< the top-left corner, as well as width and height of the rectangle\n};\n\n\n/*!\n  \\typedef\n\n  shorter aliases for the most popular cv::Point_<>, cv::Size_<> and cv::Rect_<> specializations\n*/\ntypedef Point_<int> Point2i;\ntypedef Point2i Point;\ntypedef Size_<int> Size2i;\ntypedef Size_<double> Size2d;\ntypedef Size2i Size;\ntypedef Rect_<int> Rect;\ntypedef Point_<float> Point2f;\ntypedef Point_<double> Point2d;\ntypedef Size_<float> Size2f;\ntypedef Point3_<int> Point3i;\ntypedef Point3_<float> Point3f;\ntypedef Point3_<double> Point3d;\n\n\n/*!\n  The rotated 2D rectangle.\n\n  The class represents rotated (i.e. not up-right) rectangles on a plane.\n  Each rectangle is described by the center point (mass center), length of each side\n  (represented by cv::Size2f structure) and the rotation angle in degrees.\n*/\nclass CV_EXPORTS RotatedRect\n{\npublic:\n    //! various constructors\n    RotatedRect();\n    RotatedRect(const Point2f& center, const Size2f& size, float angle);\n    RotatedRect(const CvBox2D& box);\n\n    //! returns 4 vertices of the rectangle\n    void points(Point2f pts[]) const;\n    //! returns the minimal up-right rectangle containing the rotated rectangle\n    Rect boundingRect() const;\n    //! conversion to the old-style CvBox2D structure\n    operator CvBox2D() const;\n\n    Point2f center; //< the rectangle mass center\n    Size2f size;    //< width and height of the rectangle\n    float angle;    //< the rotation angle. When the angle is 0, 90, 180, 270 etc., the rectangle becomes an up-right rectangle.\n};\n\n//////////////////////////////// Scalar_ ///////////////////////////////\n\n/*!\n   The template scalar class.\n\n   This is partially specialized cv::Vec class with the number of elements = 4, i.e. a short vector of four elements.\n   Normally, cv::Scalar ~ cv::Scalar_<double> is used.\n*/\ntemplate<typename _Tp> class Scalar_ : public Vec<_Tp, 4>\n{\npublic:\n    //! various constructors\n    Scalar_();\n    Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);\n    Scalar_(const CvScalar& s);\n    Scalar_(_Tp v0);\n\n    //! returns a scalar with all elements set to v0\n    static Scalar_<_Tp> all(_Tp v0);\n    //! conversion to the old-style CvScalar\n    operator CvScalar() const;\n\n    //! conversion to another data type\n    template<typename T2> operator Scalar_<T2>() const;\n\n    //! per-element product\n    Scalar_<_Tp> mul(const Scalar_<_Tp>& t, double scale=1 ) const;\n\n    // returns (v0, -v1, -v2, -v3)\n    Scalar_<_Tp> conj() const;\n\n    // returns true iff v1 == v2 == v3 == 0\n    bool isReal() const;\n};\n\ntypedef Scalar_<double> Scalar;\n\nCV_EXPORTS void scalarToRawData(const Scalar& s, void* buf, int type, int unroll_to=0);\n\n//////////////////////////////// Range /////////////////////////////////\n\n/*!\n   The 2D range class\n\n   This is the class used to specify a continuous subsequence, i.e. part of a contour, or a column span in a matrix.\n*/\nclass CV_EXPORTS Range\n{\npublic:\n    Range();\n    Range(int _start, int _end);\n    Range(const CvSlice& slice);\n    int size() const;\n    bool empty() const;\n    static Range all();\n    operator CvSlice() const;\n\n    int start, end;\n};\n\n/////////////////////////////// DataType ////////////////////////////////\n\n/*!\n   Informative template class for OpenCV \"scalars\".\n\n   The class is specialized for each primitive numerical type supported by OpenCV (such as unsigned char or float),\n   as well as for more complex types, like cv::Complex<>, std::complex<>, cv::Vec<> etc.\n   The common property of all such types (called \"scalars\", do not confuse it with cv::Scalar_)\n   is that each of them is basically a tuple of numbers of the same type. Each \"scalar\" can be represented\n   by the depth id (CV_8U ... CV_64F) and the number of channels.\n   OpenCV matrices, 2D or nD, dense or sparse, can store \"scalars\",\n   as long as the number of channels does not exceed CV_CN_MAX.\n*/\ntemplate<typename _Tp> class DataType\n{\npublic:\n    typedef _Tp value_type;\n    typedef value_type work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 1, depth = -1, channels = 1, fmt=0,\n        type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<bool>\n{\npublic:\n    typedef bool value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<uchar>\n{\npublic:\n    typedef uchar value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<schar>\n{\npublic:\n    typedef schar value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<char>\n{\npublic:\n    typedef schar value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<ushort>\n{\npublic:\n    typedef ushort value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<short>\n{\npublic:\n    typedef short value_type;\n    typedef int work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<int>\n{\npublic:\n    typedef int value_type;\n    typedef value_type work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<float>\n{\npublic:\n    typedef float value_type;\n    typedef value_type work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<> class DataType<double>\n{\npublic:\n    typedef double value_type;\n    typedef value_type work_type;\n    typedef value_type channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 1,\n           fmt=DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<typename _Tp, int m, int n> class DataType<Matx<_Tp, m, n> >\n{\npublic:\n    typedef Matx<_Tp, m, n> value_type;\n    typedef Matx<typename DataType<_Tp>::work_type, m, n> work_type;\n    typedef _Tp channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = m*n,\n        fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n        type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<typename _Tp, int cn> class DataType<Vec<_Tp, cn> >\n{\npublic:\n    typedef Vec<_Tp, cn> value_type;\n    typedef Vec<typename DataType<_Tp>::work_type, cn> work_type;\n    typedef _Tp channel_type;\n    typedef value_type vec_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = cn,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n};\n\ntemplate<typename _Tp> class DataType<std::complex<_Tp> >\n{\npublic:\n    typedef std::complex<_Tp> value_type;\n    typedef value_type work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Complex<_Tp> >\n{\npublic:\n    typedef Complex<_Tp> value_type;\n    typedef value_type work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Point_<_Tp> >\n{\npublic:\n    typedef Point_<_Tp> value_type;\n    typedef Point_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Point3_<_Tp> >\n{\npublic:\n    typedef Point3_<_Tp> value_type;\n    typedef Point3_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 3,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Size_<_Tp> >\n{\npublic:\n    typedef Size_<_Tp> value_type;\n    typedef Size_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Rect_<_Tp> >\n{\npublic:\n    typedef Rect_<_Tp> value_type;\n    typedef Rect_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 4,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<typename _Tp> class DataType<Scalar_<_Tp> >\n{\npublic:\n    typedef Scalar_<_Tp> value_type;\n    typedef Scalar_<typename DataType<_Tp>::work_type> work_type;\n    typedef _Tp channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 4,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\ntemplate<> class DataType<Range>\n{\npublic:\n    typedef Range value_type;\n    typedef value_type work_type;\n    typedef int channel_type;\n    enum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = 2,\n           fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,\n           type = CV_MAKETYPE(depth, channels) };\n    typedef Vec<channel_type, channels> vec_type;\n};\n\n//////////////////// generic_type ref-counting pointer class for C/C++ objects ////////////////////////\n\n/*!\n  Smart pointer to dynamically allocated objects.\n\n  This is template pointer-wrapping class that stores the associated reference counter along with the\n  object pointer. The class is similar to std::smart_ptr<> from the recent addons to the C++ standard,\n  but is shorter to write :) and self-contained (i.e. does add any dependency on the compiler or an external library).\n\n  Basically, you can use \"Ptr<MyObjectType> ptr\" (or faster \"const Ptr<MyObjectType>& ptr\" for read-only access)\n  everywhere instead of \"MyObjectType* ptr\", where MyObjectType is some C structure or a C++ class.\n  To make it all work, you need to specialize Ptr<>::delete_obj(), like:\n\n  \\code\n  template<> void Ptr<MyObjectType>::delete_obj() { call_destructor_func(obj); }\n  \\endcode\n\n  \\note{if MyObjectType is a C++ class with a destructor, you do not need to specialize delete_obj(),\n  since the default implementation calls \"delete obj;\"}\n\n  \\note{Another good property of the class is that the operations on the reference counter are atomic,\n  i.e. it is safe to use the class in multi-threaded applications}\n*/\ntemplate<typename _Tp> class Ptr\n{\npublic:\n    //! empty constructor\n    Ptr();\n    //! take ownership of the pointer. The associated reference counter is allocated and set to 1\n    Ptr(_Tp* _obj);\n    //! calls release()\n    ~Ptr();\n    //! copy constructor. Copies the members and calls addref()\n    Ptr(const Ptr& ptr);\n    template<typename _Tp2> Ptr(const Ptr<_Tp2>& ptr);\n    //! copy operator. Calls ptr.addref() and release() before copying the members\n    Ptr& operator = (const Ptr& ptr);\n    //! increments the reference counter\n    void addref();\n    //! decrements the reference counter. If it reaches 0, delete_obj() is called\n    void release();\n    //! deletes the object. Override if needed\n    void delete_obj();\n    //! returns true iff obj==NULL\n    bool empty() const;\n\n    //! cast pointer to another type\n    template<typename _Tp2> Ptr<_Tp2> ptr();\n    template<typename _Tp2> const Ptr<_Tp2> ptr() const;\n\n    //! helper operators making \"Ptr<T> ptr\" use very similar to \"T* ptr\".\n    _Tp* operator -> ();\n    const _Tp* operator -> () const;\n\n    operator _Tp* ();\n    operator const _Tp*() const;\n\n    _Tp* obj; //< the object pointer.\n    int* refcount; //< the associated reference counter\n};\n\n\n//////////////////////// Input/Output Array Arguments /////////////////////////////////\n\n/*!\n Proxy datatype for passing Mat's and vector<>'s as input parameters\n */\nclass CV_EXPORTS _InputArray\n{\npublic:\n    enum {\n        KIND_SHIFT = 16,\n        FIXED_TYPE = 0x8000 << KIND_SHIFT,\n        FIXED_SIZE = 0x4000 << KIND_SHIFT,\n        KIND_MASK = ~(FIXED_TYPE|FIXED_SIZE) - (1 << KIND_SHIFT) + 1,\n\n        NONE              = 0 << KIND_SHIFT,\n        MAT               = 1 << KIND_SHIFT,\n        MATX              = 2 << KIND_SHIFT,\n        STD_VECTOR        = 3 << KIND_SHIFT,\n        STD_VECTOR_VECTOR = 4 << KIND_SHIFT,\n        STD_VECTOR_MAT    = 5 << KIND_SHIFT,\n        EXPR              = 6 << KIND_SHIFT,\n        OPENGL_BUFFER     = 7 << KIND_SHIFT,\n        OPENGL_TEXTURE    = 8 << KIND_SHIFT,\n        GPU_MAT           = 9 << KIND_SHIFT,\n        OCL_MAT           =10 << KIND_SHIFT\n    };\n    _InputArray();\n\n    _InputArray(const Mat& m);\n    _InputArray(const MatExpr& expr);\n    template<typename _Tp> _InputArray(const _Tp* vec, int n);\n    template<typename _Tp> _InputArray(const vector<_Tp>& vec);\n    template<typename _Tp> _InputArray(const vector<vector<_Tp> >& vec);\n    _InputArray(const vector<Mat>& vec);\n    template<typename _Tp> _InputArray(const vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _InputArray(const Mat_<_Tp>& m);\n    template<typename _Tp, int m, int n> _InputArray(const Matx<_Tp, m, n>& matx);\n    _InputArray(const Scalar& s);\n    _InputArray(const double& val);\n    // < Deprecated\n    _InputArray(const GlBuffer& buf);\n    _InputArray(const GlTexture& tex);\n    // >\n    _InputArray(const gpu::GpuMat& d_mat);\n    _InputArray(const ogl::Buffer& buf);\n    _InputArray(const ogl::Texture2D& tex);\n\n    virtual Mat getMat(int i=-1) const;\n    virtual void getMatVector(vector<Mat>& mv) const;\n    // < Deprecated\n    virtual GlBuffer getGlBuffer() const;\n    virtual GlTexture getGlTexture() const;\n    // >\n    virtual gpu::GpuMat getGpuMat() const;\n    /*virtual*/ ogl::Buffer getOGlBuffer() const;\n    /*virtual*/ ogl::Texture2D getOGlTexture2D() const;\n\n    virtual int kind() const;\n    virtual Size size(int i=-1) const;\n    virtual size_t total(int i=-1) const;\n    virtual int type(int i=-1) const;\n    virtual int depth(int i=-1) const;\n    virtual int channels(int i=-1) const;\n    virtual bool empty() const;\n\n#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY\n    virtual ~_InputArray();\n#endif\n\n    int flags;\n    void* obj;\n    Size sz;\n};\n\n\nenum\n{\n    DEPTH_MASK_8U = 1 << CV_8U,\n    DEPTH_MASK_8S = 1 << CV_8S,\n    DEPTH_MASK_16U = 1 << CV_16U,\n    DEPTH_MASK_16S = 1 << CV_16S,\n    DEPTH_MASK_32S = 1 << CV_32S,\n    DEPTH_MASK_32F = 1 << CV_32F,\n    DEPTH_MASK_64F = 1 << CV_64F,\n    DEPTH_MASK_ALL = (DEPTH_MASK_64F<<1)-1,\n    DEPTH_MASK_ALL_BUT_8S = DEPTH_MASK_ALL & ~DEPTH_MASK_8S,\n    DEPTH_MASK_FLT = DEPTH_MASK_32F + DEPTH_MASK_64F\n};\n\n\n/*!\n Proxy datatype for passing Mat's and vector<>'s as input parameters\n */\nclass CV_EXPORTS _OutputArray : public _InputArray\n{\npublic:\n    _OutputArray();\n\n    _OutputArray(Mat& m);\n    template<typename _Tp> _OutputArray(vector<_Tp>& vec);\n    template<typename _Tp> _OutputArray(vector<vector<_Tp> >& vec);\n    _OutputArray(vector<Mat>& vec);\n    template<typename _Tp> _OutputArray(vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _OutputArray(Mat_<_Tp>& m);\n    template<typename _Tp, int m, int n> _OutputArray(Matx<_Tp, m, n>& matx);\n    template<typename _Tp> _OutputArray(_Tp* vec, int n);\n    _OutputArray(gpu::GpuMat& d_mat);\n    _OutputArray(ogl::Buffer& buf);\n    _OutputArray(ogl::Texture2D& tex);\n\n    _OutputArray(const Mat& m);\n    template<typename _Tp> _OutputArray(const vector<_Tp>& vec);\n    template<typename _Tp> _OutputArray(const vector<vector<_Tp> >& vec);\n    _OutputArray(const vector<Mat>& vec);\n    template<typename _Tp> _OutputArray(const vector<Mat_<_Tp> >& vec);\n    template<typename _Tp> _OutputArray(const Mat_<_Tp>& m);\n    template<typename _Tp, int m, int n> _OutputArray(const Matx<_Tp, m, n>& matx);\n    template<typename _Tp> _OutputArray(const _Tp* vec, int n);\n    _OutputArray(const gpu::GpuMat& d_mat);\n    _OutputArray(const ogl::Buffer& buf);\n    _OutputArray(const ogl::Texture2D& tex);\n\n    virtual bool fixedSize() const;\n    virtual bool fixedType() const;\n    virtual bool needed() const;\n    virtual Mat& getMatRef(int i=-1) const;\n    /*virtual*/ gpu::GpuMat& getGpuMatRef() const;\n    /*virtual*/ ogl::Buffer& getOGlBufferRef() const;\n    /*virtual*/ ogl::Texture2D& getOGlTexture2DRef() const;\n    virtual void create(Size sz, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    virtual void create(int rows, int cols, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    virtual void create(int dims, const int* size, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const;\n    virtual void release() const;\n    virtual void clear() const;\n\n#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY\n    virtual ~_OutputArray();\n#endif\n};\n\ntypedef const _InputArray& InputArray;\ntypedef InputArray InputArrayOfArrays;\ntypedef const _OutputArray& OutputArray;\ntypedef OutputArray OutputArrayOfArrays;\ntypedef OutputArray InputOutputArray;\ntypedef OutputArray InputOutputArrayOfArrays;\n\nCV_EXPORTS OutputArray noArray();\n\n/////////////////////////////////////// Mat ///////////////////////////////////////////\n\nenum { MAGIC_MASK=0xFFFF0000, TYPE_MASK=0x00000FFF, DEPTH_MASK=7 };\n\nstatic inline size_t getElemSize(int type) { return CV_ELEM_SIZE(type); }\n\n/*!\n   Custom array allocator\n\n*/\nclass CV_EXPORTS MatAllocator\n{\npublic:\n    MatAllocator() {}\n    virtual ~MatAllocator() {}\n    virtual void allocate(int dims, const int* sizes, int type, int*& refcount,\n                          uchar*& datastart, uchar*& data, size_t* step) = 0;\n    virtual void deallocate(int* refcount, uchar* datastart, uchar* data) = 0;\n};\n\n/*!\n   The n-dimensional matrix class.\n\n   The class represents an n-dimensional dense numerical array that can act as\n   a matrix, image, optical flow map, 3-focal tensor etc.\n   It is very similar to CvMat and CvMatND types from earlier versions of OpenCV,\n   and similarly to those types, the matrix can be multi-channel. It also fully supports ROI mechanism.\n\n   There are many different ways to create cv::Mat object. Here are the some popular ones:\n   <ul>\n   <li> using cv::Mat::create(nrows, ncols, type) method or\n     the similar constructor cv::Mat::Mat(nrows, ncols, type[, fill_value]) constructor.\n     A new matrix of the specified size and specifed type will be allocated.\n     \"type\" has the same meaning as in cvCreateMat function,\n     e.g. CV_8UC1 means 8-bit single-channel matrix, CV_32FC2 means 2-channel (i.e. complex)\n     floating-point matrix etc:\n\n     \\code\n     // make 7x7 complex matrix filled with 1+3j.\n     cv::Mat M(7,7,CV_32FC2,Scalar(1,3));\n     // and now turn M to 100x60 15-channel 8-bit matrix.\n     // The old content will be deallocated\n     M.create(100,60,CV_8UC(15));\n     \\endcode\n\n     As noted in the introduction of this chapter, Mat::create()\n     will only allocate a new matrix when the current matrix dimensionality\n     or type are different from the specified.\n\n   <li> by using a copy constructor or assignment operator, where on the right side it can\n     be a matrix or expression, see below. Again, as noted in the introduction,\n     matrix assignment is O(1) operation because it only copies the header\n     and increases the reference counter. cv::Mat::clone() method can be used to get a full\n     (a.k.a. deep) copy of the matrix when you need it.\n\n   <li> by constructing a header for a part of another matrix. It can be a single row, single column,\n     several rows, several columns, rectangular region in the matrix (called a minor in algebra) or\n     a diagonal. Such operations are also O(1), because the new header will reference the same data.\n     You can actually modify a part of the matrix using this feature, e.g.\n\n     \\code\n     // add 5-th row, multiplied by 3 to the 3rd row\n     M.row(3) = M.row(3) + M.row(5)*3;\n\n     // now copy 7-th column to the 1-st column\n     // M.col(1) = M.col(7); // this will not work\n     Mat M1 = M.col(1);\n     M.col(7).copyTo(M1);\n\n     // create new 320x240 image\n     cv::Mat img(Size(320,240),CV_8UC3);\n     // select a roi\n     cv::Mat roi(img, Rect(10,10,100,100));\n     // fill the ROI with (0,255,0) (which is green in RGB space);\n     // the original 320x240 image will be modified\n     roi = Scalar(0,255,0);\n     \\endcode\n\n     Thanks to the additional cv::Mat::datastart and cv::Mat::dataend members, it is possible to\n     compute the relative sub-matrix position in the main \"container\" matrix using cv::Mat::locateROI():\n\n     \\code\n     Mat A = Mat::eye(10, 10, CV_32S);\n     // extracts A columns, 1 (inclusive) to 3 (exclusive).\n     Mat B = A(Range::all(), Range(1, 3));\n     // extracts B rows, 5 (inclusive) to 9 (exclusive).\n     // that is, C ~ A(Range(5, 9), Range(1, 3))\n     Mat C = B(Range(5, 9), Range::all());\n     Size size; Point ofs;\n     C.locateROI(size, ofs);\n     // size will be (width=10,height=10) and the ofs will be (x=1, y=5)\n     \\endcode\n\n     As in the case of whole matrices, if you need a deep copy, use cv::Mat::clone() method\n     of the extracted sub-matrices.\n\n   <li> by making a header for user-allocated-data. It can be useful for\n      <ol>\n      <li> processing \"foreign\" data using OpenCV (e.g. when you implement\n         a DirectShow filter or a processing module for gstreamer etc.), e.g.\n\n         \\code\n         void process_video_frame(const unsigned char* pixels,\n                                  int width, int height, int step)\n         {\n            cv::Mat img(height, width, CV_8UC3, pixels, step);\n            cv::GaussianBlur(img, img, cv::Size(7,7), 1.5, 1.5);\n         }\n         \\endcode\n\n      <li> for quick initialization of small matrices and/or super-fast element access\n\n         \\code\n         double m[3][3] = {{a, b, c}, {d, e, f}, {g, h, i}};\n         cv::Mat M = cv::Mat(3, 3, CV_64F, m).inv();\n         \\endcode\n      </ol>\n\n       partial yet very common cases of this \"user-allocated data\" case are conversions\n       from CvMat and IplImage to cv::Mat. For this purpose there are special constructors\n       taking pointers to CvMat or IplImage and the optional\n       flag indicating whether to copy the data or not.\n\n       Backward conversion from cv::Mat to CvMat or IplImage is provided via cast operators\n       cv::Mat::operator CvMat() an cv::Mat::operator IplImage().\n       The operators do not copy the data.\n\n\n       \\code\n       IplImage* img = cvLoadImage(\"greatwave.jpg\", 1);\n       Mat mtx(img); // convert IplImage* -> cv::Mat\n       CvMat oldmat = mtx; // convert cv::Mat -> CvMat\n       CV_Assert(oldmat.cols == img->width && oldmat.rows == img->height &&\n           oldmat.data.ptr == (uchar*)img->imageData && oldmat.step == img->widthStep);\n       \\endcode\n\n   <li> by using MATLAB-style matrix initializers, cv::Mat::zeros(), cv::Mat::ones(), cv::Mat::eye(), e.g.:\n\n   \\code\n   // create a double-precision identity martix and add it to M.\n   M += Mat::eye(M.rows, M.cols, CV_64F);\n   \\endcode\n\n   <li> by using comma-separated initializer:\n\n   \\code\n   // create 3x3 double-precision identity matrix\n   Mat M = (Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);\n   \\endcode\n\n   here we first call constructor of cv::Mat_ class (that we describe further) with the proper matrix,\n   and then we just put \"<<\" operator followed by comma-separated values that can be constants,\n   variables, expressions etc. Also, note the extra parentheses that are needed to avoid compiler errors.\n\n   </ul>\n\n   Once matrix is created, it will be automatically managed by using reference-counting mechanism\n   (unless the matrix header is built on top of user-allocated data,\n   in which case you should handle the data by yourself).\n   The matrix data will be deallocated when no one points to it;\n   if you want to release the data pointed by a matrix header before the matrix destructor is called,\n   use cv::Mat::release().\n\n   The next important thing to learn about the matrix class is element access. Here is how the matrix is stored.\n   The elements are stored in row-major order (row by row). The cv::Mat::data member points to the first element of the first row,\n   cv::Mat::rows contains the number of matrix rows and cv::Mat::cols - the number of matrix columns. There is yet another member,\n   cv::Mat::step that is used to actually compute address of a matrix element. cv::Mat::step is needed because the matrix can be\n   a part of another matrix or because there can some padding space in the end of each row for a proper alignment.\n\n   \\image html roi.png\n\n   Given these parameters, address of the matrix element M_{ij} is computed as following:\n\n   addr(M_{ij})=M.data + M.step*i + j*M.elemSize()\n\n   if you know the matrix element type, e.g. it is float, then you can use cv::Mat::at() method:\n\n   addr(M_{ij})=&M.at<float>(i,j)\n\n   (where & is used to convert the reference returned by cv::Mat::at() to a pointer).\n   if you need to process a whole row of matrix, the most efficient way is to get\n   the pointer to the row first, and then just use plain C operator []:\n\n   \\code\n   // compute sum of positive matrix elements\n   // (assuming that M is double-precision matrix)\n   double sum=0;\n   for(int i = 0; i < M.rows; i++)\n   {\n       const double* Mi = M.ptr<double>(i);\n       for(int j = 0; j < M.cols; j++)\n           sum += std::max(Mi[j], 0.);\n   }\n   \\endcode\n\n   Some operations, like the above one, do not actually depend on the matrix shape,\n   they just process elements of a matrix one by one (or elements from multiple matrices\n   that are sitting in the same place, e.g. matrix addition). Such operations are called\n   element-wise and it makes sense to check whether all the input/output matrices are continuous,\n   i.e. have no gaps in the end of each row, and if yes, process them as a single long row:\n\n   \\code\n   // compute sum of positive matrix elements, optimized variant\n   double sum=0;\n   int cols = M.cols, rows = M.rows;\n   if(M.isContinuous())\n   {\n       cols *= rows;\n       rows = 1;\n   }\n   for(int i = 0; i < rows; i++)\n   {\n       const double* Mi = M.ptr<double>(i);\n       for(int j = 0; j < cols; j++)\n           sum += std::max(Mi[j], 0.);\n   }\n   \\endcode\n   in the case of continuous matrix the outer loop body will be executed just once,\n   so the overhead will be smaller, which will be especially noticeable in the case of small matrices.\n\n   Finally, there are STL-style iterators that are smart enough to skip gaps between successive rows:\n   \\code\n   // compute sum of positive matrix elements, iterator-based variant\n   double sum=0;\n   MatConstIterator_<double> it = M.begin<double>(), it_end = M.end<double>();\n   for(; it != it_end; ++it)\n       sum += std::max(*it, 0.);\n   \\endcode\n\n   The matrix iterators are random-access iterators, so they can be passed\n   to any STL algorithm, including std::sort().\n*/\nclass CV_EXPORTS Mat\n{\npublic:\n    //! default constructor\n    Mat();\n    //! constructs 2D matrix of the specified size and type\n    // (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)\n    Mat(int rows, int cols, int type);\n    Mat(Size size, int type);\n    //! constucts 2D matrix and fills it with the specified value _s.\n    Mat(int rows, int cols, int type, const Scalar& s);\n    Mat(Size size, int type, const Scalar& s);\n\n    //! constructs n-dimensional matrix\n    Mat(int ndims, const int* sizes, int type);\n    Mat(int ndims, const int* sizes, int type, const Scalar& s);\n\n    //! copy constructor\n    Mat(const Mat& m);\n    //! constructor for matrix headers pointing to user-allocated data\n    Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP);\n    Mat(Size size, int type, void* data, size_t step=AUTO_STEP);\n    Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0);\n\n    //! creates a matrix header for a part of the bigger matrix\n    Mat(const Mat& m, const Range& rowRange, const Range& colRange=Range::all());\n    Mat(const Mat& m, const Rect& roi);\n    Mat(const Mat& m, const Range* ranges);\n    //! converts old-style CvMat to the new matrix; the data is not copied by default\n    Mat(const CvMat* m, bool copyData=false);\n    //! converts old-style CvMatND to the new matrix; the data is not copied by default\n    Mat(const CvMatND* m, bool copyData=false);\n    //! converts old-style IplImage to the new matrix; the data is not copied by default\n    Mat(const IplImage* img, bool copyData=false);\n    //! builds matrix from std::vector with or without copying the data\n    template<typename _Tp> explicit Mat(const vector<_Tp>& vec, bool copyData=false);\n    //! builds matrix from cv::Vec; the data is copied by default\n    template<typename _Tp, int n> explicit Mat(const Vec<_Tp, n>& vec, bool copyData=true);\n    //! builds matrix from cv::Matx; the data is copied by default\n    template<typename _Tp, int m, int n> explicit Mat(const Matx<_Tp, m, n>& mtx, bool copyData=true);\n    //! builds matrix from a 2D point\n    template<typename _Tp> explicit Mat(const Point_<_Tp>& pt, bool copyData=true);\n    //! builds matrix from a 3D point\n    template<typename _Tp> explicit Mat(const Point3_<_Tp>& pt, bool copyData=true);\n    //! builds matrix from comma initializer\n    template<typename _Tp> explicit Mat(const MatCommaInitializer_<_Tp>& commaInitializer);\n\n    //! download data from GpuMat\n    explicit Mat(const gpu::GpuMat& m);\n\n    //! destructor - calls release()\n    ~Mat();\n    //! assignment operators\n    Mat& operator = (const Mat& m);\n    Mat& operator = (const MatExpr& expr);\n\n    //! returns a new matrix header for the specified row\n    Mat row(int y) const;\n    //! returns a new matrix header for the specified column\n    Mat col(int x) const;\n    //! ... for the specified row span\n    Mat rowRange(int startrow, int endrow) const;\n    Mat rowRange(const Range& r) const;\n    //! ... for the specified column span\n    Mat colRange(int startcol, int endcol) const;\n    Mat colRange(const Range& r) const;\n    //! ... for the specified diagonal\n    // (d=0 - the main diagonal,\n    //  >0 - a diagonal from the lower half,\n    //  <0 - a diagonal from the upper half)\n    Mat diag(int d=0) const;\n    //! constructs a square diagonal matrix which main diagonal is vector \"d\"\n    static Mat diag(const Mat& d);\n\n    //! returns deep copy of the matrix, i.e. the data is copied\n    Mat clone() const;\n    //! copies the matrix content to \"m\".\n    // It calls m.create(this->size(), this->type()).\n    void copyTo( OutputArray m ) const;\n    //! copies those matrix elements to \"m\" that are marked with non-zero mask elements.\n    void copyTo( OutputArray m, InputArray mask ) const;\n    //! converts matrix to another datatype with optional scalng. See cvConvertScale.\n    void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const;\n\n    void assignTo( Mat& m, int type=-1 ) const;\n\n    //! sets every matrix element to s\n    Mat& operator = (const Scalar& s);\n    //! sets some of the matrix elements to s, according to the mask\n    Mat& setTo(InputArray value, InputArray mask=noArray());\n    //! creates alternative matrix header for the same data, with different\n    // number of channels and/or different number of rows. see cvReshape.\n    Mat reshape(int cn, int rows=0) const;\n    Mat reshape(int cn, int newndims, const int* newsz) const;\n\n    //! matrix transposition by means of matrix expressions\n    MatExpr t() const;\n    //! matrix inversion by means of matrix expressions\n    MatExpr inv(int method=DECOMP_LU) const;\n    //! per-element matrix multiplication by means of matrix expressions\n    MatExpr mul(InputArray m, double scale=1) const;\n\n    //! computes cross-product of 2 3D vectors\n    Mat cross(InputArray m) const;\n    //! computes dot-product\n    double dot(InputArray m) const;\n\n    //! Matlab-style matrix initialization\n    static MatExpr zeros(int rows, int cols, int type);\n    static MatExpr zeros(Size size, int type);\n    static MatExpr zeros(int ndims, const int* sz, int type);\n    static MatExpr ones(int rows, int cols, int type);\n    static MatExpr ones(Size size, int type);\n    static MatExpr ones(int ndims, const int* sz, int type);\n    static MatExpr eye(int rows, int cols, int type);\n    static MatExpr eye(Size size, int type);\n\n    //! allocates new matrix data unless the matrix already has specified size and type.\n    // previous data is unreferenced if needed.\n    void create(int rows, int cols, int type);\n    void create(Size size, int type);\n    void create(int ndims, const int* sizes, int type);\n\n    //! increases the reference counter; use with care to avoid memleaks\n    void addref();\n    //! decreases reference counter;\n    // deallocates the data when reference counter reaches 0.\n    void release();\n\n    //! deallocates the matrix data\n    void deallocate();\n    //! internal use function; properly re-allocates _size, _step arrays\n    void copySize(const Mat& m);\n\n    //! reserves enough space to fit sz hyper-planes\n    void reserve(size_t sz);\n    //! resizes matrix to the specified number of hyper-planes\n    void resize(size_t sz);\n    //! resizes matrix to the specified number of hyper-planes; initializes the newly added elements\n    void resize(size_t sz, const Scalar& s);\n    //! internal function\n    void push_back_(const void* elem);\n    //! adds element to the end of 1d matrix (or possibly multiple elements when _Tp=Mat)\n    template<typename _Tp> void push_back(const _Tp& elem);\n    template<typename _Tp> void push_back(const Mat_<_Tp>& elem);\n    void push_back(const Mat& m);\n    //! removes several hyper-planes from bottom of the matrix\n    void pop_back(size_t nelems=1);\n\n    //! locates matrix header within a parent matrix. See below\n    void locateROI( Size& wholeSize, Point& ofs ) const;\n    //! moves/resizes the current matrix ROI inside the parent matrix.\n    Mat& adjustROI( int dtop, int dbottom, int dleft, int dright );\n    //! extracts a rectangular sub-matrix\n    // (this is a generalized form of row, rowRange etc.)\n    Mat operator()( Range rowRange, Range colRange ) const;\n    Mat operator()( const Rect& roi ) const;\n    Mat operator()( const Range* ranges ) const;\n\n    //! converts header to CvMat; no data is copied\n    operator CvMat() const;\n    //! converts header to CvMatND; no data is copied\n    operator CvMatND() const;\n    //! converts header to IplImage; no data is copied\n    operator IplImage() const;\n\n    template<typename _Tp> operator vector<_Tp>() const;\n    template<typename _Tp, int n> operator Vec<_Tp, n>() const;\n    template<typename _Tp, int m, int n> operator Matx<_Tp, m, n>() const;\n\n    //! returns true iff the matrix data is continuous\n    // (i.e. when there are no gaps between successive rows).\n    // similar to CV_IS_MAT_CONT(cvmat->type)\n    bool isContinuous() const;\n\n    //! returns true if the matrix is a submatrix of another matrix\n    bool isSubmatrix() const;\n\n    //! returns element size in bytes,\n    // similar to CV_ELEM_SIZE(cvmat->type)\n    size_t elemSize() const;\n    //! returns the size of element channel in bytes.\n    size_t elemSize1() const;\n    //! returns element type, similar to CV_MAT_TYPE(cvmat->type)\n    int type() const;\n    //! returns element type, similar to CV_MAT_DEPTH(cvmat->type)\n    int depth() const;\n    //! returns element type, similar to CV_MAT_CN(cvmat->type)\n    int channels() const;\n    //! returns step/elemSize1()\n    size_t step1(int i=0) const;\n    //! returns true if matrix data is NULL\n    bool empty() const;\n    //! returns the total number of matrix elements\n    size_t total() const;\n\n    //! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise\n    int checkVector(int elemChannels, int depth=-1, bool requireContinuous=true) const;\n\n    //! returns pointer to i0-th submatrix along the dimension #0\n    uchar* ptr(int i0=0);\n    const uchar* ptr(int i0=0) const;\n\n    //! returns pointer to (i0,i1) submatrix along the dimensions #0 and #1\n    uchar* ptr(int i0, int i1);\n    const uchar* ptr(int i0, int i1) const;\n\n    //! returns pointer to (i0,i1,i3) submatrix along the dimensions #0, #1, #2\n    uchar* ptr(int i0, int i1, int i2);\n    const uchar* ptr(int i0, int i1, int i2) const;\n\n    //! returns pointer to the matrix element\n    uchar* ptr(const int* idx);\n    //! returns read-only pointer to the matrix element\n    const uchar* ptr(const int* idx) const;\n\n    template<int n> uchar* ptr(const Vec<int, n>& idx);\n    template<int n> const uchar* ptr(const Vec<int, n>& idx) const;\n\n    //! template version of the above method\n    template<typename _Tp> _Tp* ptr(int i0=0);\n    template<typename _Tp> const _Tp* ptr(int i0=0) const;\n\n    template<typename _Tp> _Tp* ptr(int i0, int i1);\n    template<typename _Tp> const _Tp* ptr(int i0, int i1) const;\n\n    template<typename _Tp> _Tp* ptr(int i0, int i1, int i2);\n    template<typename _Tp> const _Tp* ptr(int i0, int i1, int i2) const;\n\n    template<typename _Tp> _Tp* ptr(const int* idx);\n    template<typename _Tp> const _Tp* ptr(const int* idx) const;\n\n    template<typename _Tp, int n> _Tp* ptr(const Vec<int, n>& idx);\n    template<typename _Tp, int n> const _Tp* ptr(const Vec<int, n>& idx) const;\n\n    //! the same as above, with the pointer dereferencing\n    template<typename _Tp> _Tp& at(int i0=0);\n    template<typename _Tp> const _Tp& at(int i0=0) const;\n\n    template<typename _Tp> _Tp& at(int i0, int i1);\n    template<typename _Tp> const _Tp& at(int i0, int i1) const;\n\n    template<typename _Tp> _Tp& at(int i0, int i1, int i2);\n    template<typename _Tp> const _Tp& at(int i0, int i1, int i2) const;\n\n    template<typename _Tp> _Tp& at(const int* idx);\n    template<typename _Tp> const _Tp& at(const int* idx) const;\n\n    template<typename _Tp, int n> _Tp& at(const Vec<int, n>& idx);\n    template<typename _Tp, int n> const _Tp& at(const Vec<int, n>& idx) const;\n\n    //! special versions for 2D arrays (especially convenient for referencing image pixels)\n    template<typename _Tp> _Tp& at(Point pt);\n    template<typename _Tp> const _Tp& at(Point pt) const;\n\n    //! template methods for iteration over matrix elements.\n    // the iterators take care of skipping gaps in the end of rows (if any)\n    template<typename _Tp> MatIterator_<_Tp> begin();\n    template<typename _Tp> MatIterator_<_Tp> end();\n    template<typename _Tp> MatConstIterator_<_Tp> begin() const;\n    template<typename _Tp> MatConstIterator_<_Tp> end() const;\n\n    enum { MAGIC_VAL=0x42FF0000, AUTO_STEP=0, CONTINUOUS_FLAG=CV_MAT_CONT_FLAG, SUBMATRIX_FLAG=CV_SUBMAT_FLAG };\n\n    /*! includes several bit-fields:\n         - the magic signature\n         - continuity flag\n         - depth\n         - number of channels\n     */\n    int flags;\n    //! the matrix dimensionality, >= 2\n    int dims;\n    //! the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions\n    int rows, cols;\n    //! pointer to the data\n    uchar* data;\n\n    //! pointer to the reference counter;\n    // when matrix points to user-allocated data, the pointer is NULL\n    int* refcount;\n\n    //! helper fields used in locateROI and adjustROI\n    uchar* datastart;\n    uchar* dataend;\n    uchar* datalimit;\n\n    //! custom allocator\n    MatAllocator* allocator;\n\n    struct CV_EXPORTS MSize\n    {\n        MSize(int* _p);\n        Size operator()() const;\n        const int& operator[](int i) const;\n        int& operator[](int i);\n        operator const int*() const;\n        bool operator == (const MSize& sz) const;\n        bool operator != (const MSize& sz) const;\n\n        int* p;\n    };\n\n    struct CV_EXPORTS MStep\n    {\n        MStep();\n        MStep(size_t s);\n        const size_t& operator[](int i) const;\n        size_t& operator[](int i);\n        operator size_t() const;\n        MStep& operator = (size_t s);\n\n        size_t* p;\n        size_t buf[2];\n    protected:\n        MStep& operator = (const MStep&);\n    };\n\n    MSize size;\n    MStep step;\n\nprotected:\n    void initEmpty();\n};\n\n\n/*!\n   Random Number Generator\n\n   The class implements RNG using Multiply-with-Carry algorithm\n*/\nclass CV_EXPORTS RNG\n{\npublic:\n    enum { UNIFORM=0, NORMAL=1 };\n\n    RNG();\n    RNG(uint64 state);\n    //! updates the state and returns the next 32-bit unsigned integer random number\n    unsigned next();\n\n    operator uchar();\n    operator schar();\n    operator ushort();\n    operator short();\n    operator unsigned();\n    //! returns a random integer sampled uniformly from [0, N).\n    unsigned operator ()(unsigned N);\n    unsigned operator ()();\n    operator int();\n    operator float();\n    operator double();\n    //! returns uniformly distributed integer random number from [a,b) range\n    int uniform(int a, int b);\n    //! returns uniformly distributed floating-point random number from [a,b) range\n    float uniform(float a, float b);\n    //! returns uniformly distributed double-precision floating-point random number from [a,b) range\n    double uniform(double a, double b);\n    void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false );\n    //! returns Gaussian random variate with mean zero.\n    double gaussian(double sigma);\n\n    uint64 state;\n};\n\n/*!\n   Random Number Generator - MT\n\n   The class implements RNG using the Mersenne Twister algorithm\n*/\nclass CV_EXPORTS RNG_MT19937\n{\npublic:\n    RNG_MT19937();\n    RNG_MT19937(unsigned s);\n    void seed(unsigned s);\n\n    unsigned next();\n\n    operator int();\n    operator unsigned();\n    operator float();\n    operator double();\n\n    unsigned operator ()(unsigned N);\n    unsigned operator ()();\n\n    //! returns uniformly distributed integer random number from [a,b) range\n    int uniform(int a, int b);\n    //! returns uniformly distributed floating-point random number from [a,b) range\n    float uniform(float a, float b);\n    //! returns uniformly distributed double-precision floating-point random number from [a,b) range\n    double uniform(double a, double b);\n\nprivate:\n    enum PeriodParameters {N = 624, M = 397};\n    unsigned state[N];\n    int mti;\n};\n\n/*!\n Termination criteria in iterative algorithms\n */\nclass CV_EXPORTS TermCriteria\n{\npublic:\n    enum\n    {\n        COUNT=1, //!< the maximum number of iterations or elements to compute\n        MAX_ITER=COUNT, //!< ditto\n        EPS=2 //!< the desired accuracy or change in parameters at which the iterative algorithm stops\n    };\n\n    //! default constructor\n    TermCriteria();\n    //! full constructor\n    TermCriteria(int type, int maxCount, double epsilon);\n    //! conversion from CvTermCriteria\n    TermCriteria(const CvTermCriteria& criteria);\n    //! conversion to CvTermCriteria\n    operator CvTermCriteria() const;\n\n    int type; //!< the type of termination criteria: COUNT, EPS or COUNT + EPS\n    int maxCount; // the maximum number of iterations/elements\n    double epsilon; // the desired accuracy\n};\n\n\ntypedef void (*BinaryFunc)(const uchar* src1, size_t step1,\n                           const uchar* src2, size_t step2,\n                           uchar* dst, size_t step, Size sz,\n                           void*);\n\nCV_EXPORTS BinaryFunc getConvertFunc(int sdepth, int ddepth);\nCV_EXPORTS BinaryFunc getConvertScaleFunc(int sdepth, int ddepth);\nCV_EXPORTS BinaryFunc getCopyMaskFunc(size_t esz);\n\n//! swaps two matrices\nCV_EXPORTS void swap(Mat& a, Mat& b);\n\n//! converts array (CvMat or IplImage) to cv::Mat\nCV_EXPORTS Mat cvarrToMat(const CvArr* arr, bool copyData=false,\n                          bool allowND=true, int coiMode=0);\n//! extracts Channel of Interest from CvMat or IplImage and makes cv::Mat out of it.\nCV_EXPORTS void extractImageCOI(const CvArr* arr, OutputArray coiimg, int coi=-1);\n//! inserts single-channel cv::Mat into a multi-channel CvMat or IplImage\nCV_EXPORTS void insertImageCOI(InputArray coiimg, CvArr* arr, int coi=-1);\n\n//! adds one matrix to another (dst = src1 + src2)\nCV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst,\n                      InputArray mask=noArray(), int dtype=-1);\n//! subtracts one matrix from another (dst = src1 - src2)\nCV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst,\n                           InputArray mask=noArray(), int dtype=-1);\n\n//! computes element-wise weighted product of the two arrays (dst = scale*src1*src2)\nCV_EXPORTS_W void multiply(InputArray src1, InputArray src2,\n                           OutputArray dst, double scale=1, int dtype=-1);\n\n//! computes element-wise weighted quotient of the two arrays (dst = scale*src1/src2)\nCV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst,\n                         double scale=1, int dtype=-1);\n\n//! computes element-wise weighted reciprocal of an array (dst = scale/src2)\nCV_EXPORTS_W void divide(double scale, InputArray src2,\n                         OutputArray dst, int dtype=-1);\n\n//! adds scaled array to another one (dst = alpha*src1 + src2)\nCV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst);\n\n//! computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma)\nCV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,\n                              double beta, double gamma, OutputArray dst, int dtype=-1);\n\n//! scales array elements, computes absolute values and converts the results to 8-bit unsigned integers: dst(i)=saturate_cast<uchar>abs(src(i)*alpha+beta)\nCV_EXPORTS_W void convertScaleAbs(InputArray src, OutputArray dst,\n                                  double alpha=1, double beta=0);\n//! transforms array of numbers using a lookup table: dst(i)=lut(src(i))\nCV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst,\n                      int interpolation=0);\n\n//! computes sum of array elements\nCV_EXPORTS_AS(sumElems) Scalar sum(InputArray src);\n//! computes the number of nonzero array elements\nCV_EXPORTS_W int countNonZero( InputArray src );\n//! returns the list of locations of non-zero pixels\nCV_EXPORTS_W void findNonZero( InputArray src, OutputArray idx );\n\n//! computes mean value of selected array elements\nCV_EXPORTS_W Scalar mean(InputArray src, InputArray mask=noArray());\n//! computes mean value and standard deviation of all or selected array elements\nCV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev,\n                             InputArray mask=noArray());\n//! computes norm of the selected array part\nCV_EXPORTS_W double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray());\n//! computes norm of selected part of the difference between two arrays\nCV_EXPORTS_W double norm(InputArray src1, InputArray src2,\n                         int normType=NORM_L2, InputArray mask=noArray());\n\n//! naive nearest neighbor finder\nCV_EXPORTS_W void batchDistance(InputArray src1, InputArray src2,\n                                OutputArray dist, int dtype, OutputArray nidx,\n                                int normType=NORM_L2, int K=0,\n                                InputArray mask=noArray(), int update=0,\n                                bool crosscheck=false);\n\n//! scales and shifts array elements so that either the specified norm (alpha) or the minimum (alpha) and maximum (beta) array values get the specified values\nCV_EXPORTS_W void normalize( InputArray src, OutputArray dst, double alpha=1, double beta=0,\n                             int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray());\n\n//! finds global minimum and maximum array elements and returns their values and their locations\nCV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal,\n                           CV_OUT double* maxVal=0, CV_OUT Point* minLoc=0,\n                           CV_OUT Point* maxLoc=0, InputArray mask=noArray());\nCV_EXPORTS void minMaxIdx(InputArray src, double* minVal, double* maxVal,\n                          int* minIdx=0, int* maxIdx=0, InputArray mask=noArray());\n\n//! transforms 2D matrix to 1D row or column vector by taking sum, minimum, maximum or mean value over all the rows\nCV_EXPORTS_W void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1);\n\n//! makes multi-channel array out of several single-channel arrays\nCV_EXPORTS void merge(const Mat* mv, size_t count, OutputArray dst);\nCV_EXPORTS void merge(const vector<Mat>& mv, OutputArray dst );\n\n//! makes multi-channel array out of several single-channel arrays\nCV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst);\n\n//! copies each plane of a multi-channel array to a dedicated array\nCV_EXPORTS void split(const Mat& src, Mat* mvbegin);\nCV_EXPORTS void split(const Mat& m, vector<Mat>& mv );\n\n//! copies each plane of a multi-channel array to a dedicated array\nCV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv);\n\n//! copies selected channels from the input arrays to the selected channels of the output arrays\nCV_EXPORTS void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts,\n                            const int* fromTo, size_t npairs);\nCV_EXPORTS void mixChannels(const vector<Mat>& src, vector<Mat>& dst,\n                            const int* fromTo, size_t npairs);\nCV_EXPORTS_W void mixChannels(InputArrayOfArrays src, InputArrayOfArrays dst,\n                              const vector<int>& fromTo);\n\n//! extracts a single channel from src (coi is 0-based index)\nCV_EXPORTS_W void extractChannel(InputArray src, OutputArray dst, int coi);\n\n//! inserts a single channel to dst (coi is 0-based index)\nCV_EXPORTS_W void insertChannel(InputArray src, InputOutputArray dst, int coi);\n\n//! reverses the order of the rows, columns or both in a matrix\nCV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);\n\n//! replicates the input matrix the specified number of times in the horizontal and/or vertical direction\nCV_EXPORTS_W void repeat(InputArray src, int ny, int nx, OutputArray dst);\nCV_EXPORTS Mat repeat(const Mat& src, int ny, int nx);\n\nCV_EXPORTS void hconcat(const Mat* src, size_t nsrc, OutputArray dst);\nCV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst);\nCV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst);\n\nCV_EXPORTS void vconcat(const Mat* src, size_t nsrc, OutputArray dst);\nCV_EXPORTS void vconcat(InputArray src1, InputArray src2, OutputArray dst);\nCV_EXPORTS_W void vconcat(InputArrayOfArrays src, OutputArray dst);\n\n//! computes bitwise conjunction of the two arrays (dst = src1 & src2)\nCV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,\n                              OutputArray dst, InputArray mask=noArray());\n//! computes bitwise disjunction of the two arrays (dst = src1 | src2)\nCV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2,\n                             OutputArray dst, InputArray mask=noArray());\n//! computes bitwise exclusive-or of the two arrays (dst = src1 ^ src2)\nCV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2,\n                              OutputArray dst, InputArray mask=noArray());\n//! inverts each bit of array (dst = ~src)\nCV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst,\n                              InputArray mask=noArray());\n//! computes element-wise absolute difference of two arrays (dst = abs(src1 - src2))\nCV_EXPORTS_W void absdiff(InputArray src1, InputArray src2, OutputArray dst);\n//! set mask elements for those array elements which are within the element-specific bounding box (dst = lowerb <= src && src < upperb)\nCV_EXPORTS_W void inRange(InputArray src, InputArray lowerb,\n                          InputArray upperb, OutputArray dst);\n//! compares elements of two arrays (dst = src1 <cmpop> src2)\nCV_EXPORTS_W void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop);\n//! computes per-element minimum of two arrays (dst = min(src1, src2))\nCV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst);\n//! computes per-element maximum of two arrays (dst = max(src1, src2))\nCV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst);\n\n//! computes per-element minimum of two arrays (dst = min(src1, src2))\nCV_EXPORTS void min(const Mat& src1, const Mat& src2, Mat& dst);\n//! computes per-element minimum of array and scalar (dst = min(src1, src2))\nCV_EXPORTS void min(const Mat& src1, double src2, Mat& dst);\n//! computes per-element maximum of two arrays (dst = max(src1, src2))\nCV_EXPORTS void max(const Mat& src1, const Mat& src2, Mat& dst);\n//! computes per-element maximum of array and scalar (dst = max(src1, src2))\nCV_EXPORTS void max(const Mat& src1, double src2, Mat& dst);\n\n//! computes square root of each matrix element (dst = src**0.5)\nCV_EXPORTS_W void sqrt(InputArray src, OutputArray dst);\n//! raises the input matrix elements to the specified power (b = a**power)\nCV_EXPORTS_W void pow(InputArray src, double power, OutputArray dst);\n//! computes exponent of each matrix element (dst = e**src)\nCV_EXPORTS_W void exp(InputArray src, OutputArray dst);\n//! computes natural logarithm of absolute value of each matrix element: dst = log(abs(src))\nCV_EXPORTS_W void log(InputArray src, OutputArray dst);\n//! computes cube root of the argument\nCV_EXPORTS_W float cubeRoot(float val);\n//! computes the angle in degrees (0..360) of the vector (x,y)\nCV_EXPORTS_W float fastAtan2(float y, float x);\n\nCV_EXPORTS void exp(const float* src, float* dst, int n);\nCV_EXPORTS void log(const float* src, float* dst, int n);\nCV_EXPORTS void fastAtan2(const float* y, const float* x, float* dst, int n, bool angleInDegrees);\nCV_EXPORTS void magnitude(const float* x, const float* y, float* dst, int n);\n\n//! converts polar coordinates to Cartesian\nCV_EXPORTS_W void polarToCart(InputArray magnitude, InputArray angle,\n                              OutputArray x, OutputArray y, bool angleInDegrees=false);\n//! converts Cartesian coordinates to polar\nCV_EXPORTS_W void cartToPolar(InputArray x, InputArray y,\n                              OutputArray magnitude, OutputArray angle,\n                              bool angleInDegrees=false);\n//! computes angle (angle(i)) of each (x(i), y(i)) vector\nCV_EXPORTS_W void phase(InputArray x, InputArray y, OutputArray angle,\n                        bool angleInDegrees=false);\n//! computes magnitude (magnitude(i)) of each (x(i), y(i)) vector\nCV_EXPORTS_W void magnitude(InputArray x, InputArray y, OutputArray magnitude);\n//! checks that each matrix element is within the specified range.\nCV_EXPORTS_W bool checkRange(InputArray a, bool quiet=true, CV_OUT Point* pos=0,\n                            double minVal=-DBL_MAX, double maxVal=DBL_MAX);\n//! converts NaN's to the given number\nCV_EXPORTS_W void patchNaNs(InputOutputArray a, double val=0);\n\n//! implements generalized matrix product algorithm GEMM from BLAS\nCV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha,\n                       InputArray src3, double gamma, OutputArray dst, int flags=0);\n//! multiplies matrix by its transposition from the left or from the right\nCV_EXPORTS_W void mulTransposed( InputArray src, OutputArray dst, bool aTa,\n                                 InputArray delta=noArray(),\n                                 double scale=1, int dtype=-1 );\n//! transposes the matrix\nCV_EXPORTS_W void transpose(InputArray src, OutputArray dst);\n//! performs affine transformation of each element of multi-channel input matrix\nCV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m );\n//! performs perspective transformation of each element of multi-channel input matrix\nCV_EXPORTS_W void perspectiveTransform(InputArray src, OutputArray dst, InputArray m );\n\n//! extends the symmetrical matrix from the lower half or from the upper half\nCV_EXPORTS_W void completeSymm(InputOutputArray mtx, bool lowerToUpper=false);\n//! initializes scaled identity matrix\nCV_EXPORTS_W void setIdentity(InputOutputArray mtx, const Scalar& s=Scalar(1));\n//! computes determinant of a square matrix\nCV_EXPORTS_W double determinant(InputArray mtx);\n//! computes trace of a matrix\nCV_EXPORTS_W Scalar trace(InputArray mtx);\n//! computes inverse or pseudo-inverse matrix\nCV_EXPORTS_W double invert(InputArray src, OutputArray dst, int flags=DECOMP_LU);\n//! solves linear system or a least-square problem\nCV_EXPORTS_W bool solve(InputArray src1, InputArray src2,\n                        OutputArray dst, int flags=DECOMP_LU);\n\nenum\n{\n    SORT_EVERY_ROW=0,\n    SORT_EVERY_COLUMN=1,\n    SORT_ASCENDING=0,\n    SORT_DESCENDING=16\n};\n\n//! sorts independently each matrix row or each matrix column\nCV_EXPORTS_W void sort(InputArray src, OutputArray dst, int flags);\n//! sorts independently each matrix row or each matrix column\nCV_EXPORTS_W void sortIdx(InputArray src, OutputArray dst, int flags);\n//! finds real roots of a cubic polynomial\nCV_EXPORTS_W int solveCubic(InputArray coeffs, OutputArray roots);\n//! finds real and complex roots of a polynomial\nCV_EXPORTS_W double solvePoly(InputArray coeffs, OutputArray roots, int maxIters=300);\n//! finds eigenvalues of a symmetric matrix\nCV_EXPORTS bool eigen(InputArray src, OutputArray eigenvalues, int lowindex=-1,\n                      int highindex=-1);\n//! finds eigenvalues and eigenvectors of a symmetric matrix\nCV_EXPORTS bool eigen(InputArray src, OutputArray eigenvalues,\n                      OutputArray eigenvectors,\n                      int lowindex=-1, int highindex=-1);\nCV_EXPORTS_W bool eigen(InputArray src, bool computeEigenvectors,\n                        OutputArray eigenvalues, OutputArray eigenvectors);\n\nenum\n{\n    COVAR_SCRAMBLED=0,\n    COVAR_NORMAL=1,\n    COVAR_USE_AVG=2,\n    COVAR_SCALE=4,\n    COVAR_ROWS=8,\n    COVAR_COLS=16\n};\n\n//! computes covariation matrix of a set of samples\nCV_EXPORTS void calcCovarMatrix( const Mat* samples, int nsamples, Mat& covar, Mat& mean,\n                                 int flags, int ctype=CV_64F);\n//! computes covariation matrix of a set of samples\nCV_EXPORTS_W void calcCovarMatrix( InputArray samples, OutputArray covar,\n                                   OutputArray mean, int flags, int ctype=CV_64F);\n\n/*!\n    Principal Component Analysis\n\n    The class PCA is used to compute the special basis for a set of vectors.\n    The basis will consist of eigenvectors of the covariance matrix computed\n    from the input set of vectors. After PCA is performed, vectors can be transformed from\n    the original high-dimensional space to the subspace formed by a few most\n    prominent eigenvectors (called the principal components),\n    corresponding to the largest eigenvalues of the covariation matrix.\n    Thus the dimensionality of the vector and the correlation between the coordinates is reduced.\n\n    The following sample is the function that takes two matrices. The first one stores the set\n    of vectors (a row per vector) that is used to compute PCA, the second one stores another\n    \"test\" set of vectors (a row per vector) that are first compressed with PCA,\n    then reconstructed back and then the reconstruction error norm is computed and printed for each vector.\n\n    \\code\n    using namespace cv;\n\n    PCA compressPCA(const Mat& pcaset, int maxComponents,\n                    const Mat& testset, Mat& compressed)\n    {\n        PCA pca(pcaset, // pass the data\n                Mat(), // we do not have a pre-computed mean vector,\n                       // so let the PCA engine to compute it\n                CV_PCA_DATA_AS_ROW, // indicate that the vectors\n                                    // are stored as matrix rows\n                                    // (use CV_PCA_DATA_AS_COL if the vectors are\n                                    // the matrix columns)\n                maxComponents // specify, how many principal components to retain\n                );\n        // if there is no test data, just return the computed basis, ready-to-use\n        if( !testset.data )\n            return pca;\n        CV_Assert( testset.cols == pcaset.cols );\n\n        compressed.create(testset.rows, maxComponents, testset.type());\n\n        Mat reconstructed;\n        for( int i = 0; i < testset.rows; i++ )\n        {\n            Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed;\n            // compress the vector, the result will be stored\n            // in the i-th row of the output matrix\n            pca.project(vec, coeffs);\n            // and then reconstruct it\n            pca.backProject(coeffs, reconstructed);\n            // and measure the error\n            printf(\"%d. diff = %g\\n\", i, norm(vec, reconstructed, NORM_L2));\n        }\n        return pca;\n    }\n    \\endcode\n*/\nclass CV_EXPORTS PCA\n{\npublic:\n    //! default constructor\n    PCA();\n    //! the constructor that performs PCA\n    PCA(InputArray data, InputArray mean, int flags, int maxComponents=0);\n    PCA(InputArray data, InputArray mean, int flags, double retainedVariance);\n    //! operator that performs PCA. The previously stored data, if any, is released\n    PCA& operator()(InputArray data, InputArray mean, int flags, int maxComponents=0);\n    PCA& computeVar(InputArray data, InputArray mean, int flags, double retainedVariance);\n    //! projects vector from the original space to the principal components subspace\n    Mat project(InputArray vec) const;\n    //! projects vector from the original space to the principal components subspace\n    void project(InputArray vec, OutputArray result) const;\n    //! reconstructs the original vector from the projection\n    Mat backProject(InputArray vec) const;\n    //! reconstructs the original vector from the projection\n    void backProject(InputArray vec, OutputArray result) const;\n\n    Mat eigenvectors; //!< eigenvectors of the covariation matrix\n    Mat eigenvalues; //!< eigenvalues of the covariation matrix\n    Mat mean; //!< mean value subtracted before the projection and added after the back projection\n};\n\nCV_EXPORTS_W void PCACompute(InputArray data, CV_OUT InputOutputArray mean,\n                             OutputArray eigenvectors, int maxComponents=0);\n\nCV_EXPORTS_W void PCAComputeVar(InputArray data, CV_OUT InputOutputArray mean,\n                             OutputArray eigenvectors, double retainedVariance);\n\nCV_EXPORTS_W void PCAProject(InputArray data, InputArray mean,\n                             InputArray eigenvectors, OutputArray result);\n\nCV_EXPORTS_W void PCABackProject(InputArray data, InputArray mean,\n                                 InputArray eigenvectors, OutputArray result);\n\n\n/*!\n    Singular Value Decomposition class\n\n    The class is used to compute Singular Value Decomposition of a floating-point matrix and then\n    use it to solve least-square problems, under-determined linear systems, invert matrices,\n    compute condition numbers etc.\n\n    For a bit faster operation you can pass flags=SVD::MODIFY_A|... to modify the decomposed matrix\n    when it is not necessarily to preserve it. If you want to compute condition number of a matrix\n    or absolute value of its determinant - you do not need SVD::u or SVD::vt,\n    so you can pass flags=SVD::NO_UV|... . Another flag SVD::FULL_UV indicates that the full-size SVD::u and SVD::vt\n    must be computed, which is not necessary most of the time.\n*/\nclass CV_EXPORTS SVD\n{\npublic:\n    enum { MODIFY_A=1, NO_UV=2, FULL_UV=4 };\n    //! the default constructor\n    SVD();\n    //! the constructor that performs SVD\n    SVD( InputArray src, int flags=0 );\n    //! the operator that performs SVD. The previously allocated SVD::u, SVD::w are SVD::vt are released.\n    SVD& operator ()( InputArray src, int flags=0 );\n\n    //! decomposes matrix and stores the results to user-provided matrices\n    static void compute( InputArray src, OutputArray w,\n                         OutputArray u, OutputArray vt, int flags=0 );\n    //! computes singular values of a matrix\n    static void compute( InputArray src, OutputArray w, int flags=0 );\n    //! performs back substitution\n    static void backSubst( InputArray w, InputArray u,\n                           InputArray vt, InputArray rhs,\n                           OutputArray dst );\n\n    template<typename _Tp, int m, int n, int nm> static void compute( const Matx<_Tp, m, n>& a,\n        Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt );\n    template<typename _Tp, int m, int n, int nm> static void compute( const Matx<_Tp, m, n>& a,\n        Matx<_Tp, nm, 1>& w );\n    template<typename _Tp, int m, int n, int nm, int nb> static void backSubst( const Matx<_Tp, nm, 1>& w,\n        const Matx<_Tp, m, nm>& u, const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs, Matx<_Tp, n, nb>& dst );\n\n    //! finds dst = arg min_{|dst|=1} |m*dst|\n    static void solveZ( InputArray src, OutputArray dst );\n    //! performs back substitution, so that dst is the solution or pseudo-solution of m*dst = rhs, where m is the decomposed matrix\n    void backSubst( InputArray rhs, OutputArray dst ) const;\n\n    Mat u, w, vt;\n};\n\n//! computes SVD of src\nCV_EXPORTS_W void SVDecomp( InputArray src, CV_OUT OutputArray w,\n    CV_OUT OutputArray u, CV_OUT OutputArray vt, int flags=0 );\n\n//! performs back substitution for the previously computed SVD\nCV_EXPORTS_W void SVBackSubst( InputArray w, InputArray u, InputArray vt,\n                               InputArray rhs, CV_OUT OutputArray dst );\n\n//! computes Mahalanobis distance between two vectors: sqrt((v1-v2)'*icovar*(v1-v2)), where icovar is the inverse covariation matrix\nCV_EXPORTS_W double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar);\n//! a synonym for Mahalanobis\nCV_EXPORTS double Mahalonobis(InputArray v1, InputArray v2, InputArray icovar);\n\n//! performs forward or inverse 1D or 2D Discrete Fourier Transformation\nCV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0);\n//! performs inverse 1D or 2D Discrete Fourier Transformation\nCV_EXPORTS_W void idft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0);\n//! performs forward or inverse 1D or 2D Discrete Cosine Transformation\nCV_EXPORTS_W void dct(InputArray src, OutputArray dst, int flags=0);\n//! performs inverse 1D or 2D Discrete Cosine Transformation\nCV_EXPORTS_W void idct(InputArray src, OutputArray dst, int flags=0);\n//! computes element-wise product of the two Fourier spectrums. The second spectrum can optionally be conjugated before the multiplication\nCV_EXPORTS_W void mulSpectrums(InputArray a, InputArray b, OutputArray c,\n                               int flags, bool conjB=false);\n//! computes the minimal vector size vecsize1 >= vecsize so that the dft() of the vector of length vecsize1 can be computed efficiently\nCV_EXPORTS_W int getOptimalDFTSize(int vecsize);\n\n/*!\n Various k-Means flags\n*/\nenum\n{\n    KMEANS_RANDOM_CENTERS=0, // Chooses random centers for k-Means initialization\n    KMEANS_PP_CENTERS=2,     // Uses k-Means++ algorithm for initialization\n    KMEANS_USE_INITIAL_LABELS=1 // Uses the user-provided labels for K-Means initialization\n};\n//! clusters the input data using k-Means algorithm\nCV_EXPORTS_W double kmeans( InputArray data, int K, CV_OUT InputOutputArray bestLabels,\n                            TermCriteria criteria, int attempts,\n                            int flags, OutputArray centers=noArray() );\n\n//! returns the thread-local Random number generator\nCV_EXPORTS RNG& theRNG();\n\n//! returns the next unifomly-distributed random number of the specified type\ntemplate<typename _Tp> static inline _Tp randu() { return (_Tp)theRNG(); }\n\n//! fills array with uniformly-distributed random numbers from the range [low, high)\nCV_EXPORTS_W void randu(InputOutputArray dst, InputArray low, InputArray high);\n\n//! fills array with normally-distributed random numbers with the specified mean and the standard deviation\nCV_EXPORTS_W void randn(InputOutputArray dst, InputArray mean, InputArray stddev);\n\n//! shuffles the input array elements\nCV_EXPORTS void randShuffle(InputOutputArray dst, double iterFactor=1., RNG* rng=0);\nCV_EXPORTS_AS(randShuffle) void randShuffle_(InputOutputArray dst, double iterFactor=1.);\n\n//! draws the line segment (pt1, pt2) in the image\nCV_EXPORTS_W void line(CV_IN_OUT Mat& img, Point pt1, Point pt2, const Scalar& color,\n                     int thickness=1, int lineType=8, int shift=0);\n\n//! draws the rectangle outline or a solid rectangle with the opposite corners pt1 and pt2 in the image\nCV_EXPORTS_W void rectangle(CV_IN_OUT Mat& img, Point pt1, Point pt2,\n                          const Scalar& color, int thickness=1,\n                          int lineType=8, int shift=0);\n\n//! draws the rectangle outline or a solid rectangle covering rec in the image\nCV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec,\n                          const Scalar& color, int thickness=1,\n                          int lineType=8, int shift=0);\n\n//! draws the circle outline or a solid circle in the image\nCV_EXPORTS_W void circle(CV_IN_OUT Mat& img, Point center, int radius,\n                       const Scalar& color, int thickness=1,\n                       int lineType=8, int shift=0);\n\n//! draws an elliptic arc, ellipse sector or a rotated ellipse in the image\nCV_EXPORTS_W void ellipse(CV_IN_OUT Mat& img, Point center, Size axes,\n                        double angle, double startAngle, double endAngle,\n                        const Scalar& color, int thickness=1,\n                        int lineType=8, int shift=0);\n\n//! draws a rotated ellipse in the image\nCV_EXPORTS_W void ellipse(CV_IN_OUT Mat& img, const RotatedRect& box, const Scalar& color,\n                        int thickness=1, int lineType=8);\n\n//! draws a filled convex polygon in the image\nCV_EXPORTS void fillConvexPoly(Mat& img, const Point* pts, int npts,\n                               const Scalar& color, int lineType=8,\n                               int shift=0);\nCV_EXPORTS_W void fillConvexPoly(InputOutputArray img, InputArray points,\n                                 const Scalar& color, int lineType=8,\n                                 int shift=0);\n\n//! fills an area bounded by one or more polygons\nCV_EXPORTS void fillPoly(Mat& img, const Point** pts,\n                         const int* npts, int ncontours,\n                         const Scalar& color, int lineType=8, int shift=0,\n                         Point offset=Point() );\n\nCV_EXPORTS_W void fillPoly(InputOutputArray img, InputArrayOfArrays pts,\n                           const Scalar& color, int lineType=8, int shift=0,\n                           Point offset=Point() );\n\n//! draws one or more polygonal curves\nCV_EXPORTS void polylines(Mat& img, const Point** pts, const int* npts,\n                          int ncontours, bool isClosed, const Scalar& color,\n                          int thickness=1, int lineType=8, int shift=0 );\n\nCV_EXPORTS_W void polylines(InputOutputArray img, InputArrayOfArrays pts,\n                            bool isClosed, const Scalar& color,\n                            int thickness=1, int lineType=8, int shift=0 );\n\n//! clips the line segment by the rectangle Rect(0, 0, imgSize.width, imgSize.height)\nCV_EXPORTS bool clipLine(Size imgSize, CV_IN_OUT Point& pt1, CV_IN_OUT Point& pt2);\n\n//! clips the line segment by the rectangle imgRect\nCV_EXPORTS_W bool clipLine(Rect imgRect, CV_OUT CV_IN_OUT Point& pt1, CV_OUT CV_IN_OUT Point& pt2);\n\n/*!\n   Line iterator class\n\n   The class is used to iterate over all the pixels on the raster line\n   segment connecting two specified points.\n*/\nclass CV_EXPORTS LineIterator\n{\npublic:\n    //! intializes the iterator\n    LineIterator( const Mat& img, Point pt1, Point pt2,\n                  int connectivity=8, bool leftToRight=false );\n    //! returns pointer to the current pixel\n    uchar* operator *();\n    //! prefix increment operator (++it). shifts iterator to the next pixel\n    LineIterator& operator ++();\n    //! postfix increment operator (it++). shifts iterator to the next pixel\n    LineIterator operator ++(int);\n    //! returns coordinates of the current pixel\n    Point pos() const;\n\n    uchar* ptr;\n    const uchar* ptr0;\n    int step, elemSize;\n    int err, count;\n    int minusDelta, plusDelta;\n    int minusStep, plusStep;\n};\n\n//! converts elliptic arc to a polygonal curve\nCV_EXPORTS_W void ellipse2Poly( Point center, Size axes, int angle,\n                                int arcStart, int arcEnd, int delta,\n                                CV_OUT vector<Point>& pts );\n\nenum\n{\n    FONT_HERSHEY_SIMPLEX = 0,\n    FONT_HERSHEY_PLAIN = 1,\n    FONT_HERSHEY_DUPLEX = 2,\n    FONT_HERSHEY_COMPLEX = 3,\n    FONT_HERSHEY_TRIPLEX = 4,\n    FONT_HERSHEY_COMPLEX_SMALL = 5,\n    FONT_HERSHEY_SCRIPT_SIMPLEX = 6,\n    FONT_HERSHEY_SCRIPT_COMPLEX = 7,\n    FONT_ITALIC = 16\n};\n\n//! renders text string in the image\nCV_EXPORTS_W void putText( Mat& img, const string& text, Point org,\n                         int fontFace, double fontScale, Scalar color,\n                         int thickness=1, int lineType=8,\n                         bool bottomLeftOrigin=false );\n\n//! returns bounding box of the text string\nCV_EXPORTS_W Size getTextSize(const string& text, int fontFace,\n                            double fontScale, int thickness,\n                            CV_OUT int* baseLine);\n\n///////////////////////////////// Mat_<_Tp> ////////////////////////////////////\n\n/*!\n Template matrix class derived from Mat\n\n The class Mat_ is a \"thin\" template wrapper on top of cv::Mat. It does not have any extra data fields,\n nor it or cv::Mat have any virtual methods and thus references or pointers to these two classes\n can be safely converted one to another. But do it with care, for example:\n\n \\code\n // create 100x100 8-bit matrix\n Mat M(100,100,CV_8U);\n // this will compile fine. no any data conversion will be done.\n Mat_<float>& M1 = (Mat_<float>&)M;\n // the program will likely crash at the statement below\n M1(99,99) = 1.f;\n \\endcode\n\n While cv::Mat is sufficient in most cases, cv::Mat_ can be more convenient if you use a lot of element\n access operations and if you know matrix type at compile time.\n Note that cv::Mat::at<_Tp>(int y, int x) and cv::Mat_<_Tp>::operator ()(int y, int x) do absolutely the\n same thing and run at the same speed, but the latter is certainly shorter:\n\n \\code\n Mat_<double> M(20,20);\n for(int i = 0; i < M.rows; i++)\n    for(int j = 0; j < M.cols; j++)\n       M(i,j) = 1./(i+j+1);\n Mat E, V;\n eigen(M,E,V);\n cout << E.at<double>(0,0)/E.at<double>(M.rows-1,0);\n \\endcode\n\n It is easy to use Mat_ for multi-channel images/matrices - just pass cv::Vec as cv::Mat_ template parameter:\n\n \\code\n // allocate 320x240 color image and fill it with green (in RGB space)\n Mat_<Vec3b> img(240, 320, Vec3b(0,255,0));\n // now draw a diagonal white line\n for(int i = 0; i < 100; i++)\n     img(i,i)=Vec3b(255,255,255);\n // and now modify the 2nd (red) channel of each pixel\n for(int i = 0; i < img.rows; i++)\n    for(int j = 0; j < img.cols; j++)\n       img(i,j)[2] ^= (uchar)(i ^ j); // img(y,x)[c] accesses c-th channel of the pixel (x,y)\n \\endcode\n*/\ntemplate<typename _Tp> class Mat_ : public Mat\n{\npublic:\n    typedef _Tp value_type;\n    typedef typename DataType<_Tp>::channel_type channel_type;\n    typedef MatIterator_<_Tp> iterator;\n    typedef MatConstIterator_<_Tp> const_iterator;\n\n    //! default constructor\n    Mat_();\n    //! equivalent to Mat(_rows, _cols, DataType<_Tp>::type)\n    Mat_(int _rows, int _cols);\n    //! constructor that sets each matrix element to specified value\n    Mat_(int _rows, int _cols, const _Tp& value);\n    //! equivalent to Mat(_size, DataType<_Tp>::type)\n    explicit Mat_(Size _size);\n    //! constructor that sets each matrix element to specified value\n    Mat_(Size _size, const _Tp& value);\n    //! n-dim array constructor\n    Mat_(int _ndims, const int* _sizes);\n    //! n-dim array constructor that sets each matrix element to specified value\n    Mat_(int _ndims, const int* _sizes, const _Tp& value);\n    //! copy/conversion contructor. If m is of different type, it's converted\n    Mat_(const Mat& m);\n    //! copy constructor\n    Mat_(const Mat_& m);\n    //! constructs a matrix on top of user-allocated data. step is in bytes(!!!), regardless of the type\n    Mat_(int _rows, int _cols, _Tp* _data, size_t _step=AUTO_STEP);\n    //! constructs n-dim matrix on top of user-allocated data. steps are in bytes(!!!), regardless of the type\n    Mat_(int _ndims, const int* _sizes, _Tp* _data, const size_t* _steps=0);\n    //! selects a submatrix\n    Mat_(const Mat_& m, const Range& rowRange, const Range& colRange=Range::all());\n    //! selects a submatrix\n    Mat_(const Mat_& m, const Rect& roi);\n    //! selects a submatrix, n-dim version\n    Mat_(const Mat_& m, const Range* ranges);\n    //! from a matrix expression\n    explicit Mat_(const MatExpr& e);\n    //! makes a matrix out of Vec, std::vector, Point_ or Point3_. The matrix will have a single column\n    explicit Mat_(const vector<_Tp>& vec, bool copyData=false);\n    template<int n> explicit Mat_(const Vec<typename DataType<_Tp>::channel_type, n>& vec, bool copyData=true);\n    template<int m, int n> explicit Mat_(const Matx<typename DataType<_Tp>::channel_type, m, n>& mtx, bool copyData=true);\n    explicit Mat_(const Point_<typename DataType<_Tp>::channel_type>& pt, bool copyData=true);\n    explicit Mat_(const Point3_<typename DataType<_Tp>::channel_type>& pt, bool copyData=true);\n    explicit Mat_(const MatCommaInitializer_<_Tp>& commaInitializer);\n\n    Mat_& operator = (const Mat& m);\n    Mat_& operator = (const Mat_& m);\n    //! set all the elements to s.\n    Mat_& operator = (const _Tp& s);\n    //! assign a matrix expression\n    Mat_& operator = (const MatExpr& e);\n\n    //! iterators; they are smart enough to skip gaps in the end of rows\n    iterator begin();\n    iterator end();\n    const_iterator begin() const;\n    const_iterator end() const;\n\n    //! equivalent to Mat::create(_rows, _cols, DataType<_Tp>::type)\n    void create(int _rows, int _cols);\n    //! equivalent to Mat::create(_size, DataType<_Tp>::type)\n    void create(Size _size);\n    //! equivalent to Mat::create(_ndims, _sizes, DatType<_Tp>::type)\n    void create(int _ndims, const int* _sizes);\n    //! cross-product\n    Mat_ cross(const Mat_& m) const;\n    //! data type conversion\n    template<typename T2> operator Mat_<T2>() const;\n    //! overridden forms of Mat::row() etc.\n    Mat_ row(int y) const;\n    Mat_ col(int x) const;\n    Mat_ diag(int d=0) const;\n    Mat_ clone() const;\n\n    //! overridden forms of Mat::elemSize() etc.\n    size_t elemSize() const;\n    size_t elemSize1() const;\n    int type() const;\n    int depth() const;\n    int channels() const;\n    size_t step1(int i=0) const;\n    //! returns step()/sizeof(_Tp)\n    size_t stepT(int i=0) const;\n\n    //! overridden forms of Mat::zeros() etc. Data type is omitted, of course\n    static MatExpr zeros(int rows, int cols);\n    static MatExpr zeros(Size size);\n    static MatExpr zeros(int _ndims, const int* _sizes);\n    static MatExpr ones(int rows, int cols);\n    static MatExpr ones(Size size);\n    static MatExpr ones(int _ndims, const int* _sizes);\n    static MatExpr eye(int rows, int cols);\n    static MatExpr eye(Size size);\n\n    //! some more overriden methods\n    Mat_& adjustROI( int dtop, int dbottom, int dleft, int dright );\n    Mat_ operator()( const Range& rowRange, const Range& colRange ) const;\n    Mat_ operator()( const Rect& roi ) const;\n    Mat_ operator()( const Range* ranges ) const;\n\n    //! more convenient forms of row and element access operators\n    _Tp* operator [](int y);\n    const _Tp* operator [](int y) const;\n\n    //! returns reference to the specified element\n    _Tp& operator ()(const int* idx);\n    //! returns read-only reference to the specified element\n    const _Tp& operator ()(const int* idx) const;\n\n    //! returns reference to the specified element\n    template<int n> _Tp& operator ()(const Vec<int, n>& idx);\n    //! returns read-only reference to the specified element\n    template<int n> const _Tp& operator ()(const Vec<int, n>& idx) const;\n\n    //! returns reference to the specified element (1D case)\n    _Tp& operator ()(int idx0);\n    //! returns read-only reference to the specified element (1D case)\n    const _Tp& operator ()(int idx0) const;\n    //! returns reference to the specified element (2D case)\n    _Tp& operator ()(int idx0, int idx1);\n    //! returns read-only reference to the specified element (2D case)\n    const _Tp& operator ()(int idx0, int idx1) const;\n    //! returns reference to the specified element (3D case)\n    _Tp& operator ()(int idx0, int idx1, int idx2);\n    //! returns read-only reference to the specified element (3D case)\n    const _Tp& operator ()(int idx0, int idx1, int idx2) const;\n\n    _Tp& operator ()(Point pt);\n    const _Tp& operator ()(Point pt) const;\n\n    //! conversion to vector.\n    operator vector<_Tp>() const;\n    //! conversion to Vec\n    template<int n> operator Vec<typename DataType<_Tp>::channel_type, n>() const;\n    //! conversion to Matx\n    template<int m, int n> operator Matx<typename DataType<_Tp>::channel_type, m, n>() const;\n};\n\ntypedef Mat_<uchar> Mat1b;\ntypedef Mat_<Vec2b> Mat2b;\ntypedef Mat_<Vec3b> Mat3b;\ntypedef Mat_<Vec4b> Mat4b;\n\ntypedef Mat_<short> Mat1s;\ntypedef Mat_<Vec2s> Mat2s;\ntypedef Mat_<Vec3s> Mat3s;\ntypedef Mat_<Vec4s> Mat4s;\n\ntypedef Mat_<ushort> Mat1w;\ntypedef Mat_<Vec2w> Mat2w;\ntypedef Mat_<Vec3w> Mat3w;\ntypedef Mat_<Vec4w> Mat4w;\n\ntypedef Mat_<int>   Mat1i;\ntypedef Mat_<Vec2i> Mat2i;\ntypedef Mat_<Vec3i> Mat3i;\ntypedef Mat_<Vec4i> Mat4i;\n\ntypedef Mat_<float> Mat1f;\ntypedef Mat_<Vec2f> Mat2f;\ntypedef Mat_<Vec3f> Mat3f;\ntypedef Mat_<Vec4f> Mat4f;\n\ntypedef Mat_<double> Mat1d;\ntypedef Mat_<Vec2d> Mat2d;\ntypedef Mat_<Vec3d> Mat3d;\ntypedef Mat_<Vec4d> Mat4d;\n\n//////////// Iterators & Comma initializers //////////////////\n\nclass CV_EXPORTS MatConstIterator\n{\npublic:\n    typedef uchar* value_type;\n    typedef ptrdiff_t difference_type;\n    typedef const uchar** pointer;\n    typedef uchar* reference;\n    typedef std::random_access_iterator_tag iterator_category;\n\n    //! default constructor\n    MatConstIterator();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatConstIterator(const Mat* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator(const Mat* _m, const int* _idx);\n    //! copy constructor\n    MatConstIterator(const MatConstIterator& it);\n\n    //! copy operator\n    MatConstIterator& operator = (const MatConstIterator& it);\n    //! returns the current matrix element\n    uchar* operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    uchar* operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatConstIterator& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatConstIterator& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatConstIterator& operator --();\n    //! decrements the iterator\n    MatConstIterator operator --(int);\n    //! increments the iterator\n    MatConstIterator& operator ++();\n    //! increments the iterator\n    MatConstIterator operator ++(int);\n    //! returns the current iterator position\n    Point pos() const;\n    //! returns the current iterator position\n    void pos(int* _idx) const;\n    ptrdiff_t lpos() const;\n    void seek(ptrdiff_t ofs, bool relative=false);\n    void seek(const int* _idx, bool relative=false);\n\n    const Mat* m;\n    size_t elemSize;\n    uchar* ptr;\n    uchar* sliceStart;\n    uchar* sliceEnd;\n};\n\n/*!\n Matrix read-only iterator\n\n */\ntemplate<typename _Tp>\nclass MatConstIterator_ : public MatConstIterator\n{\npublic:\n    typedef _Tp value_type;\n    typedef ptrdiff_t difference_type;\n    typedef const _Tp* pointer;\n    typedef const _Tp& reference;\n    typedef std::random_access_iterator_tag iterator_category;\n\n    //! default constructor\n    MatConstIterator_();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatConstIterator_(const Mat_<_Tp>* _m, const int* _idx);\n    //! copy constructor\n    MatConstIterator_(const MatConstIterator_& it);\n\n    //! copy operator\n    MatConstIterator_& operator = (const MatConstIterator_& it);\n    //! returns the current matrix element\n    _Tp operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    _Tp operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatConstIterator_& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatConstIterator_& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatConstIterator_& operator --();\n    //! decrements the iterator\n    MatConstIterator_ operator --(int);\n    //! increments the iterator\n    MatConstIterator_& operator ++();\n    //! increments the iterator\n    MatConstIterator_ operator ++(int);\n    //! returns the current iterator position\n    Point pos() const;\n};\n\n\n/*!\n Matrix read-write iterator\n\n*/\ntemplate<typename _Tp>\nclass MatIterator_ : public MatConstIterator_<_Tp>\n{\npublic:\n    typedef _Tp* pointer;\n    typedef _Tp& reference;\n    typedef std::random_access_iterator_tag iterator_category;\n\n    //! the default constructor\n    MatIterator_();\n    //! constructor that sets the iterator to the beginning of the matrix\n    MatIterator_(Mat_<_Tp>* _m);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(Mat_<_Tp>* _m, int _row, int _col=0);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(const Mat_<_Tp>* _m, Point _pt);\n    //! constructor that sets the iterator to the specified element of the matrix\n    MatIterator_(const Mat_<_Tp>* _m, const int* _idx);\n    //! copy constructor\n    MatIterator_(const MatIterator_& it);\n    //! copy operator\n    MatIterator_& operator = (const MatIterator_<_Tp>& it );\n\n    //! returns the current matrix element\n    _Tp& operator *() const;\n    //! returns the i-th matrix element, relative to the current\n    _Tp& operator [](ptrdiff_t i) const;\n\n    //! shifts the iterator forward by the specified number of elements\n    MatIterator_& operator += (ptrdiff_t ofs);\n    //! shifts the iterator backward by the specified number of elements\n    MatIterator_& operator -= (ptrdiff_t ofs);\n    //! decrements the iterator\n    MatIterator_& operator --();\n    //! decrements the iterator\n    MatIterator_ operator --(int);\n    //! increments the iterator\n    MatIterator_& operator ++();\n    //! increments the iterator\n    MatIterator_ operator ++(int);\n};\n\ntemplate<typename _Tp> class MatOp_Iter_;\n\n/*!\n Comma-separated Matrix Initializer\n\n The class instances are usually not created explicitly.\n Instead, they are created on \"matrix << firstValue\" operator.\n\n The sample below initializes 2x2 rotation matrix:\n\n \\code\n double angle = 30, a = cos(angle*CV_PI/180), b = sin(angle*CV_PI/180);\n Mat R = (Mat_<double>(2,2) << a, -b, b, a);\n \\endcode\n*/\ntemplate<typename _Tp> class MatCommaInitializer_\n{\npublic:\n    //! the constructor, created by \"matrix << firstValue\" operator, where matrix is cv::Mat\n    MatCommaInitializer_(Mat_<_Tp>* _m);\n    //! the operator that takes the next value and put it to the matrix\n    template<typename T2> MatCommaInitializer_<_Tp>& operator , (T2 v);\n    //! another form of conversion operator\n    Mat_<_Tp> operator *() const;\n    operator Mat_<_Tp>() const;\nprotected:\n    MatIterator_<_Tp> it;\n};\n\n\ntemplate<typename _Tp, int m, int n> class MatxCommaInitializer\n{\npublic:\n    MatxCommaInitializer(Matx<_Tp, m, n>* _mtx);\n    template<typename T2> MatxCommaInitializer<_Tp, m, n>& operator , (T2 val);\n    Matx<_Tp, m, n> operator *() const;\n\n    Matx<_Tp, m, n>* dst;\n    int idx;\n};\n\ntemplate<typename _Tp, int m> class VecCommaInitializer : public MatxCommaInitializer<_Tp, m, 1>\n{\npublic:\n    VecCommaInitializer(Vec<_Tp, m>* _vec);\n    template<typename T2> VecCommaInitializer<_Tp, m>& operator , (T2 val);\n    Vec<_Tp, m> operator *() const;\n};\n\n/*!\n Automatically Allocated Buffer Class\n\n The class is used for temporary buffers in functions and methods.\n If a temporary buffer is usually small (a few K's of memory),\n but its size depends on the parameters, it makes sense to create a small\n fixed-size array on stack and use it if it's large enough. If the required buffer size\n is larger than the fixed size, another buffer of sufficient size is allocated dynamically\n and released after the processing. Therefore, in typical cases, when the buffer size is small,\n there is no overhead associated with malloc()/free().\n At the same time, there is no limit on the size of processed data.\n\n This is what AutoBuffer does. The template takes 2 parameters - type of the buffer elements and\n the number of stack-allocated elements. Here is how the class is used:\n\n \\code\n void my_func(const cv::Mat& m)\n {\n    cv::AutoBuffer<float, 1000> buf; // create automatic buffer containing 1000 floats\n\n    buf.allocate(m.rows); // if m.rows <= 1000, the pre-allocated buffer is used,\n                          // otherwise the buffer of \"m.rows\" floats will be allocated\n                          // dynamically and deallocated in cv::AutoBuffer destructor\n    ...\n }\n \\endcode\n*/\ntemplate<typename _Tp, size_t fixed_size=4096/sizeof(_Tp)+8> class AutoBuffer\n{\npublic:\n    typedef _Tp value_type;\n    enum { buffer_padding = (int)((16 + sizeof(_Tp) - 1)/sizeof(_Tp)) };\n\n    //! the default contructor\n    AutoBuffer();\n    //! constructor taking the real buffer size\n    AutoBuffer(size_t _size);\n    //! destructor. calls deallocate()\n    ~AutoBuffer();\n\n    //! allocates the new buffer of size _size. if the _size is small enough, stack-allocated buffer is used\n    void allocate(size_t _size);\n    //! deallocates the buffer if it was dynamically allocated\n    void deallocate();\n    //! returns pointer to the real buffer, stack-allocated or head-allocated\n    operator _Tp* ();\n    //! returns read-only pointer to the real buffer, stack-allocated or head-allocated\n    operator const _Tp* () const;\n\nprotected:\n    //! pointer to the real buffer, can point to buf if the buffer is small enough\n    _Tp* ptr;\n    //! size of the real buffer\n    size_t size;\n    //! pre-allocated buffer\n    _Tp buf[fixed_size+buffer_padding];\n};\n\n/////////////////////////// multi-dimensional dense matrix //////////////////////////\n\n/*!\n n-Dimensional Dense Matrix Iterator Class.\n\n The class cv::NAryMatIterator is used for iterating over one or more n-dimensional dense arrays (cv::Mat's).\n\n The iterator is completely different from cv::Mat_ and cv::SparseMat_ iterators.\n It iterates through the slices (or planes), not the elements, where \"slice\" is a continuous part of the arrays.\n\n Here is the example on how the iterator can be used to normalize 3D histogram:\n\n \\code\n void normalizeColorHist(Mat& hist)\n {\n #if 1\n     // intialize iterator (the style is different from STL).\n     // after initialization the iterator will contain\n     // the number of slices or planes\n     // the iterator will go through\n     Mat* arrays[] = { &hist, 0 };\n     Mat planes[1];\n     NAryMatIterator it(arrays, planes);\n     double s = 0;\n     // iterate through the matrix. on each iteration\n     // it.planes[i] (of type Mat) will be set to the current plane of\n     // i-th n-dim matrix passed to the iterator constructor.\n     for(int p = 0; p < it.nplanes; p++, ++it)\n        s += sum(it.planes[0])[0];\n     it = NAryMatIterator(hist);\n     s = 1./s;\n     for(int p = 0; p < it.nplanes; p++, ++it)\n        it.planes[0] *= s;\n #elif 1\n     // this is a shorter implementation of the above\n     // using built-in operations on Mat\n     double s = sum(hist)[0];\n     hist.convertTo(hist, hist.type(), 1./s, 0);\n #else\n     // and this is even shorter one\n     // (assuming that the histogram elements are non-negative)\n     normalize(hist, hist, 1, 0, NORM_L1);\n #endif\n }\n \\endcode\n\n You can iterate through several matrices simultaneously as long as they have the same geometry\n (dimensionality and all the dimension sizes are the same), which is useful for binary\n and n-ary operations on such matrices. Just pass those matrices to cv::MatNDIterator.\n Then, during the iteration it.planes[0], it.planes[1], ... will\n be the slices of the corresponding matrices\n*/\nclass CV_EXPORTS NAryMatIterator\n{\npublic:\n    //! the default constructor\n    NAryMatIterator();\n    //! the full constructor taking arbitrary number of n-dim matrices\n    NAryMatIterator(const Mat** arrays, uchar** ptrs, int narrays=-1);\n    //! the full constructor taking arbitrary number of n-dim matrices\n    NAryMatIterator(const Mat** arrays, Mat* planes, int narrays=-1);\n    //! the separate iterator initialization method\n    void init(const Mat** arrays, Mat* planes, uchar** ptrs, int narrays=-1);\n\n    //! proceeds to the next plane of every iterated matrix\n    NAryMatIterator& operator ++();\n    //! proceeds to the next plane of every iterated matrix (postfix increment operator)\n    NAryMatIterator operator ++(int);\n\n    //! the iterated arrays\n    const Mat** arrays;\n    //! the current planes\n    Mat* planes;\n    //! data pointers\n    uchar** ptrs;\n    //! the number of arrays\n    int narrays;\n    //! the number of hyper-planes that the iterator steps through\n    size_t nplanes;\n    //! the size of each segment (in elements)\n    size_t size;\nprotected:\n    int iterdepth;\n    size_t idx;\n};\n\n//typedef NAryMatIterator NAryMatNDIterator;\n\ntypedef void (*ConvertData)(const void* from, void* to, int cn);\ntypedef void (*ConvertScaleData)(const void* from, void* to, int cn, double alpha, double beta);\n\n//! returns the function for converting pixels from one data type to another\nCV_EXPORTS ConvertData getConvertElem(int fromType, int toType);\n//! returns the function for converting pixels from one data type to another with the optional scaling\nCV_EXPORTS ConvertScaleData getConvertScaleElem(int fromType, int toType);\n\n\n/////////////////////////// multi-dimensional sparse matrix //////////////////////////\n\nclass SparseMatIterator;\nclass SparseMatConstIterator;\ntemplate<typename _Tp> class SparseMatIterator_;\ntemplate<typename _Tp> class SparseMatConstIterator_;\n\n/*!\n Sparse matrix class.\n\n The class represents multi-dimensional sparse numerical arrays. Such a sparse array can store elements\n of any type that cv::Mat is able to store. \"Sparse\" means that only non-zero elements\n are stored (though, as a result of some operations on a sparse matrix, some of its stored elements\n can actually become 0. It's user responsibility to detect such elements and delete them using cv::SparseMat::erase().\n The non-zero elements are stored in a hash table that grows when it's filled enough,\n so that the search time remains O(1) in average. Elements can be accessed using the following methods:\n\n <ol>\n <li>Query operations: cv::SparseMat::ptr() and the higher-level cv::SparseMat::ref(),\n      cv::SparseMat::value() and cv::SparseMat::find, for example:\n \\code\n const int dims = 5;\n int size[] = {10, 10, 10, 10, 10};\n SparseMat sparse_mat(dims, size, CV_32F);\n for(int i = 0; i < 1000; i++)\n {\n     int idx[dims];\n     for(int k = 0; k < dims; k++)\n        idx[k] = rand()%sparse_mat.size(k);\n     sparse_mat.ref<float>(idx) += 1.f;\n }\n \\endcode\n\n <li>Sparse matrix iterators. Like cv::Mat iterators and unlike cv::Mat iterators, the sparse matrix iterators are STL-style,\n that is, the iteration is done as following:\n \\code\n // prints elements of a sparse floating-point matrix and the sum of elements.\n SparseMatConstIterator_<float>\n        it = sparse_mat.begin<float>(),\n        it_end = sparse_mat.end<float>();\n double s = 0;\n int dims = sparse_mat.dims();\n for(; it != it_end; ++it)\n {\n     // print element indices and the element value\n     const Node* n = it.node();\n     printf(\"(\")\n     for(int i = 0; i < dims; i++)\n        printf(\"%3d%c\", n->idx[i], i < dims-1 ? ',' : ')');\n     printf(\": %f\\n\", *it);\n     s += *it;\n }\n printf(\"Element sum is %g\\n\", s);\n \\endcode\n If you run this loop, you will notice that elements are enumerated\n in no any logical order (lexicographical etc.),\n they come in the same order as they stored in the hash table, i.e. semi-randomly.\n\n You may collect pointers to the nodes and sort them to get the proper ordering.\n Note, however, that pointers to the nodes may become invalid when you add more\n elements to the matrix; this is because of possible buffer reallocation.\n\n <li>A combination of the above 2 methods when you need to process 2 or more sparse\n matrices simultaneously, e.g. this is how you can compute unnormalized\n cross-correlation of the 2 floating-point sparse matrices:\n \\code\n double crossCorr(const SparseMat& a, const SparseMat& b)\n {\n     const SparseMat *_a = &a, *_b = &b;\n     // if b contains less elements than a,\n     // it's faster to iterate through b\n     if(_a->nzcount() > _b->nzcount())\n        std::swap(_a, _b);\n     SparseMatConstIterator_<float> it = _a->begin<float>(),\n                                    it_end = _a->end<float>();\n     double ccorr = 0;\n     for(; it != it_end; ++it)\n     {\n         // take the next element from the first matrix\n         float avalue = *it;\n         const Node* anode = it.node();\n         // and try to find element with the same index in the second matrix.\n         // since the hash value depends only on the element index,\n         // we reuse hashvalue stored in the node\n         float bvalue = _b->value<float>(anode->idx,&anode->hashval);\n         ccorr += avalue*bvalue;\n     }\n     return ccorr;\n }\n \\endcode\n </ol>\n*/\nclass CV_EXPORTS SparseMat\n{\npublic:\n    typedef SparseMatIterator iterator;\n    typedef SparseMatConstIterator const_iterator;\n\n    //! the sparse matrix header\n    struct CV_EXPORTS Hdr\n    {\n        Hdr(int _dims, const int* _sizes, int _type);\n        void clear();\n        int refcount;\n        int dims;\n        int valueOffset;\n        size_t nodeSize;\n        size_t nodeCount;\n        size_t freeList;\n        vector<uchar> pool;\n        vector<size_t> hashtab;\n        int size[CV_MAX_DIM];\n    };\n\n    //! sparse matrix node - element of a hash table\n    struct CV_EXPORTS Node\n    {\n        //! hash value\n        size_t hashval;\n        //! index of the next node in the same hash table entry\n        size_t next;\n        //! index of the matrix element\n        int idx[CV_MAX_DIM];\n    };\n\n    //! default constructor\n    SparseMat();\n    //! creates matrix of the specified size and type\n    SparseMat(int dims, const int* _sizes, int _type);\n    //! copy constructor\n    SparseMat(const SparseMat& m);\n    //! converts dense 2d matrix to the sparse form\n    /*!\n     \\param m the input matrix\n    */\n    explicit SparseMat(const Mat& m);\n    //! converts old-style sparse matrix to the new-style. All the data is copied\n    SparseMat(const CvSparseMat* m);\n    //! the destructor\n    ~SparseMat();\n\n    //! assignment operator. This is O(1) operation, i.e. no data is copied\n    SparseMat& operator = (const SparseMat& m);\n    //! equivalent to the corresponding constructor\n    SparseMat& operator = (const Mat& m);\n\n    //! creates full copy of the matrix\n    SparseMat clone() const;\n\n    //! copies all the data to the destination matrix. All the previous content of m is erased\n    void copyTo( SparseMat& m ) const;\n    //! converts sparse matrix to dense matrix.\n    void copyTo( Mat& m ) const;\n    //! multiplies all the matrix elements by the specified scale factor alpha and converts the results to the specified data type\n    void convertTo( SparseMat& m, int rtype, double alpha=1 ) const;\n    //! converts sparse matrix to dense n-dim matrix with optional type conversion and scaling.\n    /*!\n      \\param rtype The output matrix data type. When it is =-1, the output array will have the same data type as (*this)\n      \\param alpha The scale factor\n      \\param beta The optional delta added to the scaled values before the conversion\n    */\n    void convertTo( Mat& m, int rtype, double alpha=1, double beta=0 ) const;\n\n    // not used now\n    void assignTo( SparseMat& m, int type=-1 ) const;\n\n    //! reallocates sparse matrix.\n    /*!\n        If the matrix already had the proper size and type,\n        it is simply cleared with clear(), otherwise,\n        the old matrix is released (using release()) and the new one is allocated.\n    */\n    void create(int dims, const int* _sizes, int _type);\n    //! sets all the sparse matrix elements to 0, which means clearing the hash table.\n    void clear();\n    //! manually increments the reference counter to the header.\n    void addref();\n    // decrements the header reference counter. When the counter reaches 0, the header and all the underlying data are deallocated.\n    void release();\n\n    //! converts sparse matrix to the old-style representation; all the elements are copied.\n    operator CvSparseMat*() const;\n    //! returns the size of each element in bytes (not including the overhead - the space occupied by SparseMat::Node elements)\n    size_t elemSize() const;\n    //! returns elemSize()/channels()\n    size_t elemSize1() const;\n\n    //! returns type of sparse matrix elements\n    int type() const;\n    //! returns the depth of sparse matrix elements\n    int depth() const;\n    //! returns the number of channels\n    int channels() const;\n\n    //! returns the array of sizes, or NULL if the matrix is not allocated\n    const int* size() const;\n    //! returns the size of i-th matrix dimension (or 0)\n    int size(int i) const;\n    //! returns the matrix dimensionality\n    int dims() const;\n    //! returns the number of non-zero elements (=the number of hash table nodes)\n    size_t nzcount() const;\n\n    //! computes the element hash value (1D case)\n    size_t hash(int i0) const;\n    //! computes the element hash value (2D case)\n    size_t hash(int i0, int i1) const;\n    //! computes the element hash value (3D case)\n    size_t hash(int i0, int i1, int i2) const;\n    //! computes the element hash value (nD case)\n    size_t hash(const int* idx) const;\n\n    //@{\n    /*!\n     specialized variants for 1D, 2D, 3D cases and the generic_type one for n-D case.\n\n     return pointer to the matrix element.\n     <ul>\n      <li>if the element is there (it's non-zero), the pointer to it is returned\n      <li>if it's not there and createMissing=false, NULL pointer is returned\n      <li>if it's not there and createMissing=true, then the new element\n        is created and initialized with 0. Pointer to it is returned\n      <li>if the optional hashval pointer is not NULL, the element hash value is\n      not computed, but *hashval is taken instead.\n     </ul>\n    */\n    //! returns pointer to the specified element (1D case)\n    uchar* ptr(int i0, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (2D case)\n    uchar* ptr(int i0, int i1, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (3D case)\n    uchar* ptr(int i0, int i1, int i2, bool createMissing, size_t* hashval=0);\n    //! returns pointer to the specified element (nD case)\n    uchar* ptr(const int* idx, bool createMissing, size_t* hashval=0);\n    //@}\n\n    //@{\n    /*!\n     return read-write reference to the specified sparse matrix element.\n\n     ref<_Tp>(i0,...[,hashval]) is equivalent to *(_Tp*)ptr(i0,...,true[,hashval]).\n     The methods always return a valid reference.\n     If the element did not exist, it is created and initialiazed with 0.\n    */\n    //! returns reference to the specified element (1D case)\n    template<typename _Tp> _Tp& ref(int i0, size_t* hashval=0);\n    //! returns reference to the specified element (2D case)\n    template<typename _Tp> _Tp& ref(int i0, int i1, size_t* hashval=0);\n    //! returns reference to the specified element (3D case)\n    template<typename _Tp> _Tp& ref(int i0, int i1, int i2, size_t* hashval=0);\n    //! returns reference to the specified element (nD case)\n    template<typename _Tp> _Tp& ref(const int* idx, size_t* hashval=0);\n    //@}\n\n    //@{\n    /*!\n     return value of the specified sparse matrix element.\n\n     value<_Tp>(i0,...[,hashval]) is equivalent\n\n     \\code\n     { const _Tp* p = find<_Tp>(i0,...[,hashval]); return p ? *p : _Tp(); }\n     \\endcode\n\n     That is, if the element did not exist, the methods return 0.\n     */\n    //! returns value of the specified element (1D case)\n    template<typename _Tp> _Tp value(int i0, size_t* hashval=0) const;\n    //! returns value of the specified element (2D case)\n    template<typename _Tp> _Tp value(int i0, int i1, size_t* hashval=0) const;\n    //! returns value of the specified element (3D case)\n    template<typename _Tp> _Tp value(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! returns value of the specified element (nD case)\n    template<typename _Tp> _Tp value(const int* idx, size_t* hashval=0) const;\n    //@}\n\n    //@{\n    /*!\n     Return pointer to the specified sparse matrix element if it exists\n\n     find<_Tp>(i0,...[,hashval]) is equivalent to (_const Tp*)ptr(i0,...false[,hashval]).\n\n     If the specified element does not exist, the methods return NULL.\n    */\n    //! returns pointer to the specified element (1D case)\n    template<typename _Tp> const _Tp* find(int i0, size_t* hashval=0) const;\n    //! returns pointer to the specified element (2D case)\n    template<typename _Tp> const _Tp* find(int i0, int i1, size_t* hashval=0) const;\n    //! returns pointer to the specified element (3D case)\n    template<typename _Tp> const _Tp* find(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! returns pointer to the specified element (nD case)\n    template<typename _Tp> const _Tp* find(const int* idx, size_t* hashval=0) const;\n\n    //! erases the specified element (2D case)\n    void erase(int i0, int i1, size_t* hashval=0);\n    //! erases the specified element (3D case)\n    void erase(int i0, int i1, int i2, size_t* hashval=0);\n    //! erases the specified element (nD case)\n    void erase(const int* idx, size_t* hashval=0);\n\n    //@{\n    /*!\n       return the sparse matrix iterator pointing to the first sparse matrix element\n    */\n    //! returns the sparse matrix iterator at the matrix beginning\n    SparseMatIterator begin();\n    //! returns the sparse matrix iterator at the matrix beginning\n    template<typename _Tp> SparseMatIterator_<_Tp> begin();\n    //! returns the read-only sparse matrix iterator at the matrix beginning\n    SparseMatConstIterator begin() const;\n    //! returns the read-only sparse matrix iterator at the matrix beginning\n    template<typename _Tp> SparseMatConstIterator_<_Tp> begin() const;\n    //@}\n    /*!\n       return the sparse matrix iterator pointing to the element following the last sparse matrix element\n    */\n    //! returns the sparse matrix iterator at the matrix end\n    SparseMatIterator end();\n    //! returns the read-only sparse matrix iterator at the matrix end\n    SparseMatConstIterator end() const;\n    //! returns the typed sparse matrix iterator at the matrix end\n    template<typename _Tp> SparseMatIterator_<_Tp> end();\n    //! returns the typed read-only sparse matrix iterator at the matrix end\n    template<typename _Tp> SparseMatConstIterator_<_Tp> end() const;\n\n    //! returns the value stored in the sparse martix node\n    template<typename _Tp> _Tp& value(Node* n);\n    //! returns the value stored in the sparse martix node\n    template<typename _Tp> const _Tp& value(const Node* n) const;\n\n    ////////////// some internal-use methods ///////////////\n    Node* node(size_t nidx);\n    const Node* node(size_t nidx) const;\n\n    uchar* newNode(const int* idx, size_t hashval);\n    void removeNode(size_t hidx, size_t nidx, size_t previdx);\n    void resizeHashTab(size_t newsize);\n\n    enum { MAGIC_VAL=0x42FD0000, MAX_DIM=CV_MAX_DIM, HASH_SCALE=0x5bd1e995, HASH_BIT=0x80000000 };\n\n    int flags;\n    Hdr* hdr;\n};\n\n//! finds global minimum and maximum sparse array elements and returns their values and their locations\nCV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal,\n                          double* maxVal, int* minIdx=0, int* maxIdx=0);\n//! computes norm of a sparse matrix\nCV_EXPORTS double norm( const SparseMat& src, int normType );\n//! scales and shifts array elements so that either the specified norm (alpha) or the minimum (alpha) and maximum (beta) array values get the specified values\nCV_EXPORTS void normalize( const SparseMat& src, SparseMat& dst, double alpha, int normType );\n\n/*!\n Read-Only Sparse Matrix Iterator.\n Here is how to use the iterator to compute the sum of floating-point sparse matrix elements:\n\n \\code\n SparseMatConstIterator it = m.begin(), it_end = m.end();\n double s = 0;\n CV_Assert( m.type() == CV_32F );\n for( ; it != it_end; ++it )\n    s += it.value<float>();\n \\endcode\n*/\nclass CV_EXPORTS SparseMatConstIterator\n{\npublic:\n    //! the default constructor\n    SparseMatConstIterator();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatConstIterator(const SparseMat* _m);\n    //! the copy constructor\n    SparseMatConstIterator(const SparseMatConstIterator& it);\n\n    //! the assignment operator\n    SparseMatConstIterator& operator = (const SparseMatConstIterator& it);\n\n    //! template method returning the current matrix element\n    template<typename _Tp> const _Tp& value() const;\n    //! returns the current node of the sparse matrix. it.node->idx is the current element index\n    const SparseMat::Node* node() const;\n\n    //! moves iterator to the previous element\n    SparseMatConstIterator& operator --();\n    //! moves iterator to the previous element\n    SparseMatConstIterator operator --(int);\n    //! moves iterator to the next element\n    SparseMatConstIterator& operator ++();\n    //! moves iterator to the next element\n    SparseMatConstIterator operator ++(int);\n\n    //! moves iterator to the element after the last element\n    void seekEnd();\n\n    const SparseMat* m;\n    size_t hashidx;\n    uchar* ptr;\n};\n\n/*!\n Read-write Sparse Matrix Iterator\n\n The class is similar to cv::SparseMatConstIterator,\n but can be used for in-place modification of the matrix elements.\n*/\nclass CV_EXPORTS SparseMatIterator : public SparseMatConstIterator\n{\npublic:\n    //! the default constructor\n    SparseMatIterator();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatIterator(SparseMat* _m);\n    //! the full constructor setting the iterator to the specified sparse matrix element\n    SparseMatIterator(SparseMat* _m, const int* idx);\n    //! the copy constructor\n    SparseMatIterator(const SparseMatIterator& it);\n\n    //! the assignment operator\n    SparseMatIterator& operator = (const SparseMatIterator& it);\n    //! returns read-write reference to the current sparse matrix element\n    template<typename _Tp> _Tp& value() const;\n    //! returns pointer to the current sparse matrix node. it.node->idx is the index of the current element (do not modify it!)\n    SparseMat::Node* node() const;\n\n    //! moves iterator to the next element\n    SparseMatIterator& operator ++();\n    //! moves iterator to the next element\n    SparseMatIterator operator ++(int);\n};\n\n/*!\n The Template Sparse Matrix class derived from cv::SparseMat\n\n The class provides slightly more convenient operations for accessing elements.\n\n \\code\n SparseMat m;\n ...\n SparseMat_<int> m_ = (SparseMat_<int>&)m;\n m_.ref(1)++; // equivalent to m.ref<int>(1)++;\n m_.ref(2) += m_(3); // equivalent to m.ref<int>(2) += m.value<int>(3);\n \\endcode\n*/\ntemplate<typename _Tp> class SparseMat_ : public SparseMat\n{\npublic:\n    typedef SparseMatIterator_<_Tp> iterator;\n    typedef SparseMatConstIterator_<_Tp> const_iterator;\n\n    //! the default constructor\n    SparseMat_();\n    //! the full constructor equivelent to SparseMat(dims, _sizes, DataType<_Tp>::type)\n    SparseMat_(int dims, const int* _sizes);\n    //! the copy constructor. If DataType<_Tp>.type != m.type(), the m elements are converted\n    SparseMat_(const SparseMat& m);\n    //! the copy constructor. This is O(1) operation - no data is copied\n    SparseMat_(const SparseMat_& m);\n    //! converts dense matrix to the sparse form\n    SparseMat_(const Mat& m);\n    //! converts the old-style sparse matrix to the C++ class. All the elements are copied\n    SparseMat_(const CvSparseMat* m);\n    //! the assignment operator. If DataType<_Tp>.type != m.type(), the m elements are converted\n    SparseMat_& operator = (const SparseMat& m);\n    //! the assignment operator. This is O(1) operation - no data is copied\n    SparseMat_& operator = (const SparseMat_& m);\n    //! converts dense matrix to the sparse form\n    SparseMat_& operator = (const Mat& m);\n\n    //! makes full copy of the matrix. All the elements are duplicated\n    SparseMat_ clone() const;\n    //! equivalent to cv::SparseMat::create(dims, _sizes, DataType<_Tp>::type)\n    void create(int dims, const int* _sizes);\n    //! converts sparse matrix to the old-style CvSparseMat. All the elements are copied\n    operator CvSparseMat*() const;\n\n    //! returns type of the matrix elements\n    int type() const;\n    //! returns depth of the matrix elements\n    int depth() const;\n    //! returns the number of channels in each matrix element\n    int channels() const;\n\n    //! equivalent to SparseMat::ref<_Tp>(i0, hashval)\n    _Tp& ref(int i0, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(i0, i1, hashval)\n    _Tp& ref(int i0, int i1, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(i0, i1, i2, hashval)\n    _Tp& ref(int i0, int i1, int i2, size_t* hashval=0);\n    //! equivalent to SparseMat::ref<_Tp>(idx, hashval)\n    _Tp& ref(const int* idx, size_t* hashval=0);\n\n    //! equivalent to SparseMat::value<_Tp>(i0, hashval)\n    _Tp operator()(int i0, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(i0, i1, hashval)\n    _Tp operator()(int i0, int i1, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(i0, i1, i2, hashval)\n    _Tp operator()(int i0, int i1, int i2, size_t* hashval=0) const;\n    //! equivalent to SparseMat::value<_Tp>(idx, hashval)\n    _Tp operator()(const int* idx, size_t* hashval=0) const;\n\n    //! returns sparse matrix iterator pointing to the first sparse matrix element\n    SparseMatIterator_<_Tp> begin();\n    //! returns read-only sparse matrix iterator pointing to the first sparse matrix element\n    SparseMatConstIterator_<_Tp> begin() const;\n    //! returns sparse matrix iterator pointing to the element following the last sparse matrix element\n    SparseMatIterator_<_Tp> end();\n    //! returns read-only sparse matrix iterator pointing to the element following the last sparse matrix element\n    SparseMatConstIterator_<_Tp> end() const;\n};\n\n\n/*!\n Template Read-Only Sparse Matrix Iterator Class.\n\n This is the derived from SparseMatConstIterator class that\n introduces more convenient operator *() for accessing the current element.\n*/\ntemplate<typename _Tp> class SparseMatConstIterator_ : public SparseMatConstIterator\n{\npublic:\n    typedef std::forward_iterator_tag iterator_category;\n\n    //! the default constructor\n    SparseMatConstIterator_();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatConstIterator_(const SparseMat_<_Tp>* _m);\n    SparseMatConstIterator_(const SparseMat* _m);\n    //! the copy constructor\n    SparseMatConstIterator_(const SparseMatConstIterator_& it);\n\n    //! the assignment operator\n    SparseMatConstIterator_& operator = (const SparseMatConstIterator_& it);\n    //! the element access operator\n    const _Tp& operator *() const;\n\n    //! moves iterator to the next element\n    SparseMatConstIterator_& operator ++();\n    //! moves iterator to the next element\n    SparseMatConstIterator_ operator ++(int);\n};\n\n/*!\n Template Read-Write Sparse Matrix Iterator Class.\n\n This is the derived from cv::SparseMatConstIterator_ class that\n introduces more convenient operator *() for accessing the current element.\n*/\ntemplate<typename _Tp> class SparseMatIterator_ : public SparseMatConstIterator_<_Tp>\n{\npublic:\n    typedef std::forward_iterator_tag iterator_category;\n\n    //! the default constructor\n    SparseMatIterator_();\n    //! the full constructor setting the iterator to the first sparse matrix element\n    SparseMatIterator_(SparseMat_<_Tp>* _m);\n    SparseMatIterator_(SparseMat* _m);\n    //! the copy constructor\n    SparseMatIterator_(const SparseMatIterator_& it);\n\n    //! the assignment operator\n    SparseMatIterator_& operator = (const SparseMatIterator_& it);\n    //! returns the reference to the current element\n    _Tp& operator *() const;\n\n    //! moves the iterator to the next element\n    SparseMatIterator_& operator ++();\n    //! moves the iterator to the next element\n    SparseMatIterator_ operator ++(int);\n};\n\n//////////////////// Fast Nearest-Neighbor Search Structure ////////////////////\n\n/*!\n Fast Nearest Neighbor Search Class.\n\n The class implements D. Lowe BBF (Best-Bin-First) algorithm for the last\n approximate (or accurate) nearest neighbor search in multi-dimensional spaces.\n\n First, a set of vectors is passed to KDTree::KDTree() constructor\n or KDTree::build() method, where it is reordered.\n\n Then arbitrary vectors can be passed to KDTree::findNearest() methods, which\n find the K nearest neighbors among the vectors from the initial set.\n The user can balance between the speed and accuracy of the search by varying Emax\n parameter, which is the number of leaves that the algorithm checks.\n The larger parameter values yield more accurate results at the expense of lower processing speed.\n\n \\code\n KDTree T(points, false);\n const int K = 3, Emax = INT_MAX;\n int idx[K];\n float dist[K];\n T.findNearest(query_vec, K, Emax, idx, 0, dist);\n CV_Assert(dist[0] <= dist[1] && dist[1] <= dist[2]);\n \\endcode\n*/\nclass CV_EXPORTS_W KDTree\n{\npublic:\n    /*!\n        The node of the search tree.\n    */\n    struct Node\n    {\n        Node() : idx(-1), left(-1), right(-1), boundary(0.f) {}\n        Node(int _idx, int _left, int _right, float _boundary)\n            : idx(_idx), left(_left), right(_right), boundary(_boundary) {}\n        //! split dimension; >=0 for nodes (dim), < 0 for leaves (index of the point)\n        int idx;\n        //! node indices of the left and the right branches\n        int left, right;\n        //! go to the left if query_vec[node.idx]<=node.boundary, otherwise go to the right\n        float boundary;\n    };\n\n    //! the default constructor\n    CV_WRAP KDTree();\n    //! the full constructor that builds the search tree\n    CV_WRAP KDTree(InputArray points, bool copyAndReorderPoints=false);\n    //! the full constructor that builds the search tree\n    CV_WRAP KDTree(InputArray points, InputArray _labels,\n                   bool copyAndReorderPoints=false);\n    //! builds the search tree\n    CV_WRAP void build(InputArray points, bool copyAndReorderPoints=false);\n    //! builds the search tree\n    CV_WRAP void build(InputArray points, InputArray labels,\n                       bool copyAndReorderPoints=false);\n    //! finds the K nearest neighbors of \"vec\" while looking at Emax (at most) leaves\n    CV_WRAP int findNearest(InputArray vec, int K, int Emax,\n                            OutputArray neighborsIdx,\n                            OutputArray neighbors=noArray(),\n                            OutputArray dist=noArray(),\n                            OutputArray labels=noArray()) const;\n    //! finds all the points from the initial set that belong to the specified box\n    CV_WRAP void findOrthoRange(InputArray minBounds,\n                                InputArray maxBounds,\n                                OutputArray neighborsIdx,\n                                OutputArray neighbors=noArray(),\n                                OutputArray labels=noArray()) const;\n    //! returns vectors with the specified indices\n    CV_WRAP void getPoints(InputArray idx, OutputArray pts,\n                           OutputArray labels=noArray()) const;\n    //! return a vector with the specified index\n    const float* getPoint(int ptidx, int* label=0) const;\n    //! returns the search space dimensionality\n    CV_WRAP int dims() const;\n\n    vector<Node> nodes; //!< all the tree nodes\n    CV_PROP Mat points; //!< all the points. It can be a reordered copy of the input vector set or the original vector set.\n    CV_PROP vector<int> labels; //!< the parallel array of labels.\n    CV_PROP int maxDepth; //!< maximum depth of the search tree. Do not modify it\n    CV_PROP_RW int normType; //!< type of the distance (cv::NORM_L1 or cv::NORM_L2) used for search. Initially set to cv::NORM_L2, but you can modify it\n};\n\n//////////////////////////////////////// XML & YAML I/O ////////////////////////////////////\n\nclass CV_EXPORTS FileNode;\n\n/*!\n XML/YAML File Storage Class.\n\n The class describes an object associated with XML or YAML file.\n It can be used to store data to such a file or read and decode the data.\n\n The storage is organized as a tree of nested sequences (or lists) and mappings.\n Sequence is a heterogenious array, which elements are accessed by indices or sequentially using an iterator.\n Mapping is analogue of std::map or C structure, which elements are accessed by names.\n The most top level structure is a mapping.\n Leaves of the file storage tree are integers, floating-point numbers and text strings.\n\n For example, the following code:\n\n \\code\n // open file storage for writing. Type of the file is determined from the extension\n FileStorage fs(\"test.yml\", FileStorage::WRITE);\n fs << \"test_int\" << 5 << \"test_real\" << 3.1 << \"test_string\" << \"ABCDEFGH\";\n fs << \"test_mat\" << Mat::eye(3,3,CV_32F);\n\n fs << \"test_list\" << \"[\" << 0.0000000000001 << 2 << CV_PI << -3435345 << \"2-502 2-029 3egegeg\" <<\n \"{:\" << \"month\" << 12 << \"day\" << 31 << \"year\" << 1969 << \"}\" << \"]\";\n fs << \"test_map\" << \"{\" << \"x\" << 1 << \"y\" << 2 << \"width\" << 100 << \"height\" << 200 << \"lbp\" << \"[:\";\n\n const uchar arr[] = {0, 1, 1, 0, 1, 1, 0, 1};\n fs.writeRaw(\"u\", arr, (int)(sizeof(arr)/sizeof(arr[0])));\n\n fs << \"]\" << \"}\";\n \\endcode\n\n will produce the following file:\n\n \\verbatim\n %YAML:1.0\n test_int: 5\n test_real: 3.1000000000000001e+00\n test_string: ABCDEFGH\n test_mat: !!opencv-matrix\n     rows: 3\n     cols: 3\n     dt: f\n     data: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ]\n test_list:\n     - 1.0000000000000000e-13\n     - 2\n     - 3.1415926535897931e+00\n     - -3435345\n     - \"2-502 2-029 3egegeg\"\n     - { month:12, day:31, year:1969 }\n test_map:\n     x: 1\n     y: 2\n     width: 100\n     height: 200\n     lbp: [ 0, 1, 1, 0, 1, 1, 0, 1 ]\n \\endverbatim\n\n and to read the file above, the following code can be used:\n\n \\code\n // open file storage for reading.\n // Type of the file is determined from the content, not the extension\n FileStorage fs(\"test.yml\", FileStorage::READ);\n int test_int = (int)fs[\"test_int\"];\n double test_real = (double)fs[\"test_real\"];\n string test_string = (string)fs[\"test_string\"];\n\n Mat M;\n fs[\"test_mat\"] >> M;\n\n FileNode tl = fs[\"test_list\"];\n CV_Assert(tl.type() == FileNode::SEQ && tl.size() == 6);\n double tl0 = (double)tl[0];\n int tl1 = (int)tl[1];\n double tl2 = (double)tl[2];\n int tl3 = (int)tl[3];\n string tl4 = (string)tl[4];\n CV_Assert(tl[5].type() == FileNode::MAP && tl[5].size() == 3);\n\n int month = (int)tl[5][\"month\"];\n int day = (int)tl[5][\"day\"];\n int year = (int)tl[5][\"year\"];\n\n FileNode tm = fs[\"test_map\"];\n\n int x = (int)tm[\"x\"];\n int y = (int)tm[\"y\"];\n int width = (int)tm[\"width\"];\n int height = (int)tm[\"height\"];\n\n int lbp_val = 0;\n FileNodeIterator it = tm[\"lbp\"].begin();\n\n for(int k = 0; k < 8; k++, ++it)\n    lbp_val |= ((int)*it) << k;\n \\endcode\n*/\nclass CV_EXPORTS_W FileStorage\n{\npublic:\n    //! file storage mode\n    enum\n    {\n        READ=0, //! read mode\n        WRITE=1, //! write mode\n        APPEND=2, //! append mode\n        MEMORY=4,\n        FORMAT_MASK=(7<<3),\n        FORMAT_AUTO=0,\n        FORMAT_XML=(1<<3),\n        FORMAT_YAML=(2<<3)\n    };\n    enum\n    {\n        UNDEFINED=0,\n        VALUE_EXPECTED=1,\n        NAME_EXPECTED=2,\n        INSIDE_MAP=4\n    };\n    //! the default constructor\n    CV_WRAP FileStorage();\n    //! the full constructor that opens file storage for reading or writing\n    CV_WRAP FileStorage(const string& source, int flags, const string& encoding=string());\n    //! the constructor that takes pointer to the C FileStorage structure\n    FileStorage(CvFileStorage* fs);\n    //! the destructor. calls release()\n    virtual ~FileStorage();\n\n    //! opens file storage for reading or writing. The previous storage is closed with release()\n    CV_WRAP virtual bool open(const string& filename, int flags, const string& encoding=string());\n    //! returns true if the object is associated with currently opened file.\n    CV_WRAP virtual bool isOpened() const;\n    //! closes the file and releases all the memory buffers\n    CV_WRAP virtual void release();\n    //! closes the file, releases all the memory buffers and returns the text string\n    CV_WRAP string releaseAndGetString();\n\n    //! returns the first element of the top-level mapping\n    CV_WRAP FileNode getFirstTopLevelNode() const;\n    //! returns the top-level mapping. YAML supports multiple streams\n    CV_WRAP FileNode root(int streamidx=0) const;\n    //! returns the specified element of the top-level mapping\n    FileNode operator[](const string& nodename) const;\n    //! returns the specified element of the top-level mapping\n    CV_WRAP FileNode operator[](const char* nodename) const;\n\n    //! returns pointer to the underlying C FileStorage structure\n    CvFileStorage* operator *() { return fs; }\n    //! returns pointer to the underlying C FileStorage structure\n    const CvFileStorage* operator *() const { return fs; }\n    //! writes one or more numbers of the specified format to the currently written structure\n    void writeRaw( const string& fmt, const uchar* vec, size_t len );\n    //! writes the registered C structure (CvMat, CvMatND, CvSeq). See cvWrite()\n    void writeObj( const string& name, const void* obj );\n\n    //! returns the normalized object name for the specified file name\n    static string getDefaultObjectName(const string& filename);\n\n    Ptr<CvFileStorage> fs; //!< the underlying C FileStorage structure\n    string elname; //!< the currently written element\n    vector<char> structs; //!< the stack of written structures\n    int state; //!< the writer state\n};\n\nclass CV_EXPORTS FileNodeIterator;\n\n/*!\n File Storage Node class\n\n The node is used to store each and every element of the file storage opened for reading -\n from the primitive objects, such as numbers and text strings, to the complex nodes:\n sequences, mappings and the registered objects.\n\n Note that file nodes are only used for navigating file storages opened for reading.\n When a file storage is opened for writing, no data is stored in memory after it is written.\n*/\nclass CV_EXPORTS_W_SIMPLE FileNode\n{\npublic:\n    //! type of the file storage node\n    enum\n    {\n        NONE=0, //!< empty node\n        INT=1, //!< an integer\n        REAL=2, //!< floating-point number\n        FLOAT=REAL, //!< synonym or REAL\n        STR=3, //!< text string in UTF-8 encoding\n        STRING=STR, //!< synonym for STR\n        REF=4, //!< integer of size size_t. Typically used for storing complex dynamic structures where some elements reference the others\n        SEQ=5, //!< sequence\n        MAP=6, //!< mapping\n        TYPE_MASK=7,\n        FLOW=8, //!< compact representation of a sequence or mapping. Used only by YAML writer\n        USER=16, //!< a registered object (e.g. a matrix)\n        EMPTY=32, //!< empty structure (sequence or mapping)\n        NAMED=64 //!< the node has a name (i.e. it is element of a mapping)\n    };\n    //! the default constructor\n    CV_WRAP FileNode();\n    //! the full constructor wrapping CvFileNode structure.\n    FileNode(const CvFileStorage* fs, const CvFileNode* node);\n    //! the copy constructor\n    FileNode(const FileNode& node);\n    //! returns element of a mapping node\n    FileNode operator[](const string& nodename) const;\n    //! returns element of a mapping node\n    CV_WRAP FileNode operator[](const char* nodename) const;\n    //! returns element of a sequence node\n    CV_WRAP FileNode operator[](int i) const;\n    //! returns type of the node\n    CV_WRAP int type() const;\n\n    //! returns true if the node is empty\n    CV_WRAP bool empty() const;\n    //! returns true if the node is a \"none\" object\n    CV_WRAP bool isNone() const;\n    //! returns true if the node is a sequence\n    CV_WRAP bool isSeq() const;\n    //! returns true if the node is a mapping\n    CV_WRAP bool isMap() const;\n    //! returns true if the node is an integer\n    CV_WRAP bool isInt() const;\n    //! returns true if the node is a floating-point number\n    CV_WRAP bool isReal() const;\n    //! returns true if the node is a text string\n    CV_WRAP bool isString() const;\n    //! returns true if the node has a name\n    CV_WRAP bool isNamed() const;\n    //! returns the node name or an empty string if the node is nameless\n    CV_WRAP string name() const;\n    //! returns the number of elements in the node, if it is a sequence or mapping, or 1 otherwise.\n    CV_WRAP size_t size() const;\n    //! returns the node content as an integer. If the node stores floating-point number, it is rounded.\n    operator int() const;\n    //! returns the node content as float\n    operator float() const;\n    //! returns the node content as double\n    operator double() const;\n    //! returns the node content as text string\n    operator string() const;\n\n    //! returns pointer to the underlying file node\n    CvFileNode* operator *();\n    //! returns pointer to the underlying file node\n    const CvFileNode* operator* () const;\n\n    //! returns iterator pointing to the first node element\n    FileNodeIterator begin() const;\n    //! returns iterator pointing to the element following the last node element\n    FileNodeIterator end() const;\n\n    //! reads node elements to the buffer with the specified format\n    void readRaw( const string& fmt, uchar* vec, size_t len ) const;\n    //! reads the registered object and returns pointer to it\n    void* readObj() const;\n\n    // do not use wrapper pointer classes for better efficiency\n    const CvFileStorage* fs;\n    const CvFileNode* node;\n};\n\n\n/*!\n File Node Iterator\n\n The class is used for iterating sequences (usually) and mappings.\n */\nclass CV_EXPORTS FileNodeIterator\n{\npublic:\n    //! the default constructor\n    FileNodeIterator();\n    //! the full constructor set to the ofs-th element of the node\n    FileNodeIterator(const CvFileStorage* fs, const CvFileNode* node, size_t ofs=0);\n    //! the copy constructor\n    FileNodeIterator(const FileNodeIterator& it);\n    //! returns the currently observed element\n    FileNode operator *() const;\n    //! accesses the currently observed element methods\n    FileNode operator ->() const;\n\n    //! moves iterator to the next node\n    FileNodeIterator& operator ++ ();\n    //! moves iterator to the next node\n    FileNodeIterator operator ++ (int);\n    //! moves iterator to the previous node\n    FileNodeIterator& operator -- ();\n    //! moves iterator to the previous node\n    FileNodeIterator operator -- (int);\n    //! moves iterator forward by the specified offset (possibly negative)\n    FileNodeIterator& operator += (int ofs);\n    //! moves iterator backward by the specified offset (possibly negative)\n    FileNodeIterator& operator -= (int ofs);\n\n    //! reads the next maxCount elements (or less, if the sequence/mapping last element occurs earlier) to the buffer with the specified format\n    FileNodeIterator& readRaw( const string& fmt, uchar* vec,\n                               size_t maxCount=(size_t)INT_MAX );\n\n    const CvFileStorage* fs;\n    const CvFileNode* container;\n    CvSeqReader reader;\n    size_t remaining;\n};\n\n////////////// convenient wrappers for operating old-style dynamic structures //////////////\n\ntemplate<typename _Tp> class SeqIterator;\n\ntypedef Ptr<CvMemStorage> MemStorage;\n\n/*!\n Template Sequence Class derived from CvSeq\n\n The class provides more convenient access to sequence elements,\n STL-style operations and iterators.\n\n \\note The class is targeted for simple data types,\n    i.e. no constructors or destructors\n    are called for the sequence elements.\n*/\ntemplate<typename _Tp> class Seq\n{\npublic:\n    typedef SeqIterator<_Tp> iterator;\n    typedef SeqIterator<_Tp> const_iterator;\n\n    //! the default constructor\n    Seq();\n    //! the constructor for wrapping CvSeq structure. The real element type in CvSeq should match _Tp.\n    Seq(const CvSeq* seq);\n    //! creates the empty sequence that resides in the specified storage\n    Seq(MemStorage& storage, int headerSize = sizeof(CvSeq));\n    //! returns read-write reference to the specified element\n    _Tp& operator [](int idx);\n    //! returns read-only reference to the specified element\n    const _Tp& operator[](int idx) const;\n    //! returns iterator pointing to the beginning of the sequence\n    SeqIterator<_Tp> begin() const;\n    //! returns iterator pointing to the element following the last sequence element\n    SeqIterator<_Tp> end() const;\n    //! returns the number of elements in the sequence\n    size_t size() const;\n    //! returns the type of sequence elements (CV_8UC1 ... CV_64FC(CV_CN_MAX) ...)\n    int type() const;\n    //! returns the depth of sequence elements (CV_8U ... CV_64F)\n    int depth() const;\n    //! returns the number of channels in each sequence element\n    int channels() const;\n    //! returns the size of each sequence element\n    size_t elemSize() const;\n    //! returns index of the specified sequence element\n    size_t index(const _Tp& elem) const;\n    //! appends the specified element to the end of the sequence\n    void push_back(const _Tp& elem);\n    //! appends the specified element to the front of the sequence\n    void push_front(const _Tp& elem);\n    //! appends zero or more elements to the end of the sequence\n    void push_back(const _Tp* elems, size_t count);\n    //! appends zero or more elements to the front of the sequence\n    void push_front(const _Tp* elems, size_t count);\n    //! inserts the specified element to the specified position\n    void insert(int idx, const _Tp& elem);\n    //! inserts zero or more elements to the specified position\n    void insert(int idx, const _Tp* elems, size_t count);\n    //! removes element at the specified position\n    void remove(int idx);\n    //! removes the specified subsequence\n    void remove(const Range& r);\n\n    //! returns reference to the first sequence element\n    _Tp& front();\n    //! returns read-only reference to the first sequence element\n    const _Tp& front() const;\n    //! returns reference to the last sequence element\n    _Tp& back();\n    //! returns read-only reference to the last sequence element\n    const _Tp& back() const;\n    //! returns true iff the sequence contains no elements\n    bool empty() const;\n\n    //! removes all the elements from the sequence\n    void clear();\n    //! removes the first element from the sequence\n    void pop_front();\n    //! removes the last element from the sequence\n    void pop_back();\n    //! removes zero or more elements from the beginning of the sequence\n    void pop_front(_Tp* elems, size_t count);\n    //! removes zero or more elements from the end of the sequence\n    void pop_back(_Tp* elems, size_t count);\n\n    //! copies the whole sequence or the sequence slice to the specified vector\n    void copyTo(vector<_Tp>& vec, const Range& range=Range::all()) const;\n    //! returns the vector containing all the sequence elements\n    operator vector<_Tp>() const;\n\n    CvSeq* seq;\n};\n\n\n/*!\n STL-style Sequence Iterator inherited from the CvSeqReader structure\n*/\ntemplate<typename _Tp> class SeqIterator : public CvSeqReader\n{\npublic:\n    //! the default constructor\n    SeqIterator();\n    //! the constructor setting the iterator to the beginning or to the end of the sequence\n    SeqIterator(const Seq<_Tp>& seq, bool seekEnd=false);\n    //! positions the iterator within the sequence\n    void seek(size_t pos);\n    //! reports the current iterator position\n    size_t tell() const;\n    //! returns reference to the current sequence element\n    _Tp& operator *();\n    //! returns read-only reference to the current sequence element\n    const _Tp& operator *() const;\n    //! moves iterator to the next sequence element\n    SeqIterator& operator ++();\n    //! moves iterator to the next sequence element\n    SeqIterator operator ++(int) const;\n    //! moves iterator to the previous sequence element\n    SeqIterator& operator --();\n    //! moves iterator to the previous sequence element\n    SeqIterator operator --(int) const;\n\n    //! moves iterator forward by the specified offset (possibly negative)\n    SeqIterator& operator +=(int);\n    //! moves iterator backward by the specified offset (possibly negative)\n    SeqIterator& operator -=(int);\n\n    // this is index of the current element module seq->total*2\n    // (to distinguish between 0 and seq->total)\n    int index;\n};\n\n\nclass CV_EXPORTS Algorithm;\nclass CV_EXPORTS AlgorithmInfo;\nstruct CV_EXPORTS AlgorithmInfoData;\n\ntemplate<typename _Tp> struct ParamType {};\n\n/*!\n  Base class for high-level OpenCV algorithms\n*/\nclass CV_EXPORTS_W Algorithm\n{\npublic:\n    Algorithm();\n    virtual ~Algorithm();\n    string name() const;\n\n    template<typename _Tp> typename ParamType<_Tp>::member_type get(const string& name) const;\n    template<typename _Tp> typename ParamType<_Tp>::member_type get(const char* name) const;\n\n    CV_WRAP int getInt(const string& name) const;\n    CV_WRAP double getDouble(const string& name) const;\n    CV_WRAP bool getBool(const string& name) const;\n    CV_WRAP string getString(const string& name) const;\n    CV_WRAP Mat getMat(const string& name) const;\n    CV_WRAP vector<Mat> getMatVector(const string& name) const;\n    CV_WRAP Ptr<Algorithm> getAlgorithm(const string& name) const;\n\n    void set(const string& name, int value);\n    void set(const string& name, double value);\n    void set(const string& name, bool value);\n    void set(const string& name, const string& value);\n    void set(const string& name, const Mat& value);\n    void set(const string& name, const vector<Mat>& value);\n    void set(const string& name, const Ptr<Algorithm>& value);\n    template<typename _Tp> void set(const string& name, const Ptr<_Tp>& value);\n\n    CV_WRAP void setInt(const string& name, int value);\n    CV_WRAP void setDouble(const string& name, double value);\n    CV_WRAP void setBool(const string& name, bool value);\n    CV_WRAP void setString(const string& name, const string& value);\n    CV_WRAP void setMat(const string& name, const Mat& value);\n    CV_WRAP void setMatVector(const string& name, const vector<Mat>& value);\n    CV_WRAP void setAlgorithm(const string& name, const Ptr<Algorithm>& value);\n    template<typename _Tp> void setAlgorithm(const string& name, const Ptr<_Tp>& value);\n\n    void set(const char* name, int value);\n    void set(const char* name, double value);\n    void set(const char* name, bool value);\n    void set(const char* name, const string& value);\n    void set(const char* name, const Mat& value);\n    void set(const char* name, const vector<Mat>& value);\n    void set(const char* name, const Ptr<Algorithm>& value);\n    template<typename _Tp> void set(const char* name, const Ptr<_Tp>& value);\n\n    void setInt(const char* name, int value);\n    void setDouble(const char* name, double value);\n    void setBool(const char* name, bool value);\n    void setString(const char* name, const string& value);\n    void setMat(const char* name, const Mat& value);\n    void setMatVector(const char* name, const vector<Mat>& value);\n    void setAlgorithm(const char* name, const Ptr<Algorithm>& value);\n    template<typename _Tp> void setAlgorithm(const char* name, const Ptr<_Tp>& value);\n\n    CV_WRAP string paramHelp(const string& name) const;\n    int paramType(const char* name) const;\n    CV_WRAP int paramType(const string& name) const;\n    CV_WRAP void getParams(CV_OUT vector<string>& names) const;\n\n\n    virtual void write(FileStorage& fs) const;\n    virtual void read(const FileNode& fn);\n\n    typedef Algorithm* (*Constructor)(void);\n    typedef int (Algorithm::*Getter)() const;\n    typedef void (Algorithm::*Setter)(int);\n\n    CV_WRAP static void getList(CV_OUT vector<string>& algorithms);\n    CV_WRAP static Ptr<Algorithm> _create(const string& name);\n    template<typename _Tp> static Ptr<_Tp> create(const string& name);\n\n    virtual AlgorithmInfo* info() const /* TODO: make it = 0;*/ { return 0; }\n};\n\n\nclass CV_EXPORTS AlgorithmInfo\n{\npublic:\n    friend class Algorithm;\n    AlgorithmInfo(const string& name, Algorithm::Constructor create);\n    ~AlgorithmInfo();\n    void get(const Algorithm* algo, const char* name, int argType, void* value) const;\n    void addParam_(Algorithm& algo, const char* name, int argType,\n                   void* value, bool readOnly,\n                   Algorithm::Getter getter, Algorithm::Setter setter,\n                   const string& help=string());\n    string paramHelp(const char* name) const;\n    int paramType(const char* name) const;\n    void getParams(vector<string>& names) const;\n\n    void write(const Algorithm* algo, FileStorage& fs) const;\n    void read(Algorithm* algo, const FileNode& fn) const;\n    string name() const;\n\n    void addParam(Algorithm& algo, const char* name,\n                  int& value, bool readOnly=false,\n                  int (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(int)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  short& value, bool readOnly=false,\n                  int (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(int)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  bool& value, bool readOnly=false,\n                  int (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(int)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  double& value, bool readOnly=false,\n                  double (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(double)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  string& value, bool readOnly=false,\n                  string (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const string&)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  Mat& value, bool readOnly=false,\n                  Mat (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const Mat&)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  vector<Mat>& value, bool readOnly=false,\n                  vector<Mat> (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const vector<Mat>&)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  Ptr<Algorithm>& value, bool readOnly=false,\n                  Ptr<Algorithm> (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const Ptr<Algorithm>&)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  float& value, bool readOnly=false,\n                  float (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(float)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  unsigned int& value, bool readOnly=false,\n                  unsigned int (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(unsigned int)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  uint64& value, bool readOnly=false,\n                  uint64 (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(uint64)=0,\n                  const string& help=string());\n    void addParam(Algorithm& algo, const char* name,\n                  uchar& value, bool readOnly=false,\n                  uchar (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(uchar)=0,\n                  const string& help=string());\n    template<typename _Tp, typename _Base> void addParam(Algorithm& algo, const char* name,\n                  Ptr<_Tp>& value, bool readOnly=false,\n                  Ptr<_Tp> (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const Ptr<_Tp>&)=0,\n                  const string& help=string());\n    template<typename _Tp> void addParam(Algorithm& algo, const char* name,\n                  Ptr<_Tp>& value, bool readOnly=false,\n                  Ptr<_Tp> (Algorithm::*getter)()=0,\n                  void (Algorithm::*setter)(const Ptr<_Tp>&)=0,\n                  const string& help=string());\nprotected:\n    AlgorithmInfoData* data;\n    void set(Algorithm* algo, const char* name, int argType,\n              const void* value, bool force=false) const;\n};\n\n\nstruct CV_EXPORTS Param\n{\n    enum { INT=0, BOOLEAN=1, REAL=2, STRING=3, MAT=4, MAT_VECTOR=5, ALGORITHM=6, FLOAT=7, UNSIGNED_INT=8, UINT64=9, SHORT=10, UCHAR=11 };\n\n    Param();\n    Param(int _type, bool _readonly, int _offset,\n          Algorithm::Getter _getter=0,\n          Algorithm::Setter _setter=0,\n          const string& _help=string());\n    int type;\n    int offset;\n    bool readonly;\n    Algorithm::Getter getter;\n    Algorithm::Setter setter;\n    string help;\n};\n\ntemplate<> struct ParamType<bool>\n{\n    typedef bool const_param_type;\n    typedef bool member_type;\n\n    enum { type = Param::BOOLEAN };\n};\n\ntemplate<> struct ParamType<int>\n{\n    typedef int const_param_type;\n    typedef int member_type;\n\n    enum { type = Param::INT };\n};\n\ntemplate<> struct ParamType<short>\n{\n    typedef int const_param_type;\n    typedef int member_type;\n\n    enum { type = Param::SHORT };\n};\n\ntemplate<> struct ParamType<double>\n{\n    typedef double const_param_type;\n    typedef double member_type;\n\n    enum { type = Param::REAL };\n};\n\ntemplate<> struct ParamType<string>\n{\n    typedef const string& const_param_type;\n    typedef string member_type;\n\n    enum { type = Param::STRING };\n};\n\ntemplate<> struct ParamType<Mat>\n{\n    typedef const Mat& const_param_type;\n    typedef Mat member_type;\n\n    enum { type = Param::MAT };\n};\n\ntemplate<> struct ParamType<vector<Mat> >\n{\n    typedef const vector<Mat>& const_param_type;\n    typedef vector<Mat> member_type;\n\n    enum { type = Param::MAT_VECTOR };\n};\n\ntemplate<> struct ParamType<Algorithm>\n{\n    typedef const Ptr<Algorithm>& const_param_type;\n    typedef Ptr<Algorithm> member_type;\n\n    enum { type = Param::ALGORITHM };\n};\n\ntemplate<> struct ParamType<float>\n{\n    typedef float const_param_type;\n    typedef float member_type;\n\n    enum { type = Param::FLOAT };\n};\n\ntemplate<> struct ParamType<unsigned>\n{\n    typedef unsigned const_param_type;\n    typedef unsigned member_type;\n\n    enum { type = Param::UNSIGNED_INT };\n};\n\ntemplate<> struct ParamType<uint64>\n{\n    typedef uint64 const_param_type;\n    typedef uint64 member_type;\n\n    enum { type = Param::UINT64 };\n};\n\ntemplate<> struct ParamType<uchar>\n{\n    typedef uchar const_param_type;\n    typedef uchar member_type;\n\n    enum { type = Param::UCHAR };\n};\n\n/*!\n\"\\nThe CommandLineParser class is designed for command line arguments parsing\\n\"\n           \"Keys map: \\n\"\n           \"Before you start to work with CommandLineParser you have to create a map for keys.\\n\"\n           \"    It will look like this\\n\"\n           \"    const char* keys =\\n\"\n           \"    {\\n\"\n           \"        {    s|  string|  123asd |string parameter}\\n\"\n           \"        {    d|  digit |  100    |digit parameter }\\n\"\n           \"        {    c|noCamera|false    |without camera  }\\n\"\n           \"        {    1|        |some text|help            }\\n\"\n           \"        {    2|        |333      |another help    }\\n\"\n           \"    };\\n\"\n           \"Usage syntax: \\n\"\n           \"    \\\"{\\\" - start of parameter string.\\n\"\n           \"    \\\"}\\\" - end of parameter string\\n\"\n           \"    \\\"|\\\" - separator between short name, full name, default value and help\\n\"\n           \"Supported syntax: \\n\"\n           \"    --key1=arg1  <If a key with '--' must has an argument\\n\"\n           \"                  you have to assign it through '=' sign.> \\n\"\n           \"<If the key with '--' doesn't have any argument, it means that it is a bool key>\\n\"\n           \"    -key2=arg2   <If a key with '-' must has an argument \\n\"\n           \"                  you have to assign it through '=' sign.> \\n\"\n           \"If the key with '-' doesn't have any argument, it means that it is a bool key\\n\"\n           \"    key3                 <This key can't has any parameter> \\n\"\n           \"Usage: \\n\"\n           \"      Imagine that the input parameters are next:\\n\"\n           \"                -s=string_value --digit=250 --noCamera lena.jpg 10000\\n\"\n           \"    CommandLineParser parser(argc, argv, keys) - create a parser object\\n\"\n           \"    parser.get<string>(\\\"s\\\" or \\\"string\\\") will return you first parameter value\\n\"\n           \"    parser.get<string>(\\\"s\\\", false or \\\"string\\\", false) will return you first parameter value\\n\"\n           \"                                                                without spaces in end and begin\\n\"\n           \"    parser.get<int>(\\\"d\\\" or \\\"digit\\\") will return you second parameter value.\\n\"\n           \"                    It also works with 'unsigned int', 'double', and 'float' types>\\n\"\n           \"    parser.get<bool>(\\\"c\\\" or \\\"noCamera\\\") will return you true .\\n\"\n           \"                                If you enter this key in commandline>\\n\"\n           \"                                It return you false otherwise.\\n\"\n           \"    parser.get<string>(\\\"1\\\") will return you the first argument without parameter (lena.jpg) \\n\"\n           \"    parser.get<int>(\\\"2\\\") will return you the second argument without parameter (10000)\\n\"\n           \"                          It also works with 'unsigned int', 'double', and 'float' types \\n\"\n*/\nclass CV_EXPORTS CommandLineParser\n{\n    public:\n\n    //! the default constructor\n      CommandLineParser(int argc, const char* const argv[], const char* key_map);\n\n    //! get parameter, you can choose: delete spaces in end and begin or not\n    template<typename _Tp>\n    _Tp get(const std::string& name, bool space_delete=true)\n    {\n        if (!has(name))\n        {\n            return _Tp();\n        }\n        std::string str = getString(name);\n        return analyzeValue<_Tp>(str, space_delete);\n    }\n\n    //! print short name, full name, current value and help for all params\n    void printParams();\n\n    protected:\n    std::map<std::string, std::vector<std::string> > data;\n    std::string getString(const std::string& name);\n\n    bool has(const std::string& keys);\n\n    template<typename _Tp>\n    _Tp analyzeValue(const std::string& str, bool space_delete=false);\n\n    template<typename _Tp>\n    static _Tp getData(const std::string& str)\n    {\n        _Tp res = _Tp();\n        std::stringstream s1(str);\n        s1 >> res;\n        return res;\n    }\n\n    template<typename _Tp>\n     _Tp fromStringNumber(const std::string& str);//the default conversion function for numbers\n\n    };\n\ntemplate<> CV_EXPORTS\nbool CommandLineParser::get<bool>(const std::string& name, bool space_delete);\n\ntemplate<> CV_EXPORTS\nstd::string CommandLineParser::analyzeValue<std::string>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\nint CommandLineParser::analyzeValue<int>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\nunsigned int CommandLineParser::analyzeValue<unsigned int>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\nuint64 CommandLineParser::analyzeValue<uint64>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\nfloat CommandLineParser::analyzeValue<float>(const std::string& str, bool space_delete);\n\ntemplate<> CV_EXPORTS\ndouble CommandLineParser::analyzeValue<double>(const std::string& str, bool space_delete);\n\n\n/////////////////////////////// Parallel Primitives //////////////////////////////////\n\n// a base body class\nclass CV_EXPORTS ParallelLoopBody\n{\npublic:\n    virtual ~ParallelLoopBody();\n    virtual void operator() (const Range& range) const = 0;\n};\n\nCV_EXPORTS void parallel_for_(const Range& range, const ParallelLoopBody& body, double nstripes=-1.);\n\n/////////////////////////// Synchronization Primitives ///////////////////////////////\n\nclass CV_EXPORTS Mutex\n{\npublic:\n    Mutex();\n    ~Mutex();\n    Mutex(const Mutex& m);\n    Mutex& operator = (const Mutex& m);\n\n    void lock();\n    bool trylock();\n    void unlock();\n\n    struct Impl;\nprotected:\n    Impl* impl;\n};\n\nclass CV_EXPORTS AutoLock\n{\npublic:\n    AutoLock(Mutex& m) : mutex(&m) { mutex->lock(); }\n    ~AutoLock() { mutex->unlock(); }\nprotected:\n    Mutex* mutex;\nprivate:\n    AutoLock(const AutoLock&);\n    AutoLock& operator = (const AutoLock&);\n};\n\nclass TLSDataContainer\n{\nprivate:\n    int key_;\nprotected:\n    CV_EXPORTS TLSDataContainer();\n    CV_EXPORTS ~TLSDataContainer(); // virtual is not required\npublic:\n    virtual void* createDataInstance() const = 0;\n    virtual void deleteDataInstance(void* data) const = 0;\n\n    CV_EXPORTS void* getData() const;\n};\n\ntemplate <typename T>\nclass TLSData : protected TLSDataContainer\n{\npublic:\n    inline TLSData() {}\n    inline ~TLSData() {}\n    inline T* get() const { return (T*)getData(); }\nprivate:\n    virtual void* createDataInstance() const { return new T; }\n    virtual void deleteDataInstance(void* data) const { delete (T*)data; }\n};\n\n}\n\n#endif // __cplusplus\n\n#include \"opencv2/core/operations.hpp\"\n#include \"opencv2/core/mat.hpp\"\n\n#endif /*__OPENCV_CORE_HPP__*/\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/core_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n\n#ifndef __OPENCV_CORE_C_H__\n#define __OPENCV_CORE_C_H__\n\n#include \"opencv2/core/types_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/****************************************************************************************\\\n*          Array allocation, deallocation, initialization and access to elements         *\n\\****************************************************************************************/\n\n/* <malloc> wrapper.\n   If there is no enough memory, the function\n   (as well as other OpenCV functions that call cvAlloc)\n   raises an error. */\nCVAPI(void*)  cvAlloc( size_t size );\n\n/* <free> wrapper.\n   Here and further all the memory releasing functions\n   (that all call cvFree) take double pointer in order to\n   to clear pointer to the data after releasing it.\n   Passing pointer to NULL pointer is Ok: nothing happens in this case\n*/\nCVAPI(void)   cvFree_( void* ptr );\n#define cvFree(ptr) (cvFree_(*(ptr)), *(ptr)=0)\n\n/* Allocates and initializes IplImage header */\nCVAPI(IplImage*)  cvCreateImageHeader( CvSize size, int depth, int channels );\n\n/* Inializes IplImage header */\nCVAPI(IplImage*) cvInitImageHeader( IplImage* image, CvSize size, int depth,\n                                   int channels, int origin CV_DEFAULT(0),\n                                   int align CV_DEFAULT(4));\n\n/* Creates IPL image (header and data) */\nCVAPI(IplImage*)  cvCreateImage( CvSize size, int depth, int channels );\n\n/* Releases (i.e. deallocates) IPL image header */\nCVAPI(void)  cvReleaseImageHeader( IplImage** image );\n\n/* Releases IPL image header and data */\nCVAPI(void)  cvReleaseImage( IplImage** image );\n\n/* Creates a copy of IPL image (widthStep may differ) */\nCVAPI(IplImage*) cvCloneImage( const IplImage* image );\n\n/* Sets a Channel Of Interest (only a few functions support COI) -\n   use cvCopy to extract the selected channel and/or put it back */\nCVAPI(void)  cvSetImageCOI( IplImage* image, int coi );\n\n/* Retrieves image Channel Of Interest */\nCVAPI(int)  cvGetImageCOI( const IplImage* image );\n\n/* Sets image ROI (region of interest) (COI is not changed) */\nCVAPI(void)  cvSetImageROI( IplImage* image, CvRect rect );\n\n/* Resets image ROI and COI */\nCVAPI(void)  cvResetImageROI( IplImage* image );\n\n/* Retrieves image ROI */\nCVAPI(CvRect) cvGetImageROI( const IplImage* image );\n\n/* Allocates and initializes CvMat header */\nCVAPI(CvMat*)  cvCreateMatHeader( int rows, int cols, int type );\n\n#define CV_AUTOSTEP  0x7fffffff\n\n/* Initializes CvMat header */\nCVAPI(CvMat*) cvInitMatHeader( CvMat* mat, int rows, int cols,\n                              int type, void* data CV_DEFAULT(NULL),\n                              int step CV_DEFAULT(CV_AUTOSTEP) );\n\n/* Allocates and initializes CvMat header and allocates data */\nCVAPI(CvMat*)  cvCreateMat( int rows, int cols, int type );\n\n/* Releases CvMat header and deallocates matrix data\n   (reference counting is used for data) */\nCVAPI(void)  cvReleaseMat( CvMat** mat );\n\n/* Decrements CvMat data reference counter and deallocates the data if\n   it reaches 0 */\nCV_INLINE  void  cvDecRefData( CvArr* arr )\n{\n    if( CV_IS_MAT( arr ))\n    {\n        CvMat* mat = (CvMat*)arr;\n        mat->data.ptr = NULL;\n        if( mat->refcount != NULL && --*mat->refcount == 0 )\n            cvFree( &mat->refcount );\n        mat->refcount = NULL;\n    }\n    else if( CV_IS_MATND( arr ))\n    {\n        CvMatND* mat = (CvMatND*)arr;\n        mat->data.ptr = NULL;\n        if( mat->refcount != NULL && --*mat->refcount == 0 )\n            cvFree( &mat->refcount );\n        mat->refcount = NULL;\n    }\n}\n\n/* Increments CvMat data reference counter */\nCV_INLINE  int  cvIncRefData( CvArr* arr )\n{\n    int refcount = 0;\n    if( CV_IS_MAT( arr ))\n    {\n        CvMat* mat = (CvMat*)arr;\n        if( mat->refcount != NULL )\n            refcount = ++*mat->refcount;\n    }\n    else if( CV_IS_MATND( arr ))\n    {\n        CvMatND* mat = (CvMatND*)arr;\n        if( mat->refcount != NULL )\n            refcount = ++*mat->refcount;\n    }\n    return refcount;\n}\n\n\n/* Creates an exact copy of the input matrix (except, may be, step value) */\nCVAPI(CvMat*) cvCloneMat( const CvMat* mat );\n\n\n/* Makes a new matrix from <rect> subrectangle of input array.\n   No data is copied */\nCVAPI(CvMat*) cvGetSubRect( const CvArr* arr, CvMat* submat, CvRect rect );\n#define cvGetSubArr cvGetSubRect\n\n/* Selects row span of the input array: arr(start_row:delta_row:end_row,:)\n    (end_row is not included into the span). */\nCVAPI(CvMat*) cvGetRows( const CvArr* arr, CvMat* submat,\n                        int start_row, int end_row,\n                        int delta_row CV_DEFAULT(1));\n\nCV_INLINE  CvMat*  cvGetRow( const CvArr* arr, CvMat* submat, int row )\n{\n    return cvGetRows( arr, submat, row, row + 1, 1 );\n}\n\n\n/* Selects column span of the input array: arr(:,start_col:end_col)\n   (end_col is not included into the span) */\nCVAPI(CvMat*) cvGetCols( const CvArr* arr, CvMat* submat,\n                        int start_col, int end_col );\n\nCV_INLINE  CvMat*  cvGetCol( const CvArr* arr, CvMat* submat, int col )\n{\n    return cvGetCols( arr, submat, col, col + 1 );\n}\n\n/* Select a diagonal of the input array.\n   (diag = 0 means the main diagonal, >0 means a diagonal above the main one,\n   <0 - below the main one).\n   The diagonal will be represented as a column (nx1 matrix). */\nCVAPI(CvMat*) cvGetDiag( const CvArr* arr, CvMat* submat,\n                            int diag CV_DEFAULT(0));\n\n/* low-level scalar <-> raw data conversion functions */\nCVAPI(void) cvScalarToRawData( const CvScalar* scalar, void* data, int type,\n                              int extend_to_12 CV_DEFAULT(0) );\n\nCVAPI(void) cvRawDataToScalar( const void* data, int type, CvScalar* scalar );\n\n/* Allocates and initializes CvMatND header */\nCVAPI(CvMatND*)  cvCreateMatNDHeader( int dims, const int* sizes, int type );\n\n/* Allocates and initializes CvMatND header and allocates data */\nCVAPI(CvMatND*)  cvCreateMatND( int dims, const int* sizes, int type );\n\n/* Initializes preallocated CvMatND header */\nCVAPI(CvMatND*)  cvInitMatNDHeader( CvMatND* mat, int dims, const int* sizes,\n                                    int type, void* data CV_DEFAULT(NULL) );\n\n/* Releases CvMatND */\nCV_INLINE  void  cvReleaseMatND( CvMatND** mat )\n{\n    cvReleaseMat( (CvMat**)mat );\n}\n\n/* Creates a copy of CvMatND (except, may be, steps) */\nCVAPI(CvMatND*) cvCloneMatND( const CvMatND* mat );\n\n/* Allocates and initializes CvSparseMat header and allocates data */\nCVAPI(CvSparseMat*)  cvCreateSparseMat( int dims, const int* sizes, int type );\n\n/* Releases CvSparseMat */\nCVAPI(void)  cvReleaseSparseMat( CvSparseMat** mat );\n\n/* Creates a copy of CvSparseMat (except, may be, zero items) */\nCVAPI(CvSparseMat*) cvCloneSparseMat( const CvSparseMat* mat );\n\n/* Initializes sparse array iterator\n   (returns the first node or NULL if the array is empty) */\nCVAPI(CvSparseNode*) cvInitSparseMatIterator( const CvSparseMat* mat,\n                                              CvSparseMatIterator* mat_iterator );\n\n// returns next sparse array node (or NULL if there is no more nodes)\nCV_INLINE CvSparseNode* cvGetNextSparseNode( CvSparseMatIterator* mat_iterator )\n{\n    if( mat_iterator->node->next )\n        return mat_iterator->node = mat_iterator->node->next;\n    else\n    {\n        int idx;\n        for( idx = ++mat_iterator->curidx; idx < mat_iterator->mat->hashsize; idx++ )\n        {\n            CvSparseNode* node = (CvSparseNode*)mat_iterator->mat->hashtable[idx];\n            if( node )\n            {\n                mat_iterator->curidx = idx;\n                return mat_iterator->node = node;\n            }\n        }\n        return NULL;\n    }\n}\n\n/**************** matrix iterator: used for n-ary operations on dense arrays *********/\n\n#define CV_MAX_ARR 10\n\ntypedef struct CvNArrayIterator\n{\n    int count; /* number of arrays */\n    int dims; /* number of dimensions to iterate */\n    CvSize size; /* maximal common linear size: { width = size, height = 1 } */\n    uchar* ptr[CV_MAX_ARR]; /* pointers to the array slices */\n    int stack[CV_MAX_DIM]; /* for internal use */\n    CvMatND* hdr[CV_MAX_ARR]; /* pointers to the headers of the\n                                 matrices that are processed */\n}\nCvNArrayIterator;\n\n#define CV_NO_DEPTH_CHECK     1\n#define CV_NO_CN_CHECK        2\n#define CV_NO_SIZE_CHECK      4\n\n/* initializes iterator that traverses through several arrays simulteneously\n   (the function together with cvNextArraySlice is used for\n    N-ari element-wise operations) */\nCVAPI(int) cvInitNArrayIterator( int count, CvArr** arrs,\n                                 const CvArr* mask, CvMatND* stubs,\n                                 CvNArrayIterator* array_iterator,\n                                 int flags CV_DEFAULT(0) );\n\n/* returns zero value if iteration is finished, non-zero (slice length) otherwise */\nCVAPI(int) cvNextNArraySlice( CvNArrayIterator* array_iterator );\n\n\n/* Returns type of array elements:\n   CV_8UC1 ... CV_64FC4 ... */\nCVAPI(int) cvGetElemType( const CvArr* arr );\n\n/* Retrieves number of an array dimensions and\n   optionally sizes of the dimensions */\nCVAPI(int) cvGetDims( const CvArr* arr, int* sizes CV_DEFAULT(NULL) );\n\n\n/* Retrieves size of a particular array dimension.\n   For 2d arrays cvGetDimSize(arr,0) returns number of rows (image height)\n   and cvGetDimSize(arr,1) returns number of columns (image width) */\nCVAPI(int) cvGetDimSize( const CvArr* arr, int index );\n\n\n/* ptr = &arr(idx0,idx1,...). All indexes are zero-based,\n   the major dimensions go first (e.g. (y,x) for 2D, (z,y,x) for 3D */\nCVAPI(uchar*) cvPtr1D( const CvArr* arr, int idx0, int* type CV_DEFAULT(NULL));\nCVAPI(uchar*) cvPtr2D( const CvArr* arr, int idx0, int idx1, int* type CV_DEFAULT(NULL) );\nCVAPI(uchar*) cvPtr3D( const CvArr* arr, int idx0, int idx1, int idx2,\n                      int* type CV_DEFAULT(NULL));\n\n/* For CvMat or IplImage number of indices should be 2\n   (row index (y) goes first, column index (x) goes next).\n   For CvMatND or CvSparseMat number of infices should match number of <dims> and\n   indices order should match the array dimension order. */\nCVAPI(uchar*) cvPtrND( const CvArr* arr, const int* idx, int* type CV_DEFAULT(NULL),\n                      int create_node CV_DEFAULT(1),\n                      unsigned* precalc_hashval CV_DEFAULT(NULL));\n\n/* value = arr(idx0,idx1,...) */\nCVAPI(CvScalar) cvGet1D( const CvArr* arr, int idx0 );\nCVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );\nCVAPI(CvScalar) cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 );\nCVAPI(CvScalar) cvGetND( const CvArr* arr, const int* idx );\n\n/* for 1-channel arrays */\nCVAPI(double) cvGetReal1D( const CvArr* arr, int idx0 );\nCVAPI(double) cvGetReal2D( const CvArr* arr, int idx0, int idx1 );\nCVAPI(double) cvGetReal3D( const CvArr* arr, int idx0, int idx1, int idx2 );\nCVAPI(double) cvGetRealND( const CvArr* arr, const int* idx );\n\n/* arr(idx0,idx1,...) = value */\nCVAPI(void) cvSet1D( CvArr* arr, int idx0, CvScalar value );\nCVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );\nCVAPI(void) cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value );\nCVAPI(void) cvSetND( CvArr* arr, const int* idx, CvScalar value );\n\n/* for 1-channel arrays */\nCVAPI(void) cvSetReal1D( CvArr* arr, int idx0, double value );\nCVAPI(void) cvSetReal2D( CvArr* arr, int idx0, int idx1, double value );\nCVAPI(void) cvSetReal3D( CvArr* arr, int idx0,\n                        int idx1, int idx2, double value );\nCVAPI(void) cvSetRealND( CvArr* arr, const int* idx, double value );\n\n/* clears element of ND dense array,\n   in case of sparse arrays it deletes the specified node */\nCVAPI(void) cvClearND( CvArr* arr, const int* idx );\n\n/* Converts CvArr (IplImage or CvMat,...) to CvMat.\n   If the last parameter is non-zero, function can\n   convert multi(>2)-dimensional array to CvMat as long as\n   the last array's dimension is continous. The resultant\n   matrix will be have appropriate (a huge) number of rows */\nCVAPI(CvMat*) cvGetMat( const CvArr* arr, CvMat* header,\n                       int* coi CV_DEFAULT(NULL),\n                       int allowND CV_DEFAULT(0));\n\n/* Converts CvArr (IplImage or CvMat) to IplImage */\nCVAPI(IplImage*) cvGetImage( const CvArr* arr, IplImage* image_header );\n\n\n/* Changes a shape of multi-dimensional array.\n   new_cn == 0 means that number of channels remains unchanged.\n   new_dims == 0 means that number and sizes of dimensions remain the same\n   (unless they need to be changed to set the new number of channels)\n   if new_dims == 1, there is no need to specify new dimension sizes\n   The resultant configuration should be achievable w/o data copying.\n   If the resultant array is sparse, CvSparseMat header should be passed\n   to the function else if the result is 1 or 2 dimensional,\n   CvMat header should be passed to the function\n   else CvMatND header should be passed */\nCVAPI(CvArr*) cvReshapeMatND( const CvArr* arr,\n                             int sizeof_header, CvArr* header,\n                             int new_cn, int new_dims, int* new_sizes );\n\n#define cvReshapeND( arr, header, new_cn, new_dims, new_sizes )   \\\n      cvReshapeMatND( (arr), sizeof(*(header)), (header),         \\\n                      (new_cn), (new_dims), (new_sizes))\n\nCVAPI(CvMat*) cvReshape( const CvArr* arr, CvMat* header,\n                        int new_cn, int new_rows CV_DEFAULT(0) );\n\n/* Repeats source 2d array several times in both horizontal and\n   vertical direction to fill destination array */\nCVAPI(void) cvRepeat( const CvArr* src, CvArr* dst );\n\n/* Allocates array data */\nCVAPI(void)  cvCreateData( CvArr* arr );\n\n/* Releases array data */\nCVAPI(void)  cvReleaseData( CvArr* arr );\n\n/* Attaches user data to the array header. The step is reffered to\n   the pre-last dimension. That is, all the planes of the array\n   must be joint (w/o gaps) */\nCVAPI(void)  cvSetData( CvArr* arr, void* data, int step );\n\n/* Retrieves raw data of CvMat, IplImage or CvMatND.\n   In the latter case the function raises an error if\n   the array can not be represented as a matrix */\nCVAPI(void) cvGetRawData( const CvArr* arr, uchar** data,\n                         int* step CV_DEFAULT(NULL),\n                         CvSize* roi_size CV_DEFAULT(NULL));\n\n/* Returns width and height of array in elements */\nCVAPI(CvSize) cvGetSize( const CvArr* arr );\n\n/* Copies source array to destination array */\nCVAPI(void)  cvCopy( const CvArr* src, CvArr* dst,\n                     const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Sets all or \"masked\" elements of input array\n   to the same value*/\nCVAPI(void)  cvSet( CvArr* arr, CvScalar value,\n                    const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Clears all the array elements (sets them to 0) */\nCVAPI(void)  cvSetZero( CvArr* arr );\n#define cvZero  cvSetZero\n\n\n/* Splits a multi-channel array into the set of single-channel arrays or\n   extracts particular [color] plane */\nCVAPI(void)  cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1,\n                      CvArr* dst2, CvArr* dst3 );\n\n/* Merges a set of single-channel arrays into the single multi-channel array\n   or inserts one particular [color] plane to the array */\nCVAPI(void)  cvMerge( const CvArr* src0, const CvArr* src1,\n                      const CvArr* src2, const CvArr* src3,\n                      CvArr* dst );\n\n/* Copies several channels from input arrays to\n   certain channels of output arrays */\nCVAPI(void)  cvMixChannels( const CvArr** src, int src_count,\n                            CvArr** dst, int dst_count,\n                            const int* from_to, int pair_count );\n\n/* Performs linear transformation on every source array element:\n   dst(x,y,c) = scale*src(x,y,c)+shift.\n   Arbitrary combination of input and output array depths are allowed\n   (number of channels must be the same), thus the function can be used\n   for type conversion */\nCVAPI(void)  cvConvertScale( const CvArr* src, CvArr* dst,\n                             double scale CV_DEFAULT(1),\n                             double shift CV_DEFAULT(0) );\n#define cvCvtScale cvConvertScale\n#define cvScale  cvConvertScale\n#define cvConvert( src, dst )  cvConvertScale( (src), (dst), 1, 0 )\n\n\n/* Performs linear transformation on every source array element,\n   stores absolute value of the result:\n   dst(x,y,c) = abs(scale*src(x,y,c)+shift).\n   destination array must have 8u type.\n   In other cases one may use cvConvertScale + cvAbsDiffS */\nCVAPI(void)  cvConvertScaleAbs( const CvArr* src, CvArr* dst,\n                                double scale CV_DEFAULT(1),\n                                double shift CV_DEFAULT(0) );\n#define cvCvtScaleAbs  cvConvertScaleAbs\n\n\n/* checks termination criteria validity and\n   sets eps to default_eps (if it is not set),\n   max_iter to default_max_iters (if it is not set)\n*/\nCVAPI(CvTermCriteria) cvCheckTermCriteria( CvTermCriteria criteria,\n                                           double default_eps,\n                                           int default_max_iters );\n\n/****************************************************************************************\\\n*                   Arithmetic, logic and comparison operations                          *\n\\****************************************************************************************/\n\n/* dst(mask) = src1(mask) + src2(mask) */\nCVAPI(void)  cvAdd( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                    const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(mask) = src(mask) + value */\nCVAPI(void)  cvAddS( const CvArr* src, CvScalar value, CvArr* dst,\n                     const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(mask) = src1(mask) - src2(mask) */\nCVAPI(void)  cvSub( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                    const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(mask) = src(mask) - value = src(mask) + (-value) */\nCV_INLINE  void  cvSubS( const CvArr* src, CvScalar value, CvArr* dst,\n                         const CvArr* mask CV_DEFAULT(NULL))\n{\n    cvAddS( src, cvScalar( -value.val[0], -value.val[1], -value.val[2], -value.val[3]),\n            dst, mask );\n}\n\n/* dst(mask) = value - src(mask) */\nCVAPI(void)  cvSubRS( const CvArr* src, CvScalar value, CvArr* dst,\n                      const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src1(idx) * src2(idx) * scale\n   (scaled element-wise multiplication of 2 arrays) */\nCVAPI(void)  cvMul( const CvArr* src1, const CvArr* src2,\n                    CvArr* dst, double scale CV_DEFAULT(1) );\n\n/* element-wise division/inversion with scaling:\n    dst(idx) = src1(idx) * scale / src2(idx)\n    or dst(idx) = scale / src2(idx) if src1 == 0 */\nCVAPI(void)  cvDiv( const CvArr* src1, const CvArr* src2,\n                    CvArr* dst, double scale CV_DEFAULT(1));\n\n/* dst = src1 * scale + src2 */\nCVAPI(void)  cvScaleAdd( const CvArr* src1, CvScalar scale,\n                         const CvArr* src2, CvArr* dst );\n#define cvAXPY( A, real_scalar, B, C ) cvScaleAdd(A, cvRealScalar(real_scalar), B, C)\n\n/* dst = src1 * alpha + src2 * beta + gamma */\nCVAPI(void)  cvAddWeighted( const CvArr* src1, double alpha,\n                            const CvArr* src2, double beta,\n                            double gamma, CvArr* dst );\n\n/* result = sum_i(src1(i) * src2(i)) (results for all channels are accumulated together) */\nCVAPI(double)  cvDotProduct( const CvArr* src1, const CvArr* src2 );\n\n/* dst(idx) = src1(idx) & src2(idx) */\nCVAPI(void) cvAnd( const CvArr* src1, const CvArr* src2,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src(idx) & value */\nCVAPI(void) cvAndS( const CvArr* src, CvScalar value,\n                   CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src1(idx) | src2(idx) */\nCVAPI(void) cvOr( const CvArr* src1, const CvArr* src2,\n                 CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src(idx) | value */\nCVAPI(void) cvOrS( const CvArr* src, CvScalar value,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src1(idx) ^ src2(idx) */\nCVAPI(void) cvXor( const CvArr* src1, const CvArr* src2,\n                  CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = src(idx) ^ value */\nCVAPI(void) cvXorS( const CvArr* src, CvScalar value,\n                   CvArr* dst, const CvArr* mask CV_DEFAULT(NULL));\n\n/* dst(idx) = ~src(idx) */\nCVAPI(void) cvNot( const CvArr* src, CvArr* dst );\n\n/* dst(idx) = lower(idx) <= src(idx) < upper(idx) */\nCVAPI(void) cvInRange( const CvArr* src, const CvArr* lower,\n                      const CvArr* upper, CvArr* dst );\n\n/* dst(idx) = lower <= src(idx) < upper */\nCVAPI(void) cvInRangeS( const CvArr* src, CvScalar lower,\n                       CvScalar upper, CvArr* dst );\n\n#define CV_CMP_EQ   0\n#define CV_CMP_GT   1\n#define CV_CMP_GE   2\n#define CV_CMP_LT   3\n#define CV_CMP_LE   4\n#define CV_CMP_NE   5\n\n/* The comparison operation support single-channel arrays only.\n   Destination image should be 8uC1 or 8sC1 */\n\n/* dst(idx) = src1(idx) _cmp_op_ src2(idx) */\nCVAPI(void) cvCmp( const CvArr* src1, const CvArr* src2, CvArr* dst, int cmp_op );\n\n/* dst(idx) = src1(idx) _cmp_op_ value */\nCVAPI(void) cvCmpS( const CvArr* src, double value, CvArr* dst, int cmp_op );\n\n/* dst(idx) = min(src1(idx),src2(idx)) */\nCVAPI(void) cvMin( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/* dst(idx) = max(src1(idx),src2(idx)) */\nCVAPI(void) cvMax( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/* dst(idx) = min(src(idx),value) */\nCVAPI(void) cvMinS( const CvArr* src, double value, CvArr* dst );\n\n/* dst(idx) = max(src(idx),value) */\nCVAPI(void) cvMaxS( const CvArr* src, double value, CvArr* dst );\n\n/* dst(x,y,c) = abs(src1(x,y,c) - src2(x,y,c)) */\nCVAPI(void) cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/* dst(x,y,c) = abs(src(x,y,c) - value(c)) */\nCVAPI(void) cvAbsDiffS( const CvArr* src, CvArr* dst, CvScalar value );\n#define cvAbs( src, dst ) cvAbsDiffS( (src), (dst), cvScalarAll(0))\n\n/****************************************************************************************\\\n*                                Math operations                                         *\n\\****************************************************************************************/\n\n/* Does cartesian->polar coordinates conversion.\n   Either of output components (magnitude or angle) is optional */\nCVAPI(void)  cvCartToPolar( const CvArr* x, const CvArr* y,\n                            CvArr* magnitude, CvArr* angle CV_DEFAULT(NULL),\n                            int angle_in_degrees CV_DEFAULT(0));\n\n/* Does polar->cartesian coordinates conversion.\n   Either of output components (magnitude or angle) is optional.\n   If magnitude is missing it is assumed to be all 1's */\nCVAPI(void)  cvPolarToCart( const CvArr* magnitude, const CvArr* angle,\n                            CvArr* x, CvArr* y,\n                            int angle_in_degrees CV_DEFAULT(0));\n\n/* Does powering: dst(idx) = src(idx)^power */\nCVAPI(void)  cvPow( const CvArr* src, CvArr* dst, double power );\n\n/* Does exponention: dst(idx) = exp(src(idx)).\n   Overflow is not handled yet. Underflow is handled.\n   Maximal relative error is ~7e-6 for single-precision input */\nCVAPI(void)  cvExp( const CvArr* src, CvArr* dst );\n\n/* Calculates natural logarithms: dst(idx) = log(abs(src(idx))).\n   Logarithm of 0 gives large negative number(~-700)\n   Maximal relative error is ~3e-7 for single-precision output\n*/\nCVAPI(void)  cvLog( const CvArr* src, CvArr* dst );\n\n/* Fast arctangent calculation */\nCVAPI(float) cvFastArctan( float y, float x );\n\n/* Fast cubic root calculation */\nCVAPI(float)  cvCbrt( float value );\n\n/* Checks array values for NaNs, Infs or simply for too large numbers\n   (if CV_CHECK_RANGE is set). If CV_CHECK_QUIET is set,\n   no runtime errors is raised (function returns zero value in case of \"bad\" values).\n   Otherwise cvError is called */\n#define  CV_CHECK_RANGE    1\n#define  CV_CHECK_QUIET    2\nCVAPI(int)  cvCheckArr( const CvArr* arr, int flags CV_DEFAULT(0),\n                        double min_val CV_DEFAULT(0), double max_val CV_DEFAULT(0));\n#define cvCheckArray cvCheckArr\n\n#define CV_RAND_UNI      0\n#define CV_RAND_NORMAL   1\nCVAPI(void) cvRandArr( CvRNG* rng, CvArr* arr, int dist_type,\n                      CvScalar param1, CvScalar param2 );\n\nCVAPI(void) cvRandShuffle( CvArr* mat, CvRNG* rng,\n                           double iter_factor CV_DEFAULT(1.));\n\n#define CV_SORT_EVERY_ROW 0\n#define CV_SORT_EVERY_COLUMN 1\n#define CV_SORT_ASCENDING 0\n#define CV_SORT_DESCENDING 16\n\nCVAPI(void) cvSort( const CvArr* src, CvArr* dst CV_DEFAULT(NULL),\n                    CvArr* idxmat CV_DEFAULT(NULL),\n                    int flags CV_DEFAULT(0));\n\n/* Finds real roots of a cubic equation */\nCVAPI(int) cvSolveCubic( const CvMat* coeffs, CvMat* roots );\n\n/* Finds all real and complex roots of a polynomial equation */\nCVAPI(void) cvSolvePoly(const CvMat* coeffs, CvMat *roots2,\n      int maxiter CV_DEFAULT(20), int fig CV_DEFAULT(100));\n\n/****************************************************************************************\\\n*                                Matrix operations                                       *\n\\****************************************************************************************/\n\n/* Calculates cross product of two 3d vectors */\nCVAPI(void)  cvCrossProduct( const CvArr* src1, const CvArr* src2, CvArr* dst );\n\n/* Matrix transform: dst = A*B + C, C is optional */\n#define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( (src1), (src2), 1., (src3), 1., (dst), 0 )\n#define cvMatMul( src1, src2, dst )  cvMatMulAdd( (src1), (src2), NULL, (dst))\n\n#define CV_GEMM_A_T 1\n#define CV_GEMM_B_T 2\n#define CV_GEMM_C_T 4\n/* Extended matrix transform:\n   dst = alpha*op(A)*op(B) + beta*op(C), where op(X) is X or X^T */\nCVAPI(void)  cvGEMM( const CvArr* src1, const CvArr* src2, double alpha,\n                     const CvArr* src3, double beta, CvArr* dst,\n                     int tABC CV_DEFAULT(0));\n#define cvMatMulAddEx cvGEMM\n\n/* Transforms each element of source array and stores\n   resultant vectors in destination array */\nCVAPI(void)  cvTransform( const CvArr* src, CvArr* dst,\n                          const CvMat* transmat,\n                          const CvMat* shiftvec CV_DEFAULT(NULL));\n#define cvMatMulAddS cvTransform\n\n/* Does perspective transform on every element of input array */\nCVAPI(void)  cvPerspectiveTransform( const CvArr* src, CvArr* dst,\n                                     const CvMat* mat );\n\n/* Calculates (A-delta)*(A-delta)^T (order=0) or (A-delta)^T*(A-delta) (order=1) */\nCVAPI(void) cvMulTransposed( const CvArr* src, CvArr* dst, int order,\n                             const CvArr* delta CV_DEFAULT(NULL),\n                             double scale CV_DEFAULT(1.) );\n\n/* Tranposes matrix. Square matrices can be transposed in-place */\nCVAPI(void)  cvTranspose( const CvArr* src, CvArr* dst );\n#define cvT cvTranspose\n\n/* Completes the symmetric matrix from the lower (LtoR=0) or from the upper (LtoR!=0) part */\nCVAPI(void)  cvCompleteSymm( CvMat* matrix, int LtoR CV_DEFAULT(0) );\n\n/* Mirror array data around horizontal (flip=0),\n   vertical (flip=1) or both(flip=-1) axises:\n   cvFlip(src) flips images vertically and sequences horizontally (inplace) */\nCVAPI(void)  cvFlip( const CvArr* src, CvArr* dst CV_DEFAULT(NULL),\n                     int flip_mode CV_DEFAULT(0));\n#define cvMirror cvFlip\n\n\n#define CV_SVD_MODIFY_A   1\n#define CV_SVD_U_T        2\n#define CV_SVD_V_T        4\n\n/* Performs Singular Value Decomposition of a matrix */\nCVAPI(void)   cvSVD( CvArr* A, CvArr* W, CvArr* U CV_DEFAULT(NULL),\n                     CvArr* V CV_DEFAULT(NULL), int flags CV_DEFAULT(0));\n\n/* Performs Singular Value Back Substitution (solves A*X = B):\n   flags must be the same as in cvSVD */\nCVAPI(void)   cvSVBkSb( const CvArr* W, const CvArr* U,\n                        const CvArr* V, const CvArr* B,\n                        CvArr* X, int flags );\n\n#define CV_LU  0\n#define CV_SVD 1\n#define CV_SVD_SYM 2\n#define CV_CHOLESKY 3\n#define CV_QR  4\n#define CV_NORMAL 16\n\n/* Inverts matrix */\nCVAPI(double)  cvInvert( const CvArr* src, CvArr* dst,\n                         int method CV_DEFAULT(CV_LU));\n#define cvInv cvInvert\n\n/* Solves linear system (src1)*(dst) = (src2)\n   (returns 0 if src1 is a singular and CV_LU method is used) */\nCVAPI(int)  cvSolve( const CvArr* src1, const CvArr* src2, CvArr* dst,\n                     int method CV_DEFAULT(CV_LU));\n\n/* Calculates determinant of input matrix */\nCVAPI(double) cvDet( const CvArr* mat );\n\n/* Calculates trace of the matrix (sum of elements on the main diagonal) */\nCVAPI(CvScalar) cvTrace( const CvArr* mat );\n\n/* Finds eigen values and vectors of a symmetric matrix */\nCVAPI(void)  cvEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,\n                        double eps CV_DEFAULT(0),\n                        int lowindex CV_DEFAULT(-1),\n                        int highindex CV_DEFAULT(-1));\n\n///* Finds selected eigen values and vectors of a symmetric matrix */\n//CVAPI(void)  cvSelectedEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,\n//                                int lowindex, int highindex );\n\n/* Makes an identity matrix (mat_ij = i == j) */\nCVAPI(void)  cvSetIdentity( CvArr* mat, CvScalar value CV_DEFAULT(cvRealScalar(1)) );\n\n/* Fills matrix with given range of numbers */\nCVAPI(CvArr*)  cvRange( CvArr* mat, double start, double end );\n\n/* Calculates covariation matrix for a set of vectors */\n/* transpose([v1-avg, v2-avg,...]) * [v1-avg,v2-avg,...] */\n#define CV_COVAR_SCRAMBLED 0\n\n/* [v1-avg, v2-avg,...] * transpose([v1-avg,v2-avg,...]) */\n#define CV_COVAR_NORMAL    1\n\n/* do not calc average (i.e. mean vector) - use the input vector instead\n   (useful for calculating covariance matrix by parts) */\n#define CV_COVAR_USE_AVG   2\n\n/* scale the covariance matrix coefficients by number of the vectors */\n#define CV_COVAR_SCALE     4\n\n/* all the input vectors are stored in a single matrix, as its rows */\n#define CV_COVAR_ROWS      8\n\n/* all the input vectors are stored in a single matrix, as its columns */\n#define CV_COVAR_COLS     16\n\nCVAPI(void)  cvCalcCovarMatrix( const CvArr** vects, int count,\n                                CvArr* cov_mat, CvArr* avg, int flags );\n\n#define CV_PCA_DATA_AS_ROW 0\n#define CV_PCA_DATA_AS_COL 1\n#define CV_PCA_USE_AVG 2\nCVAPI(void)  cvCalcPCA( const CvArr* data, CvArr* mean,\n                        CvArr* eigenvals, CvArr* eigenvects, int flags );\n\nCVAPI(void)  cvProjectPCA( const CvArr* data, const CvArr* mean,\n                           const CvArr* eigenvects, CvArr* result );\n\nCVAPI(void)  cvBackProjectPCA( const CvArr* proj, const CvArr* mean,\n                               const CvArr* eigenvects, CvArr* result );\n\n/* Calculates Mahalanobis(weighted) distance */\nCVAPI(double)  cvMahalanobis( const CvArr* vec1, const CvArr* vec2, const CvArr* mat );\n#define cvMahalonobis  cvMahalanobis\n\n/****************************************************************************************\\\n*                                    Array Statistics                                    *\n\\****************************************************************************************/\n\n/* Finds sum of array elements */\nCVAPI(CvScalar)  cvSum( const CvArr* arr );\n\n/* Calculates number of non-zero pixels */\nCVAPI(int)  cvCountNonZero( const CvArr* arr );\n\n/* Calculates mean value of array elements */\nCVAPI(CvScalar)  cvAvg( const CvArr* arr, const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Calculates mean and standard deviation of pixel values */\nCVAPI(void)  cvAvgSdv( const CvArr* arr, CvScalar* mean, CvScalar* std_dev,\n                       const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Finds global minimum, maximum and their positions */\nCVAPI(void)  cvMinMaxLoc( const CvArr* arr, double* min_val, double* max_val,\n                          CvPoint* min_loc CV_DEFAULT(NULL),\n                          CvPoint* max_loc CV_DEFAULT(NULL),\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n/* types of array norm */\n#define CV_C            1\n#define CV_L1           2\n#define CV_L2           4\n#define CV_NORM_MASK    7\n#define CV_RELATIVE     8\n#define CV_DIFF         16\n#define CV_MINMAX       32\n\n#define CV_DIFF_C       (CV_DIFF | CV_C)\n#define CV_DIFF_L1      (CV_DIFF | CV_L1)\n#define CV_DIFF_L2      (CV_DIFF | CV_L2)\n#define CV_RELATIVE_C   (CV_RELATIVE | CV_C)\n#define CV_RELATIVE_L1  (CV_RELATIVE | CV_L1)\n#define CV_RELATIVE_L2  (CV_RELATIVE | CV_L2)\n\n/* Finds norm, difference norm or relative difference norm for an array (or two arrays) */\nCVAPI(double)  cvNorm( const CvArr* arr1, const CvArr* arr2 CV_DEFAULT(NULL),\n                       int norm_type CV_DEFAULT(CV_L2),\n                       const CvArr* mask CV_DEFAULT(NULL) );\n\nCVAPI(void)  cvNormalize( const CvArr* src, CvArr* dst,\n                          double a CV_DEFAULT(1.), double b CV_DEFAULT(0.),\n                          int norm_type CV_DEFAULT(CV_L2),\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n\n#define CV_REDUCE_SUM 0\n#define CV_REDUCE_AVG 1\n#define CV_REDUCE_MAX 2\n#define CV_REDUCE_MIN 3\n\nCVAPI(void)  cvReduce( const CvArr* src, CvArr* dst, int dim CV_DEFAULT(-1),\n                       int op CV_DEFAULT(CV_REDUCE_SUM) );\n\n/****************************************************************************************\\\n*                      Discrete Linear Transforms and Related Functions                  *\n\\****************************************************************************************/\n\n#define CV_DXT_FORWARD  0\n#define CV_DXT_INVERSE  1\n#define CV_DXT_SCALE    2 /* divide result by size of array */\n#define CV_DXT_INV_SCALE (CV_DXT_INVERSE + CV_DXT_SCALE)\n#define CV_DXT_INVERSE_SCALE CV_DXT_INV_SCALE\n#define CV_DXT_ROWS     4 /* transform each row individually */\n#define CV_DXT_MUL_CONJ 8 /* conjugate the second argument of cvMulSpectrums */\n\n/* Discrete Fourier Transform:\n    complex->complex,\n    real->ccs (forward),\n    ccs->real (inverse) */\nCVAPI(void)  cvDFT( const CvArr* src, CvArr* dst, int flags,\n                    int nonzero_rows CV_DEFAULT(0) );\n#define cvFFT cvDFT\n\n/* Multiply results of DFTs: DFT(X)*DFT(Y) or DFT(X)*conj(DFT(Y)) */\nCVAPI(void)  cvMulSpectrums( const CvArr* src1, const CvArr* src2,\n                             CvArr* dst, int flags );\n\n/* Finds optimal DFT vector size >= size0 */\nCVAPI(int)  cvGetOptimalDFTSize( int size0 );\n\n/* Discrete Cosine Transform */\nCVAPI(void)  cvDCT( const CvArr* src, CvArr* dst, int flags );\n\n/****************************************************************************************\\\n*                              Dynamic data structures                                   *\n\\****************************************************************************************/\n\n/* Calculates length of sequence slice (with support of negative indices). */\nCVAPI(int) cvSliceLength( CvSlice slice, const CvSeq* seq );\n\n\n/* Creates new memory storage.\n   block_size == 0 means that default,\n   somewhat optimal size, is used (currently, it is 64K) */\nCVAPI(CvMemStorage*)  cvCreateMemStorage( int block_size CV_DEFAULT(0));\n\n\n/* Creates a memory storage that will borrow memory blocks from parent storage */\nCVAPI(CvMemStorage*)  cvCreateChildMemStorage( CvMemStorage* parent );\n\n\n/* Releases memory storage. All the children of a parent must be released before\n   the parent. A child storage returns all the blocks to parent when it is released */\nCVAPI(void)  cvReleaseMemStorage( CvMemStorage** storage );\n\n\n/* Clears memory storage. This is the only way(!!!) (besides cvRestoreMemStoragePos)\n   to reuse memory allocated for the storage - cvClearSeq,cvClearSet ...\n   do not free any memory.\n   A child storage returns all the blocks to the parent when it is cleared */\nCVAPI(void)  cvClearMemStorage( CvMemStorage* storage );\n\n/* Remember a storage \"free memory\" position */\nCVAPI(void)  cvSaveMemStoragePos( const CvMemStorage* storage, CvMemStoragePos* pos );\n\n/* Restore a storage \"free memory\" position */\nCVAPI(void)  cvRestoreMemStoragePos( CvMemStorage* storage, CvMemStoragePos* pos );\n\n/* Allocates continuous buffer of the specified size in the storage */\nCVAPI(void*) cvMemStorageAlloc( CvMemStorage* storage, size_t size );\n\n/* Allocates string in memory storage */\nCVAPI(CvString) cvMemStorageAllocString( CvMemStorage* storage, const char* ptr,\n                                         int len CV_DEFAULT(-1) );\n\n/* Creates new empty sequence that will reside in the specified storage */\nCVAPI(CvSeq*)  cvCreateSeq( int seq_flags, size_t header_size,\n                            size_t elem_size, CvMemStorage* storage );\n\n/* Changes default size (granularity) of sequence blocks.\n   The default size is ~1Kbyte */\nCVAPI(void)  cvSetSeqBlockSize( CvSeq* seq, int delta_elems );\n\n\n/* Adds new element to the end of sequence. Returns pointer to the element */\nCVAPI(schar*)  cvSeqPush( CvSeq* seq, const void* element CV_DEFAULT(NULL));\n\n\n/* Adds new element to the beginning of sequence. Returns pointer to it */\nCVAPI(schar*)  cvSeqPushFront( CvSeq* seq, const void* element CV_DEFAULT(NULL));\n\n\n/* Removes the last element from sequence and optionally saves it */\nCVAPI(void)  cvSeqPop( CvSeq* seq, void* element CV_DEFAULT(NULL));\n\n\n/* Removes the first element from sequence and optioanally saves it */\nCVAPI(void)  cvSeqPopFront( CvSeq* seq, void* element CV_DEFAULT(NULL));\n\n\n#define CV_FRONT 1\n#define CV_BACK 0\n/* Adds several new elements to the end of sequence */\nCVAPI(void)  cvSeqPushMulti( CvSeq* seq, const void* elements,\n                             int count, int in_front CV_DEFAULT(0) );\n\n/* Removes several elements from the end of sequence and optionally saves them */\nCVAPI(void)  cvSeqPopMulti( CvSeq* seq, void* elements,\n                            int count, int in_front CV_DEFAULT(0) );\n\n/* Inserts a new element in the middle of sequence.\n   cvSeqInsert(seq,0,elem) == cvSeqPushFront(seq,elem) */\nCVAPI(schar*)  cvSeqInsert( CvSeq* seq, int before_index,\n                            const void* element CV_DEFAULT(NULL));\n\n/* Removes specified sequence element */\nCVAPI(void)  cvSeqRemove( CvSeq* seq, int index );\n\n\n/* Removes all the elements from the sequence. The freed memory\n   can be reused later only by the same sequence unless cvClearMemStorage\n   or cvRestoreMemStoragePos is called */\nCVAPI(void)  cvClearSeq( CvSeq* seq );\n\n\n/* Retrieves pointer to specified sequence element.\n   Negative indices are supported and mean counting from the end\n   (e.g -1 means the last sequence element) */\nCVAPI(schar*)  cvGetSeqElem( const CvSeq* seq, int index );\n\n/* Calculates index of the specified sequence element.\n   Returns -1 if element does not belong to the sequence */\nCVAPI(int)  cvSeqElemIdx( const CvSeq* seq, const void* element,\n                         CvSeqBlock** block CV_DEFAULT(NULL) );\n\n/* Initializes sequence writer. The new elements will be added to the end of sequence */\nCVAPI(void)  cvStartAppendToSeq( CvSeq* seq, CvSeqWriter* writer );\n\n\n/* Combination of cvCreateSeq and cvStartAppendToSeq */\nCVAPI(void)  cvStartWriteSeq( int seq_flags, int header_size,\n                              int elem_size, CvMemStorage* storage,\n                              CvSeqWriter* writer );\n\n/* Closes sequence writer, updates sequence header and returns pointer\n   to the resultant sequence\n   (which may be useful if the sequence was created using cvStartWriteSeq))\n*/\nCVAPI(CvSeq*)  cvEndWriteSeq( CvSeqWriter* writer );\n\n\n/* Updates sequence header. May be useful to get access to some of previously\n   written elements via cvGetSeqElem or sequence reader */\nCVAPI(void)   cvFlushSeqWriter( CvSeqWriter* writer );\n\n\n/* Initializes sequence reader.\n   The sequence can be read in forward or backward direction */\nCVAPI(void) cvStartReadSeq( const CvSeq* seq, CvSeqReader* reader,\n                           int reverse CV_DEFAULT(0) );\n\n\n/* Returns current sequence reader position (currently observed sequence element) */\nCVAPI(int)  cvGetSeqReaderPos( CvSeqReader* reader );\n\n\n/* Changes sequence reader position. It may seek to an absolute or\n   to relative to the current position */\nCVAPI(void)   cvSetSeqReaderPos( CvSeqReader* reader, int index,\n                                 int is_relative CV_DEFAULT(0));\n\n/* Copies sequence content to a continuous piece of memory */\nCVAPI(void*)  cvCvtSeqToArray( const CvSeq* seq, void* elements,\n                               CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ) );\n\n/* Creates sequence header for array.\n   After that all the operations on sequences that do not alter the content\n   can be applied to the resultant sequence */\nCVAPI(CvSeq*) cvMakeSeqHeaderForArray( int seq_type, int header_size,\n                                       int elem_size, void* elements, int total,\n                                       CvSeq* seq, CvSeqBlock* block );\n\n/* Extracts sequence slice (with or without copying sequence elements) */\nCVAPI(CvSeq*) cvSeqSlice( const CvSeq* seq, CvSlice slice,\n                         CvMemStorage* storage CV_DEFAULT(NULL),\n                         int copy_data CV_DEFAULT(0));\n\nCV_INLINE CvSeq* cvCloneSeq( const CvSeq* seq, CvMemStorage* storage CV_DEFAULT(NULL))\n{\n    return cvSeqSlice( seq, CV_WHOLE_SEQ, storage, 1 );\n}\n\n/* Removes sequence slice */\nCVAPI(void)  cvSeqRemoveSlice( CvSeq* seq, CvSlice slice );\n\n/* Inserts a sequence or array into another sequence */\nCVAPI(void)  cvSeqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr );\n\n/* a < b ? -1 : a > b ? 1 : 0 */\ntypedef int (CV_CDECL* CvCmpFunc)(const void* a, const void* b, void* userdata );\n\n/* Sorts sequence in-place given element comparison function */\nCVAPI(void) cvSeqSort( CvSeq* seq, CvCmpFunc func, void* userdata CV_DEFAULT(NULL) );\n\n/* Finds element in a [sorted] sequence */\nCVAPI(schar*) cvSeqSearch( CvSeq* seq, const void* elem, CvCmpFunc func,\n                           int is_sorted, int* elem_idx,\n                           void* userdata CV_DEFAULT(NULL) );\n\n/* Reverses order of sequence elements in-place */\nCVAPI(void) cvSeqInvert( CvSeq* seq );\n\n/* Splits sequence into one or more equivalence classes using the specified criteria */\nCVAPI(int)  cvSeqPartition( const CvSeq* seq, CvMemStorage* storage,\n                            CvSeq** labels, CvCmpFunc is_equal, void* userdata );\n\n/************ Internal sequence functions ************/\nCVAPI(void)  cvChangeSeqBlock( void* reader, int direction );\nCVAPI(void)  cvCreateSeqBlock( CvSeqWriter* writer );\n\n\n/* Creates a new set */\nCVAPI(CvSet*)  cvCreateSet( int set_flags, int header_size,\n                            int elem_size, CvMemStorage* storage );\n\n/* Adds new element to the set and returns pointer to it */\nCVAPI(int)  cvSetAdd( CvSet* set_header, CvSetElem* elem CV_DEFAULT(NULL),\n                      CvSetElem** inserted_elem CV_DEFAULT(NULL) );\n\n/* Fast variant of cvSetAdd */\nCV_INLINE  CvSetElem* cvSetNew( CvSet* set_header )\n{\n    CvSetElem* elem = set_header->free_elems;\n    if( elem )\n    {\n        set_header->free_elems = elem->next_free;\n        elem->flags = elem->flags & CV_SET_ELEM_IDX_MASK;\n        set_header->active_count++;\n    }\n    else\n        cvSetAdd( set_header, NULL, (CvSetElem**)&elem );\n    return elem;\n}\n\n/* Removes set element given its pointer */\nCV_INLINE  void cvSetRemoveByPtr( CvSet* set_header, void* elem )\n{\n    CvSetElem* _elem = (CvSetElem*)elem;\n    assert( _elem->flags >= 0 /*&& (elem->flags & CV_SET_ELEM_IDX_MASK) < set_header->total*/ );\n    _elem->next_free = set_header->free_elems;\n    _elem->flags = (_elem->flags & CV_SET_ELEM_IDX_MASK) | CV_SET_ELEM_FREE_FLAG;\n    set_header->free_elems = _elem;\n    set_header->active_count--;\n}\n\n/* Removes element from the set by its index  */\nCVAPI(void)   cvSetRemove( CvSet* set_header, int index );\n\n/* Returns a set element by index. If the element doesn't belong to the set,\n   NULL is returned */\nCV_INLINE CvSetElem* cvGetSetElem( const CvSet* set_header, int idx )\n{\n    CvSetElem* elem = (CvSetElem*)(void *)cvGetSeqElem( (CvSeq*)set_header, idx );\n    return elem && CV_IS_SET_ELEM( elem ) ? elem : 0;\n}\n\n/* Removes all the elements from the set */\nCVAPI(void)  cvClearSet( CvSet* set_header );\n\n/* Creates new graph */\nCVAPI(CvGraph*)  cvCreateGraph( int graph_flags, int header_size,\n                                int vtx_size, int edge_size,\n                                CvMemStorage* storage );\n\n/* Adds new vertex to the graph */\nCVAPI(int)  cvGraphAddVtx( CvGraph* graph, const CvGraphVtx* vtx CV_DEFAULT(NULL),\n                           CvGraphVtx** inserted_vtx CV_DEFAULT(NULL) );\n\n\n/* Removes vertex from the graph together with all incident edges */\nCVAPI(int)  cvGraphRemoveVtx( CvGraph* graph, int index );\nCVAPI(int)  cvGraphRemoveVtxByPtr( CvGraph* graph, CvGraphVtx* vtx );\n\n\n/* Link two vertices specifed by indices or pointers if they\n   are not connected or return pointer to already existing edge\n   connecting the vertices.\n   Functions return 1 if a new edge was created, 0 otherwise */\nCVAPI(int)  cvGraphAddEdge( CvGraph* graph,\n                            int start_idx, int end_idx,\n                            const CvGraphEdge* edge CV_DEFAULT(NULL),\n                            CvGraphEdge** inserted_edge CV_DEFAULT(NULL) );\n\nCVAPI(int)  cvGraphAddEdgeByPtr( CvGraph* graph,\n                               CvGraphVtx* start_vtx, CvGraphVtx* end_vtx,\n                               const CvGraphEdge* edge CV_DEFAULT(NULL),\n                               CvGraphEdge** inserted_edge CV_DEFAULT(NULL) );\n\n/* Remove edge connecting two vertices */\nCVAPI(void)  cvGraphRemoveEdge( CvGraph* graph, int start_idx, int end_idx );\nCVAPI(void)  cvGraphRemoveEdgeByPtr( CvGraph* graph, CvGraphVtx* start_vtx,\n                                     CvGraphVtx* end_vtx );\n\n/* Find edge connecting two vertices */\nCVAPI(CvGraphEdge*)  cvFindGraphEdge( const CvGraph* graph, int start_idx, int end_idx );\nCVAPI(CvGraphEdge*)  cvFindGraphEdgeByPtr( const CvGraph* graph,\n                                           const CvGraphVtx* start_vtx,\n                                           const CvGraphVtx* end_vtx );\n#define cvGraphFindEdge cvFindGraphEdge\n#define cvGraphFindEdgeByPtr cvFindGraphEdgeByPtr\n\n/* Remove all vertices and edges from the graph */\nCVAPI(void)  cvClearGraph( CvGraph* graph );\n\n\n/* Count number of edges incident to the vertex */\nCVAPI(int)  cvGraphVtxDegree( const CvGraph* graph, int vtx_idx );\nCVAPI(int)  cvGraphVtxDegreeByPtr( const CvGraph* graph, const CvGraphVtx* vtx );\n\n\n/* Retrieves graph vertex by given index */\n#define cvGetGraphVtx( graph, idx ) (CvGraphVtx*)cvGetSetElem((CvSet*)(graph), (idx))\n\n/* Retrieves index of a graph vertex given its pointer */\n#define cvGraphVtxIdx( graph, vtx ) ((vtx)->flags & CV_SET_ELEM_IDX_MASK)\n\n/* Retrieves index of a graph edge given its pointer */\n#define cvGraphEdgeIdx( graph, edge ) ((edge)->flags & CV_SET_ELEM_IDX_MASK)\n\n#define cvGraphGetVtxCount( graph ) ((graph)->active_count)\n#define cvGraphGetEdgeCount( graph ) ((graph)->edges->active_count)\n\n#define  CV_GRAPH_VERTEX        1\n#define  CV_GRAPH_TREE_EDGE     2\n#define  CV_GRAPH_BACK_EDGE     4\n#define  CV_GRAPH_FORWARD_EDGE  8\n#define  CV_GRAPH_CROSS_EDGE    16\n#define  CV_GRAPH_ANY_EDGE      30\n#define  CV_GRAPH_NEW_TREE      32\n#define  CV_GRAPH_BACKTRACKING  64\n#define  CV_GRAPH_OVER          -1\n\n#define  CV_GRAPH_ALL_ITEMS    -1\n\n/* flags for graph vertices and edges */\n#define  CV_GRAPH_ITEM_VISITED_FLAG  (1 << 30)\n#define  CV_IS_GRAPH_VERTEX_VISITED(vtx) \\\n    (((CvGraphVtx*)(vtx))->flags & CV_GRAPH_ITEM_VISITED_FLAG)\n#define  CV_IS_GRAPH_EDGE_VISITED(edge) \\\n    (((CvGraphEdge*)(edge))->flags & CV_GRAPH_ITEM_VISITED_FLAG)\n#define  CV_GRAPH_SEARCH_TREE_NODE_FLAG   (1 << 29)\n#define  CV_GRAPH_FORWARD_EDGE_FLAG       (1 << 28)\n\ntypedef struct CvGraphScanner\n{\n    CvGraphVtx* vtx;       /* current graph vertex (or current edge origin) */\n    CvGraphVtx* dst;       /* current graph edge destination vertex */\n    CvGraphEdge* edge;     /* current edge */\n\n    CvGraph* graph;        /* the graph */\n    CvSeq*   stack;        /* the graph vertex stack */\n    int      index;        /* the lower bound of certainly visited vertices */\n    int      mask;         /* event mask */\n}\nCvGraphScanner;\n\n/* Creates new graph scanner. */\nCVAPI(CvGraphScanner*)  cvCreateGraphScanner( CvGraph* graph,\n                                             CvGraphVtx* vtx CV_DEFAULT(NULL),\n                                             int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS));\n\n/* Releases graph scanner. */\nCVAPI(void) cvReleaseGraphScanner( CvGraphScanner** scanner );\n\n/* Get next graph element */\nCVAPI(int)  cvNextGraphItem( CvGraphScanner* scanner );\n\n/* Creates a copy of graph */\nCVAPI(CvGraph*) cvCloneGraph( const CvGraph* graph, CvMemStorage* storage );\n\n/****************************************************************************************\\\n*                                     Drawing                                            *\n\\****************************************************************************************/\n\n/****************************************************************************************\\\n*       Drawing functions work with images/matrices of arbitrary type.                   *\n*       For color images the channel order is BGR[A]                                     *\n*       Antialiasing is supported only for 8-bit image now.                              *\n*       All the functions include parameter color that means rgb value (that may be      *\n*       constructed with CV_RGB macro) for color images and brightness                   *\n*       for grayscale images.                                                            *\n*       If a drawn figure is partially or completely outside of the image, it is clipped.*\n\\****************************************************************************************/\n\n#define CV_RGB( r, g, b )  cvScalar( (b), (g), (r), 0 )\n#define CV_FILLED -1\n\n#define CV_AA 16\n\n/* Draws 4-connected, 8-connected or antialiased line segment connecting two points */\nCVAPI(void)  cvLine( CvArr* img, CvPoint pt1, CvPoint pt2,\n                     CvScalar color, int thickness CV_DEFAULT(1),\n                     int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n/* Draws a rectangle given two opposite corners of the rectangle (pt1 & pt2),\n   if thickness<0 (e.g. thickness == CV_FILLED), the filled box is drawn */\nCVAPI(void)  cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2,\n                          CvScalar color, int thickness CV_DEFAULT(1),\n                          int line_type CV_DEFAULT(8),\n                          int shift CV_DEFAULT(0));\n\n/* Draws a rectangle specified by a CvRect structure */\nCVAPI(void)  cvRectangleR( CvArr* img, CvRect r,\n                           CvScalar color, int thickness CV_DEFAULT(1),\n                           int line_type CV_DEFAULT(8),\n                           int shift CV_DEFAULT(0));\n\n\n/* Draws a circle with specified center and radius.\n   Thickness works in the same way as with cvRectangle */\nCVAPI(void)  cvCircle( CvArr* img, CvPoint center, int radius,\n                       CvScalar color, int thickness CV_DEFAULT(1),\n                       int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\n/* Draws ellipse outline, filled ellipse, elliptic arc or filled elliptic sector,\n   depending on <thickness>, <start_angle> and <end_angle> parameters. The resultant figure\n   is rotated by <angle>. All the angles are in degrees */\nCVAPI(void)  cvEllipse( CvArr* img, CvPoint center, CvSize axes,\n                        double angle, double start_angle, double end_angle,\n                        CvScalar color, int thickness CV_DEFAULT(1),\n                        int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\nCV_INLINE  void  cvEllipseBox( CvArr* img, CvBox2D box, CvScalar color,\n                               int thickness CV_DEFAULT(1),\n                               int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) )\n{\n    CvSize axes;\n    axes.width = cvRound(box.size.width*0.5);\n    axes.height = cvRound(box.size.height*0.5);\n\n    cvEllipse( img, cvPointFrom32f( box.center ), axes, box.angle,\n               0, 360, color, thickness, line_type, shift );\n}\n\n/* Fills convex or monotonous polygon. */\nCVAPI(void)  cvFillConvexPoly( CvArr* img, const CvPoint* pts, int npts, CvScalar color,\n                               int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\n\n/* Fills an area bounded by one or more arbitrary polygons */\nCVAPI(void)  cvFillPoly( CvArr* img, CvPoint** pts, const int* npts,\n                         int contours, CvScalar color,\n                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n/* Draws one or more polygonal curves */\nCVAPI(void)  cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours,\n                         int is_closed, CvScalar color, int thickness CV_DEFAULT(1),\n                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\n\n#define cvDrawRect cvRectangle\n#define cvDrawLine cvLine\n#define cvDrawCircle cvCircle\n#define cvDrawEllipse cvEllipse\n#define cvDrawPolyLine cvPolyLine\n\n/* Clips the line segment connecting *pt1 and *pt2\n   by the rectangular window\n   (0<=x<img_size.width, 0<=y<img_size.height). */\nCVAPI(int) cvClipLine( CvSize img_size, CvPoint* pt1, CvPoint* pt2 );\n\n/* Initializes line iterator. Initially, line_iterator->ptr will point\n   to pt1 (or pt2, see left_to_right description) location in the image.\n   Returns the number of pixels on the line between the ending points. */\nCVAPI(int)  cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2,\n                                CvLineIterator* line_iterator,\n                                int connectivity CV_DEFAULT(8),\n                                int left_to_right CV_DEFAULT(0));\n\n/* Moves iterator to the next line point */\n#define CV_NEXT_LINE_POINT( line_iterator )                     \\\n{                                                               \\\n    int _line_iterator_mask = (line_iterator).err < 0 ? -1 : 0; \\\n    (line_iterator).err += (line_iterator).minus_delta +        \\\n        ((line_iterator).plus_delta & _line_iterator_mask);     \\\n    (line_iterator).ptr += (line_iterator).minus_step +         \\\n        ((line_iterator).plus_step & _line_iterator_mask);      \\\n}\n\n\n/* basic font types */\n#define CV_FONT_HERSHEY_SIMPLEX         0\n#define CV_FONT_HERSHEY_PLAIN           1\n#define CV_FONT_HERSHEY_DUPLEX          2\n#define CV_FONT_HERSHEY_COMPLEX         3\n#define CV_FONT_HERSHEY_TRIPLEX         4\n#define CV_FONT_HERSHEY_COMPLEX_SMALL   5\n#define CV_FONT_HERSHEY_SCRIPT_SIMPLEX  6\n#define CV_FONT_HERSHEY_SCRIPT_COMPLEX  7\n\n/* font flags */\n#define CV_FONT_ITALIC                 16\n\n#define CV_FONT_VECTOR0    CV_FONT_HERSHEY_SIMPLEX\n\n\n/* Font structure */\ntypedef struct CvFont\n{\n  const char* nameFont;   //Qt:nameFont\n  CvScalar color;       //Qt:ColorFont -> cvScalar(blue_component, green_component, red\\_component[, alpha_component])\n    int         font_face;    //Qt: bool italic         /* =CV_FONT_* */\n    const int*  ascii;      /* font data and metrics */\n    const int*  greek;\n    const int*  cyrillic;\n    float       hscale, vscale;\n    float       shear;      /* slope coefficient: 0 - normal, >0 - italic */\n    int         thickness;    //Qt: weight               /* letters thickness */\n    float       dx;       /* horizontal interval between letters */\n    int         line_type;    //Qt: PointSize\n}\nCvFont;\n\n/* Initializes font structure used further in cvPutText */\nCVAPI(void)  cvInitFont( CvFont* font, int font_face,\n                         double hscale, double vscale,\n                         double shear CV_DEFAULT(0),\n                         int thickness CV_DEFAULT(1),\n                         int line_type CV_DEFAULT(8));\n\nCV_INLINE CvFont cvFont( double scale, int thickness CV_DEFAULT(1) )\n{\n    CvFont font;\n    cvInitFont( &font, CV_FONT_HERSHEY_PLAIN, scale, scale, 0, thickness, CV_AA );\n    return font;\n}\n\n/* Renders text stroke with specified font and color at specified location.\n   CvFont should be initialized with cvInitFont */\nCVAPI(void)  cvPutText( CvArr* img, const char* text, CvPoint org,\n                        const CvFont* font, CvScalar color );\n\n/* Calculates bounding box of text stroke (useful for alignment) */\nCVAPI(void)  cvGetTextSize( const char* text_string, const CvFont* font,\n                            CvSize* text_size, int* baseline );\n\n\n\n/* Unpacks color value, if arrtype is CV_8UC?, <color> is treated as\n   packed color value, otherwise the first channels (depending on arrtype)\n   of destination scalar are set to the same value = <color> */\nCVAPI(CvScalar)  cvColorToScalar( double packed_color, int arrtype );\n\n/* Returns the polygon points which make up the given ellipse.  The ellipse is define by\n   the box of size 'axes' rotated 'angle' around the 'center'.  A partial sweep\n   of the ellipse arc can be done by spcifying arc_start and arc_end to be something\n   other than 0 and 360, respectively.  The input array 'pts' must be large enough to\n   hold the result.  The total number of points stored into 'pts' is returned by this\n   function. */\nCVAPI(int) cvEllipse2Poly( CvPoint center, CvSize axes,\n                 int angle, int arc_start, int arc_end, CvPoint * pts, int delta );\n\n/* Draws contour outlines or filled interiors on the image */\nCVAPI(void)  cvDrawContours( CvArr *img, CvSeq* contour,\n                             CvScalar external_color, CvScalar hole_color,\n                             int max_level, int thickness CV_DEFAULT(1),\n                             int line_type CV_DEFAULT(8),\n                             CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/* Does look-up transformation. Elements of the source array\n   (that should be 8uC1 or 8sC1) are used as indexes in lutarr 256-element table */\nCVAPI(void) cvLUT( const CvArr* src, CvArr* dst, const CvArr* lut );\n\n\n/******************* Iteration through the sequence tree *****************/\ntypedef struct CvTreeNodeIterator\n{\n    const void* node;\n    int level;\n    int max_level;\n}\nCvTreeNodeIterator;\n\nCVAPI(void) cvInitTreeNodeIterator( CvTreeNodeIterator* tree_iterator,\n                                   const void* first, int max_level );\nCVAPI(void*) cvNextTreeNode( CvTreeNodeIterator* tree_iterator );\nCVAPI(void*) cvPrevTreeNode( CvTreeNodeIterator* tree_iterator );\n\n/* Inserts sequence into tree with specified \"parent\" sequence.\n   If parent is equal to frame (e.g. the most external contour),\n   then added contour will have null pointer to parent. */\nCVAPI(void) cvInsertNodeIntoTree( void* node, void* parent, void* frame );\n\n/* Removes contour from tree (together with the contour children). */\nCVAPI(void) cvRemoveNodeFromTree( void* node, void* frame );\n\n/* Gathers pointers to all the sequences,\n   accessible from the <first>, to the single sequence */\nCVAPI(CvSeq*) cvTreeToNodeSeq( const void* first, int header_size,\n                              CvMemStorage* storage );\n\n/* The function implements the K-means algorithm for clustering an array of sample\n   vectors in a specified number of classes */\n#define CV_KMEANS_USE_INITIAL_LABELS    1\nCVAPI(int) cvKMeans2( const CvArr* samples, int cluster_count, CvArr* labels,\n                      CvTermCriteria termcrit, int attempts CV_DEFAULT(1),\n                      CvRNG* rng CV_DEFAULT(0), int flags CV_DEFAULT(0),\n                      CvArr* _centers CV_DEFAULT(0), double* compactness CV_DEFAULT(0) );\n\n/****************************************************************************************\\\n*                                    System functions                                    *\n\\****************************************************************************************/\n\n/* Add the function pointers table with associated information to the IPP primitives list */\nCVAPI(int)  cvRegisterModule( const CvModuleInfo* module_info );\n\n/* Loads optimized functions from IPP, MKL etc. or switches back to pure C code */\nCVAPI(int)  cvUseOptimized( int on_off );\n\n/* Retrieves information about the registered modules and loaded optimized plugins */\nCVAPI(void)  cvGetModuleInfo( const char* module_name,\n                              const char** version,\n                              const char** loaded_addon_plugins );\n\ntypedef void* (CV_CDECL *CvAllocFunc)(size_t size, void* userdata);\ntypedef int (CV_CDECL *CvFreeFunc)(void* pptr, void* userdata);\n\n/* Set user-defined memory managment functions (substitutors for malloc and free) that\n   will be called by cvAlloc, cvFree and higher-level functions (e.g. cvCreateImage) */\nCVAPI(void) cvSetMemoryManager( CvAllocFunc alloc_func CV_DEFAULT(NULL),\n                               CvFreeFunc free_func CV_DEFAULT(NULL),\n                               void* userdata CV_DEFAULT(NULL));\n\n\ntypedef IplImage* (CV_STDCALL* Cv_iplCreateImageHeader)\n                            (int,int,int,char*,char*,int,int,int,int,int,\n                            IplROI*,IplImage*,void*,IplTileInfo*);\ntypedef void (CV_STDCALL* Cv_iplAllocateImageData)(IplImage*,int,int);\ntypedef void (CV_STDCALL* Cv_iplDeallocate)(IplImage*,int);\ntypedef IplROI* (CV_STDCALL* Cv_iplCreateROI)(int,int,int,int,int);\ntypedef IplImage* (CV_STDCALL* Cv_iplCloneImage)(const IplImage*);\n\n/* Makes OpenCV use IPL functions for IplImage allocation/deallocation */\nCVAPI(void) cvSetIPLAllocators( Cv_iplCreateImageHeader create_header,\n                               Cv_iplAllocateImageData allocate_data,\n                               Cv_iplDeallocate deallocate,\n                               Cv_iplCreateROI create_roi,\n                               Cv_iplCloneImage clone_image );\n\n#define CV_TURN_ON_IPL_COMPATIBILITY()                                  \\\n    cvSetIPLAllocators( iplCreateImageHeader, iplAllocateImage,         \\\n                        iplDeallocate, iplCreateROI, iplCloneImage )\n\n/****************************************************************************************\\\n*                                    Data Persistence                                    *\n\\****************************************************************************************/\n\n/********************************** High-level functions ********************************/\n\n/* opens existing or creates new file storage */\nCVAPI(CvFileStorage*)  cvOpenFileStorage( const char* filename, CvMemStorage* memstorage,\n                                          int flags, const char* encoding CV_DEFAULT(NULL) );\n\n/* closes file storage and deallocates buffers */\nCVAPI(void) cvReleaseFileStorage( CvFileStorage** fs );\n\n/* returns attribute value or 0 (NULL) if there is no such attribute */\nCVAPI(const char*) cvAttrValue( const CvAttrList* attr, const char* attr_name );\n\n/* starts writing compound structure (map or sequence) */\nCVAPI(void) cvStartWriteStruct( CvFileStorage* fs, const char* name,\n                                int struct_flags, const char* type_name CV_DEFAULT(NULL),\n                                CvAttrList attributes CV_DEFAULT(cvAttrList()));\n\n/* finishes writing compound structure */\nCVAPI(void) cvEndWriteStruct( CvFileStorage* fs );\n\n/* writes an integer */\nCVAPI(void) cvWriteInt( CvFileStorage* fs, const char* name, int value );\n\n/* writes a floating-point number */\nCVAPI(void) cvWriteReal( CvFileStorage* fs, const char* name, double value );\n\n/* writes a string */\nCVAPI(void) cvWriteString( CvFileStorage* fs, const char* name,\n                           const char* str, int quote CV_DEFAULT(0) );\n\n/* writes a comment */\nCVAPI(void) cvWriteComment( CvFileStorage* fs, const char* comment,\n                            int eol_comment );\n\n/* writes instance of a standard type (matrix, image, sequence, graph etc.)\n   or user-defined type */\nCVAPI(void) cvWrite( CvFileStorage* fs, const char* name, const void* ptr,\n                         CvAttrList attributes CV_DEFAULT(cvAttrList()));\n\n/* starts the next stream */\nCVAPI(void) cvStartNextStream( CvFileStorage* fs );\n\n/* helper function: writes multiple integer or floating-point numbers */\nCVAPI(void) cvWriteRawData( CvFileStorage* fs, const void* src,\n                                int len, const char* dt );\n\n/* returns the hash entry corresponding to the specified literal key string or 0\n   if there is no such a key in the storage */\nCVAPI(CvStringHashNode*) cvGetHashedKey( CvFileStorage* fs, const char* name,\n                                        int len CV_DEFAULT(-1),\n                                        int create_missing CV_DEFAULT(0));\n\n/* returns file node with the specified key within the specified map\n   (collection of named nodes) */\nCVAPI(CvFileNode*) cvGetRootFileNode( const CvFileStorage* fs,\n                                     int stream_index CV_DEFAULT(0) );\n\n/* returns file node with the specified key within the specified map\n   (collection of named nodes) */\nCVAPI(CvFileNode*) cvGetFileNode( CvFileStorage* fs, CvFileNode* map,\n                                 const CvStringHashNode* key,\n                                 int create_missing CV_DEFAULT(0) );\n\n/* this is a slower version of cvGetFileNode that takes the key as a literal string */\nCVAPI(CvFileNode*) cvGetFileNodeByName( const CvFileStorage* fs,\n                                       const CvFileNode* map,\n                                       const char* name );\n\nCV_INLINE int cvReadInt( const CvFileNode* node, int default_value CV_DEFAULT(0) )\n{\n    return !node ? default_value :\n        CV_NODE_IS_INT(node->tag) ? node->data.i :\n        CV_NODE_IS_REAL(node->tag) ? cvRound(node->data.f) : 0x7fffffff;\n}\n\n\nCV_INLINE int cvReadIntByName( const CvFileStorage* fs, const CvFileNode* map,\n                         const char* name, int default_value CV_DEFAULT(0) )\n{\n    return cvReadInt( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n\nCV_INLINE double cvReadReal( const CvFileNode* node, double default_value CV_DEFAULT(0.) )\n{\n    return !node ? default_value :\n        CV_NODE_IS_INT(node->tag) ? (double)node->data.i :\n        CV_NODE_IS_REAL(node->tag) ? node->data.f : 1e300;\n}\n\n\nCV_INLINE double cvReadRealByName( const CvFileStorage* fs, const CvFileNode* map,\n                        const char* name, double default_value CV_DEFAULT(0.) )\n{\n    return cvReadReal( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n\nCV_INLINE const char* cvReadString( const CvFileNode* node,\n                        const char* default_value CV_DEFAULT(NULL) )\n{\n    return !node ? default_value : CV_NODE_IS_STRING(node->tag) ? node->data.str.ptr : 0;\n}\n\n\nCV_INLINE const char* cvReadStringByName( const CvFileStorage* fs, const CvFileNode* map,\n                        const char* name, const char* default_value CV_DEFAULT(NULL) )\n{\n    return cvReadString( cvGetFileNodeByName( fs, map, name ), default_value );\n}\n\n\n/* decodes standard or user-defined object and returns it */\nCVAPI(void*) cvRead( CvFileStorage* fs, CvFileNode* node,\n                        CvAttrList* attributes CV_DEFAULT(NULL));\n\n/* decodes standard or user-defined object and returns it */\nCV_INLINE void* cvReadByName( CvFileStorage* fs, const CvFileNode* map,\n                              const char* name, CvAttrList* attributes CV_DEFAULT(NULL) )\n{\n    return cvRead( fs, cvGetFileNodeByName( fs, map, name ), attributes );\n}\n\n\n/* starts reading data from sequence or scalar numeric node */\nCVAPI(void) cvStartReadRawData( const CvFileStorage* fs, const CvFileNode* src,\n                               CvSeqReader* reader );\n\n/* reads multiple numbers and stores them to array */\nCVAPI(void) cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader,\n                               int count, void* dst, const char* dt );\n\n/* combination of two previous functions for easier reading of whole sequences */\nCVAPI(void) cvReadRawData( const CvFileStorage* fs, const CvFileNode* src,\n                          void* dst, const char* dt );\n\n/* writes a copy of file node to file storage */\nCVAPI(void) cvWriteFileNode( CvFileStorage* fs, const char* new_node_name,\n                            const CvFileNode* node, int embed );\n\n/* returns name of file node */\nCVAPI(const char*) cvGetFileNodeName( const CvFileNode* node );\n\n/*********************************** Adding own types ***********************************/\n\nCVAPI(void) cvRegisterType( const CvTypeInfo* info );\nCVAPI(void) cvUnregisterType( const char* type_name );\nCVAPI(CvTypeInfo*) cvFirstType(void);\nCVAPI(CvTypeInfo*) cvFindType( const char* type_name );\nCVAPI(CvTypeInfo*) cvTypeOf( const void* struct_ptr );\n\n/* universal functions */\nCVAPI(void) cvRelease( void** struct_ptr );\nCVAPI(void*) cvClone( const void* struct_ptr );\n\n/* simple API for reading/writing data */\nCVAPI(void) cvSave( const char* filename, const void* struct_ptr,\n                    const char* name CV_DEFAULT(NULL),\n                    const char* comment CV_DEFAULT(NULL),\n                    CvAttrList attributes CV_DEFAULT(cvAttrList()));\nCVAPI(void*) cvLoad( const char* filename,\n                     CvMemStorage* memstorage CV_DEFAULT(NULL),\n                     const char* name CV_DEFAULT(NULL),\n                     const char** real_name CV_DEFAULT(NULL) );\n\n/*********************************** Measuring Execution Time ***************************/\n\n/* helper functions for RNG initialization and accurate time measurement:\n   uses internal clock counter on x86 */\nCVAPI(int64)  cvGetTickCount( void );\nCVAPI(double) cvGetTickFrequency( void );\n\n/*********************************** CPU capabilities ***********************************/\n\n#define CV_CPU_NONE    0\n#define CV_CPU_MMX     1\n#define CV_CPU_SSE     2\n#define CV_CPU_SSE2    3\n#define CV_CPU_SSE3    4\n#define CV_CPU_SSSE3   5\n#define CV_CPU_SSE4_1  6\n#define CV_CPU_SSE4_2  7\n#define CV_CPU_POPCNT  8\n#define CV_CPU_AVX    10\n#define CV_HARDWARE_MAX_FEATURE 255\n\nCVAPI(int) cvCheckHardwareSupport(int feature);\n\n/*********************************** Multi-Threading ************************************/\n\n/* retrieve/set the number of threads used in OpenMP implementations */\nCVAPI(int)  cvGetNumThreads( void );\nCVAPI(void) cvSetNumThreads( int threads CV_DEFAULT(0) );\n/* get index of the thread being executed */\nCVAPI(int)  cvGetThreadNum( void );\n\n\n/********************************** Error Handling **************************************/\n\n/* Get current OpenCV error status */\nCVAPI(int) cvGetErrStatus( void );\n\n/* Sets error status silently */\nCVAPI(void) cvSetErrStatus( int status );\n\n#define CV_ErrModeLeaf     0   /* Print error and exit program */\n#define CV_ErrModeParent   1   /* Print error and continue */\n#define CV_ErrModeSilent   2   /* Don't print and continue */\n\n/* Retrives current error processing mode */\nCVAPI(int)  cvGetErrMode( void );\n\n/* Sets error processing mode, returns previously used mode */\nCVAPI(int) cvSetErrMode( int mode );\n\n/* Sets error status and performs some additonal actions (displaying message box,\n writing message to stderr, terminating application etc.)\n depending on the current error mode */\nCVAPI(void) cvError( int status, const char* func_name,\n                    const char* err_msg, const char* file_name, int line );\n\n/* Retrieves textual description of the error given its code */\nCVAPI(const char*) cvErrorStr( int status );\n\n/* Retrieves detailed information about the last error occured */\nCVAPI(int) cvGetErrInfo( const char** errcode_desc, const char** description,\n                        const char** filename, int* line );\n\n/* Maps IPP error codes to the counterparts from OpenCV */\nCVAPI(int) cvErrorFromIppStatus( int ipp_status );\n\ntypedef int (CV_CDECL *CvErrorCallback)( int status, const char* func_name,\n                                        const char* err_msg, const char* file_name, int line, void* userdata );\n\n/* Assigns a new error-handling function */\nCVAPI(CvErrorCallback) cvRedirectError( CvErrorCallback error_handler,\n                                       void* userdata CV_DEFAULT(NULL),\n                                       void** prev_userdata CV_DEFAULT(NULL) );\n\n/*\n Output to:\n cvNulDevReport - nothing\n cvStdErrReport - console(fprintf(stderr,...))\n cvGuiBoxReport - MessageBox(WIN32)\n */\nCVAPI(int) cvNulDevReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\nCVAPI(int) cvStdErrReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\nCVAPI(int) cvGuiBoxReport( int status, const char* func_name, const char* err_msg,\n                          const char* file_name, int line, void* userdata );\n\n#define OPENCV_ERROR(status,func,context)                           \\\ncvError((status),(func),(context),__FILE__,__LINE__)\n\n#define OPENCV_ERRCHK(func,context)                                 \\\n{if (cvGetErrStatus() >= 0)                         \\\n{OPENCV_ERROR(CV_StsBackTrace,(func),(context));}}\n\n#define OPENCV_ASSERT(expr,func,context)                            \\\n{if (! (expr))                                      \\\n{OPENCV_ERROR(CV_StsInternal,(func),(context));}}\n\n#define OPENCV_RSTERR() (cvSetErrStatus(CV_StsOk))\n\n#define OPENCV_CALL( Func )                                         \\\n{                                                                   \\\nFunc;                                                           \\\n}\n\n\n/* CV_FUNCNAME macro defines icvFuncName constant which is used by CV_ERROR macro */\n#ifdef CV_NO_FUNC_NAMES\n#define CV_FUNCNAME( Name )\n#define cvFuncName \"\"\n#else\n#define CV_FUNCNAME( Name )  \\\nstatic char cvFuncName[] = Name\n#endif\n\n\n/*\n CV_ERROR macro unconditionally raises error with passed code and message.\n After raising error, control will be transferred to the exit label.\n */\n#define CV_ERROR( Code, Msg )                                       \\\n{                                                                   \\\n    cvError( (Code), cvFuncName, Msg, __FILE__, __LINE__ );        \\\n    __CV_EXIT__;                                                   \\\n}\n\n/* Simplified form of CV_ERROR */\n#define CV_ERROR_FROM_CODE( code )   \\\n    CV_ERROR( code, \"\" )\n\n/*\n CV_CHECK macro checks error status after CV (or IPL)\n function call. If error detected, control will be transferred to the exit\n label.\n */\n#define CV_CHECK()                                                  \\\n{                                                                   \\\n    if( cvGetErrStatus() < 0 )                                      \\\n        CV_ERROR( CV_StsBackTrace, \"Inner function failed.\" );      \\\n}\n\n\n/*\n CV_CALL macro calls CV (or IPL) function, checks error status and\n signals a error if the function failed. Useful in \"parent node\"\n error procesing mode\n */\n#define CV_CALL( Func )                                             \\\n{                                                                   \\\n    Func;                                                           \\\n    CV_CHECK();                                                     \\\n}\n\n\n/* Runtime assertion macro */\n#define CV_ASSERT( Condition )                                          \\\n{                                                                       \\\n    if( !(Condition) )                                                  \\\n        CV_ERROR( CV_StsInternal, \"Assertion: \" #Condition \" failed\" ); \\\n}\n\n#define __CV_BEGIN__       {\n#define __CV_END__         goto exit; exit: ; }\n#define __CV_EXIT__        goto exit\n\n#ifdef __cplusplus\n}\n\n// classes for automatic module/RTTI data registration/unregistration\nstruct CV_EXPORTS CvModule\n{\n    CvModule( CvModuleInfo* _info );\n    ~CvModule();\n    CvModuleInfo* info;\n\n    static CvModuleInfo* first;\n    static CvModuleInfo* last;\n};\n\nstruct CV_EXPORTS CvType\n{\n    CvType( const char* type_name,\n            CvIsInstanceFunc is_instance, CvReleaseFunc release=0,\n            CvReadFunc read=0, CvWriteFunc write=0, CvCloneFunc clone=0 );\n    ~CvType();\n    CvTypeInfo* info;\n\n    static CvTypeInfo* first;\n    static CvTypeInfo* last;\n};\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/cuda_devptrs.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_DEVPTRS_HPP__\n#define __OPENCV_CORE_DEVPTRS_HPP__\n\n#ifdef __cplusplus\n\n#ifdef __CUDACC__\n    #define __CV_GPU_HOST_DEVICE__ __host__ __device__ __forceinline__\n#else\n    #define __CV_GPU_HOST_DEVICE__\n#endif\n\nnamespace cv\n{\n    namespace gpu\n    {\n        // Simple lightweight structures that encapsulates information about an image on device.\n        // It is intended to pass to nvcc-compiled code. GpuMat depends on headers that nvcc can't compile\n\n        template <bool expr> struct StaticAssert;\n        template <> struct StaticAssert<true> {static __CV_GPU_HOST_DEVICE__ void check(){}};\n\n        template<typename T> struct DevPtr\n        {\n            typedef T elem_type;\n            typedef int index_type;\n\n            enum { elem_size = sizeof(elem_type) };\n\n            T* data;\n\n            __CV_GPU_HOST_DEVICE__ DevPtr() : data(0) {}\n            __CV_GPU_HOST_DEVICE__ DevPtr(T* data_) : data(data_) {}\n\n            __CV_GPU_HOST_DEVICE__ size_t elemSize() const { return elem_size; }\n            __CV_GPU_HOST_DEVICE__ operator       T*()       { return data; }\n            __CV_GPU_HOST_DEVICE__ operator const T*() const { return data; }\n        };\n\n        template<typename T> struct PtrSz : public DevPtr<T>\n        {\n            __CV_GPU_HOST_DEVICE__ PtrSz() : size(0) {}\n            __CV_GPU_HOST_DEVICE__ PtrSz(T* data_, size_t size_) : DevPtr<T>(data_), size(size_) {}\n\n            size_t size;\n        };\n\n        template<typename T> struct PtrStep : public DevPtr<T>\n        {\n            __CV_GPU_HOST_DEVICE__ PtrStep() : step(0) {}\n            __CV_GPU_HOST_DEVICE__ PtrStep(T* data_, size_t step_) : DevPtr<T>(data_), step(step_) {}\n\n            /** \\brief stride between two consecutive rows in bytes. Step is stored always and everywhere in bytes!!! */\n            size_t step;\n\n            __CV_GPU_HOST_DEVICE__       T* ptr(int y = 0)       { return (      T*)( (      char*)DevPtr<T>::data + y * step); }\n            __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return (const T*)( (const char*)DevPtr<T>::data + y * step); }\n\n            __CV_GPU_HOST_DEVICE__       T& operator ()(int y, int x)       { return ptr(y)[x]; }\n            __CV_GPU_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; }\n        };\n\n        template <typename T> struct PtrStepSz : public PtrStep<T>\n        {\n            __CV_GPU_HOST_DEVICE__ PtrStepSz() : cols(0), rows(0) {}\n            __CV_GPU_HOST_DEVICE__ PtrStepSz(int rows_, int cols_, T* data_, size_t step_)\n                : PtrStep<T>(data_, step_), cols(cols_), rows(rows_) {}\n\n            template <typename U>\n            explicit PtrStepSz(const PtrStepSz<U>& d) : PtrStep<T>((T*)d.data, d.step), cols(d.cols), rows(d.rows){}\n\n            int cols;\n            int rows;\n        };\n\n        typedef PtrStepSz<unsigned char> PtrStepSzb;\n        typedef PtrStepSz<float> PtrStepSzf;\n        typedef PtrStepSz<int> PtrStepSzi;\n\n        typedef PtrStep<unsigned char> PtrStepb;\n        typedef PtrStep<float> PtrStepf;\n        typedef PtrStep<int> PtrStepi;\n\n\n#if defined __GNUC__\n    #define __CV_GPU_DEPR_BEFORE__\n    #define __CV_GPU_DEPR_AFTER__ __attribute__ ((deprecated))\n#elif defined(__MSVC__) //|| defined(__CUDACC__)\n    #pragma deprecated(DevMem2D_)\n    #define __CV_GPU_DEPR_BEFORE__ __declspec(deprecated)\n    #define __CV_GPU_DEPR_AFTER__\n#else\n    #define __CV_GPU_DEPR_BEFORE__\n    #define __CV_GPU_DEPR_AFTER__\n#endif\n\n        template <typename T> struct __CV_GPU_DEPR_BEFORE__ DevMem2D_ : public PtrStepSz<T>\n        {\n            DevMem2D_() {}\n            DevMem2D_(int rows_, int cols_, T* data_, size_t step_) : PtrStepSz<T>(rows_, cols_, data_, step_) {}\n\n            template <typename U>\n            explicit __CV_GPU_DEPR_BEFORE__ DevMem2D_(const DevMem2D_<U>& d) : PtrStepSz<T>(d.rows, d.cols, (T*)d.data, d.step) {}\n        } __CV_GPU_DEPR_AFTER__ ;\n\n        typedef DevMem2D_<unsigned char> DevMem2Db;\n        typedef DevMem2Db DevMem2D;\n        typedef DevMem2D_<float> DevMem2Df;\n        typedef DevMem2D_<int> DevMem2Di;\n\n        template<typename T> struct PtrElemStep_ : public PtrStep<T>\n        {\n            PtrElemStep_(const DevMem2D_<T>& mem) : PtrStep<T>(mem.data, mem.step)\n            {\n                StaticAssert<256 % sizeof(T) == 0>::check();\n\n                PtrStep<T>::step /= PtrStep<T>::elem_size;\n            }\n            __CV_GPU_HOST_DEVICE__ T* ptr(int y = 0) { return PtrStep<T>::data + y * PtrStep<T>::step; }\n            __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return PtrStep<T>::data + y * PtrStep<T>::step; }\n\n            __CV_GPU_HOST_DEVICE__ T& operator ()(int y, int x) { return ptr(y)[x]; }\n            __CV_GPU_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; }\n        };\n\n        template<typename T> struct PtrStep_ : public PtrStep<T>\n        {\n            PtrStep_() {}\n            PtrStep_(const DevMem2D_<T>& mem) : PtrStep<T>(mem.data, mem.step) {}\n        };\n\n        typedef PtrElemStep_<unsigned char> PtrElemStep;\n        typedef PtrElemStep_<float> PtrElemStepf;\n        typedef PtrElemStep_<int> PtrElemStepi;\n\n//#undef __CV_GPU_DEPR_BEFORE__\n//#undef __CV_GPU_DEPR_AFTER__\n\n        namespace device\n        {\n            using cv::gpu::PtrSz;\n            using cv::gpu::PtrStep;\n            using cv::gpu::PtrStepSz;\n\n            using cv::gpu::PtrStepSzb;\n            using cv::gpu::PtrStepSzf;\n            using cv::gpu::PtrStepSzi;\n\n            using cv::gpu::PtrStepb;\n            using cv::gpu::PtrStepf;\n            using cv::gpu::PtrStepi;\n        }\n    }\n}\n\n#endif // __cplusplus\n\n#endif /* __OPENCV_CORE_DEVPTRS_HPP__ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/devmem2d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#include \"opencv2/core/cuda_devptrs.hpp\"\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/eigen.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_EIGEN_HPP__\n#define __OPENCV_CORE_EIGEN_HPP__\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/core/core.hpp\"\n\n#if defined _MSC_VER && _MSC_VER >= 1200\n#pragma warning( disable: 4714 ) //__forceinline is not inlined\n#pragma warning( disable: 4127 ) //conditional expression is constant\n#pragma warning( disable: 4244 ) //conversion from '__int64' to 'int', possible loss of data\n#endif\n\nnamespace cv\n{\n\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols>\nvoid eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src, Mat& dst )\n{\n    if( !(src.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _src(src.cols(), src.rows(), DataType<_Tp>::type,\n              (void*)src.data(), src.stride()*sizeof(_Tp));\n        transpose(_src, dst);\n    }\n    else\n    {\n        Mat _src(src.rows(), src.cols(), DataType<_Tp>::type,\n                 (void*)src.data(), src.stride()*sizeof(_Tp));\n        _src.copyTo(dst);\n    }\n}\n\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols>\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst )\n{\n    CV_DbgAssert(src.rows == _rows && src.cols == _cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else if( src.cols == src.rows )\n        {\n            src.convertTo(_dst, _dst.type());\n            transpose(_dst, _dst);\n        }\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols>\nvoid cv2eigen( const Matx<_Tp, _rows, _cols>& src,\n               Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst )\n{\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(_cols, _rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(_rows, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\ntemplate<typename _Tp>\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )\n{\n    dst.resize(src.rows, src.cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n             dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else if( src.cols == src.rows )\n        {\n            src.convertTo(_dst, _dst.type());\n            transpose(_dst, _dst);\n        }\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows, int _cols>\nvoid cv2eigen( const Matx<_Tp, _rows, _cols>& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )\n{\n    dst.resize(_rows, _cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(_cols, _rows, DataType<_Tp>::type,\n             dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(_rows, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\ntemplate<typename _Tp>\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst )\n{\n    CV_Assert(src.cols == 1);\n    dst.resize(src.rows);\n\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n// Matx case\ntemplate<typename _Tp, int _rows>\nvoid cv2eigen( const Matx<_Tp, _rows, 1>& src,\n               Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst )\n{\n    dst.resize(_rows);\n\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(1, _rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(_rows, 1, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.copyTo(_dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n\ntemplate<typename _Tp>\nvoid cv2eigen( const Mat& src,\n               Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst )\n{\n    CV_Assert(src.rows == 1);\n    dst.resize(src.cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(src.cols, src.rows, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        if( src.type() == _dst.type() )\n            transpose(src, _dst);\n        else\n            Mat(src.t()).convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(src.rows, src.cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        src.convertTo(_dst, _dst.type());\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n//Matx\ntemplate<typename _Tp, int _cols>\nvoid cv2eigen( const Matx<_Tp, 1, _cols>& src,\n               Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst )\n{\n    dst.resize(_cols);\n    if( !(dst.Flags & Eigen::RowMajorBit) )\n    {\n        Mat _dst(_cols, 1, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        transpose(src, _dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n    else\n    {\n        Mat _dst(1, _cols, DataType<_Tp>::type,\n                 dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));\n        Mat(src).copyTo(_dst);\n        CV_DbgAssert(_dst.data == (uchar*)dst.data());\n    }\n}\n\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/gpumat.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_GPUMAT_HPP__\n#define __OPENCV_GPUMAT_HPP__\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/cuda_devptrs.hpp\"\n\nnamespace cv { namespace gpu\n{\n    //////////////////////////////// Initialization & Info ////////////////////////\n\n    //! This is the only function that do not throw exceptions if the library is compiled without Cuda.\n    CV_EXPORTS int getCudaEnabledDeviceCount();\n\n    //! Functions below throw cv::Expception if the library is compiled without Cuda.\n\n    CV_EXPORTS void setDevice(int device);\n    CV_EXPORTS int getDevice();\n\n    //! Explicitly destroys and cleans up all resources associated with the current device in the current process.\n    //! Any subsequent API call to this device will reinitialize the device.\n    CV_EXPORTS void resetDevice();\n\n    enum FeatureSet\n    {\n        FEATURE_SET_COMPUTE_10 = 10,\n        FEATURE_SET_COMPUTE_11 = 11,\n        FEATURE_SET_COMPUTE_12 = 12,\n        FEATURE_SET_COMPUTE_13 = 13,\n        FEATURE_SET_COMPUTE_20 = 20,\n        FEATURE_SET_COMPUTE_21 = 21,\n        FEATURE_SET_COMPUTE_30 = 30,\n        FEATURE_SET_COMPUTE_35 = 35,\n\n        GLOBAL_ATOMICS = FEATURE_SET_COMPUTE_11,\n        SHARED_ATOMICS = FEATURE_SET_COMPUTE_12,\n        NATIVE_DOUBLE = FEATURE_SET_COMPUTE_13,\n        WARP_SHUFFLE_FUNCTIONS = FEATURE_SET_COMPUTE_30,\n        DYNAMIC_PARALLELISM = FEATURE_SET_COMPUTE_35\n    };\n\n    // Checks whether current device supports the given feature\n    CV_EXPORTS bool deviceSupports(FeatureSet feature_set);\n\n    // Gives information about what GPU archs this OpenCV GPU module was\n    // compiled for\n    class CV_EXPORTS TargetArchs\n    {\n    public:\n        static bool builtWith(FeatureSet feature_set);\n        static bool has(int major, int minor);\n        static bool hasPtx(int major, int minor);\n        static bool hasBin(int major, int minor);\n        static bool hasEqualOrLessPtx(int major, int minor);\n        static bool hasEqualOrGreater(int major, int minor);\n        static bool hasEqualOrGreaterPtx(int major, int minor);\n        static bool hasEqualOrGreaterBin(int major, int minor);\n    private:\n        TargetArchs();\n    };\n\n    // Gives information about the given GPU\n    class CV_EXPORTS DeviceInfo\n    {\n    public:\n        // Creates DeviceInfo object for the current GPU\n        DeviceInfo() : device_id_(getDevice()) { query(); }\n\n        // Creates DeviceInfo object for the given GPU\n        DeviceInfo(int device_id) : device_id_(device_id) { query(); }\n\n        std::string name() const { return name_; }\n\n        // Return compute capability versions\n        int majorVersion() const { return majorVersion_; }\n        int minorVersion() const { return minorVersion_; }\n\n        int multiProcessorCount() const { return multi_processor_count_; }\n\n        size_t sharedMemPerBlock() const;\n\n        void queryMemory(size_t& totalMemory, size_t& freeMemory) const;\n        size_t freeMemory() const;\n        size_t totalMemory() const;\n\n        // Checks whether device supports the given feature\n        bool supports(FeatureSet feature_set) const;\n\n        // Checks whether the GPU module can be run on the given device\n        bool isCompatible() const;\n\n        int deviceID() const { return device_id_; }\n\n    private:\n        void query();\n\n        int device_id_;\n\n        std::string name_;\n        int multi_processor_count_;\n        int majorVersion_;\n        int minorVersion_;\n    };\n\n    CV_EXPORTS void printCudaDeviceInfo(int device);\n    CV_EXPORTS void printShortCudaDeviceInfo(int device);\n\n    //////////////////////////////// GpuMat ///////////////////////////////\n\n    //! Smart pointer for GPU memory with reference counting. Its interface is mostly similar with cv::Mat.\n    class CV_EXPORTS GpuMat\n    {\n    public:\n        //! default constructor\n        GpuMat();\n\n        //! constructs GpuMatrix of the specified size and type (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)\n        GpuMat(int rows, int cols, int type);\n        GpuMat(Size size, int type);\n\n        //! constucts GpuMatrix and fills it with the specified value _s.\n        GpuMat(int rows, int cols, int type, Scalar s);\n        GpuMat(Size size, int type, Scalar s);\n\n        //! copy constructor\n        GpuMat(const GpuMat& m);\n\n        //! constructor for GpuMatrix headers pointing to user-allocated data\n        GpuMat(int rows, int cols, int type, void* data, size_t step = Mat::AUTO_STEP);\n        GpuMat(Size size, int type, void* data, size_t step = Mat::AUTO_STEP);\n\n        //! creates a matrix header for a part of the bigger matrix\n        GpuMat(const GpuMat& m, Range rowRange, Range colRange);\n        GpuMat(const GpuMat& m, Rect roi);\n\n        //! builds GpuMat from Mat. Perfom blocking upload to device.\n        explicit GpuMat(const Mat& m);\n\n        //! destructor - calls release()\n        ~GpuMat();\n\n        //! assignment operators\n        GpuMat& operator = (const GpuMat& m);\n\n        //! pefroms blocking upload data to GpuMat.\n        void upload(const Mat& m);\n\n        //! downloads data from device to host memory. Blocking calls.\n        void download(Mat& m) const;\n\n        //! returns a new GpuMatrix header for the specified row\n        GpuMat row(int y) const;\n        //! returns a new GpuMatrix header for the specified column\n        GpuMat col(int x) const;\n        //! ... for the specified row span\n        GpuMat rowRange(int startrow, int endrow) const;\n        GpuMat rowRange(Range r) const;\n        //! ... for the specified column span\n        GpuMat colRange(int startcol, int endcol) const;\n        GpuMat colRange(Range r) const;\n\n        //! returns deep copy of the GpuMatrix, i.e. the data is copied\n        GpuMat clone() const;\n        //! copies the GpuMatrix content to \"m\".\n        // It calls m.create(this->size(), this->type()).\n        void copyTo(GpuMat& m) const;\n        //! copies those GpuMatrix elements to \"m\" that are marked with non-zero mask elements.\n        void copyTo(GpuMat& m, const GpuMat& mask) const;\n        //! converts GpuMatrix to another datatype with optional scalng. See cvConvertScale.\n        void convertTo(GpuMat& m, int rtype, double alpha = 1, double beta = 0) const;\n\n        void assignTo(GpuMat& m, int type=-1) const;\n\n        //! sets every GpuMatrix element to s\n        GpuMat& operator = (Scalar s);\n        //! sets some of the GpuMatrix elements to s, according to the mask\n        GpuMat& setTo(Scalar s, const GpuMat& mask = GpuMat());\n        //! creates alternative GpuMatrix header for the same data, with different\n        // number of channels and/or different number of rows. see cvReshape.\n        GpuMat reshape(int cn, int rows = 0) const;\n\n        //! allocates new GpuMatrix data unless the GpuMatrix already has specified size and type.\n        // previous data is unreferenced if needed.\n        void create(int rows, int cols, int type);\n        void create(Size size, int type);\n        //! decreases reference counter;\n        // deallocate the data when reference counter reaches 0.\n        void release();\n\n        //! swaps with other smart pointer\n        void swap(GpuMat& mat);\n\n        //! locates GpuMatrix header within a parent GpuMatrix. See below\n        void locateROI(Size& wholeSize, Point& ofs) const;\n        //! moves/resizes the current GpuMatrix ROI inside the parent GpuMatrix.\n        GpuMat& adjustROI(int dtop, int dbottom, int dleft, int dright);\n        //! extracts a rectangular sub-GpuMatrix\n        // (this is a generalized form of row, rowRange etc.)\n        GpuMat operator()(Range rowRange, Range colRange) const;\n        GpuMat operator()(Rect roi) const;\n\n        //! returns true iff the GpuMatrix data is continuous\n        // (i.e. when there are no gaps between successive rows).\n        // similar to CV_IS_GpuMat_CONT(cvGpuMat->type)\n        bool isContinuous() const;\n        //! returns element size in bytes,\n        // similar to CV_ELEM_SIZE(cvMat->type)\n        size_t elemSize() const;\n        //! returns the size of element channel in bytes.\n        size_t elemSize1() const;\n        //! returns element type, similar to CV_MAT_TYPE(cvMat->type)\n        int type() const;\n        //! returns element type, similar to CV_MAT_DEPTH(cvMat->type)\n        int depth() const;\n        //! returns element type, similar to CV_MAT_CN(cvMat->type)\n        int channels() const;\n        //! returns step/elemSize1()\n        size_t step1() const;\n        //! returns GpuMatrix size:\n        // width == number of columns, height == number of rows\n        Size size() const;\n        //! returns true if GpuMatrix data is NULL\n        bool empty() const;\n\n        //! returns pointer to y-th row\n        uchar* ptr(int y = 0);\n        const uchar* ptr(int y = 0) const;\n\n        //! template version of the above method\n        template<typename _Tp> _Tp* ptr(int y = 0);\n        template<typename _Tp> const _Tp* ptr(int y = 0) const;\n\n        template <typename _Tp> operator PtrStepSz<_Tp>() const;\n        template <typename _Tp> operator PtrStep<_Tp>() const;\n\n        // Deprecated function\n        __CV_GPU_DEPR_BEFORE__ template <typename _Tp> operator DevMem2D_<_Tp>() const __CV_GPU_DEPR_AFTER__;\n        __CV_GPU_DEPR_BEFORE__ template <typename _Tp> operator PtrStep_<_Tp>() const __CV_GPU_DEPR_AFTER__;\n        #undef __CV_GPU_DEPR_BEFORE__\n        #undef __CV_GPU_DEPR_AFTER__\n\n        /*! includes several bit-fields:\n        - the magic signature\n        - continuity flag\n        - depth\n        - number of channels\n        */\n        int flags;\n\n        //! the number of rows and columns\n        int rows, cols;\n\n        //! a distance between successive rows in bytes; includes the gap if any\n        size_t step;\n\n        //! pointer to the data\n        uchar* data;\n\n        //! pointer to the reference counter;\n        // when GpuMatrix points to user-allocated data, the pointer is NULL\n        int* refcount;\n\n        //! helper fields used in locateROI and adjustROI\n        uchar* datastart;\n        uchar* dataend;\n    };\n\n    //! Creates continuous GPU matrix\n    CV_EXPORTS void createContinuous(int rows, int cols, int type, GpuMat& m);\n    CV_EXPORTS GpuMat createContinuous(int rows, int cols, int type);\n    CV_EXPORTS void createContinuous(Size size, int type, GpuMat& m);\n    CV_EXPORTS GpuMat createContinuous(Size size, int type);\n\n    //! Ensures that size of the given matrix is not less than (rows, cols) size\n    //! and matrix type is match specified one too\n    CV_EXPORTS void ensureSizeIsEnough(int rows, int cols, int type, GpuMat& m);\n    CV_EXPORTS void ensureSizeIsEnough(Size size, int type, GpuMat& m);\n\n    CV_EXPORTS GpuMat allocMatFromBuf(int rows, int cols, int type, GpuMat &mat);\n\n    ////////////////////////////////////////////////////////////////////////\n    // Error handling\n\n    CV_EXPORTS void error(const char* error_string, const char* file, const int line, const char* func = \"\");\n\n    ////////////////////////////////////////////////////////////////////////\n    ////////////////////////////////////////////////////////////////////////\n    ////////////////////////////////////////////////////////////////////////\n\n    inline GpuMat::GpuMat()\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n    }\n\n    inline GpuMat::GpuMat(int rows_, int cols_, int type_)\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n        if (rows_ > 0 && cols_ > 0)\n            create(rows_, cols_, type_);\n    }\n\n    inline GpuMat::GpuMat(Size size_, int type_)\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n        if (size_.height > 0 && size_.width > 0)\n            create(size_.height, size_.width, type_);\n    }\n\n    inline GpuMat::GpuMat(int rows_, int cols_, int type_, Scalar s_)\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n        if (rows_ > 0 && cols_ > 0)\n        {\n            create(rows_, cols_, type_);\n            setTo(s_);\n        }\n    }\n\n    inline GpuMat::GpuMat(Size size_, int type_, Scalar s_)\n        : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)\n    {\n        if (size_.height > 0 && size_.width > 0)\n        {\n            create(size_.height, size_.width, type_);\n            setTo(s_);\n        }\n    }\n\n    inline GpuMat::~GpuMat()\n    {\n        release();\n    }\n\n    inline GpuMat GpuMat::clone() const\n    {\n        GpuMat m;\n        copyTo(m);\n        return m;\n    }\n\n    inline void GpuMat::assignTo(GpuMat& m, int _type) const\n    {\n        if (_type < 0)\n            m = *this;\n        else\n            convertTo(m, _type);\n    }\n\n    inline size_t GpuMat::step1() const\n    {\n        return step / elemSize1();\n    }\n\n    inline bool GpuMat::empty() const\n    {\n        return data == 0;\n    }\n\n    template<typename _Tp> inline _Tp* GpuMat::ptr(int y)\n    {\n        return (_Tp*)ptr(y);\n    }\n\n    template<typename _Tp> inline const _Tp* GpuMat::ptr(int y) const\n    {\n        return (const _Tp*)ptr(y);\n    }\n\n    inline void swap(GpuMat& a, GpuMat& b)\n    {\n        a.swap(b);\n    }\n\n    inline GpuMat GpuMat::row(int y) const\n    {\n        return GpuMat(*this, Range(y, y+1), Range::all());\n    }\n\n    inline GpuMat GpuMat::col(int x) const\n    {\n        return GpuMat(*this, Range::all(), Range(x, x+1));\n    }\n\n    inline GpuMat GpuMat::rowRange(int startrow, int endrow) const\n    {\n        return GpuMat(*this, Range(startrow, endrow), Range::all());\n    }\n\n    inline GpuMat GpuMat::rowRange(Range r) const\n    {\n        return GpuMat(*this, r, Range::all());\n    }\n\n    inline GpuMat GpuMat::colRange(int startcol, int endcol) const\n    {\n        return GpuMat(*this, Range::all(), Range(startcol, endcol));\n    }\n\n    inline GpuMat GpuMat::colRange(Range r) const\n    {\n        return GpuMat(*this, Range::all(), r);\n    }\n\n    inline void GpuMat::create(Size size_, int type_)\n    {\n        create(size_.height, size_.width, type_);\n    }\n\n    inline GpuMat GpuMat::operator()(Range _rowRange, Range _colRange) const\n    {\n        return GpuMat(*this, _rowRange, _colRange);\n    }\n\n    inline GpuMat GpuMat::operator()(Rect roi) const\n    {\n        return GpuMat(*this, roi);\n    }\n\n    inline bool GpuMat::isContinuous() const\n    {\n        return (flags & Mat::CONTINUOUS_FLAG) != 0;\n    }\n\n    inline size_t GpuMat::elemSize() const\n    {\n        return CV_ELEM_SIZE(flags);\n    }\n\n    inline size_t GpuMat::elemSize1() const\n    {\n        return CV_ELEM_SIZE1(flags);\n    }\n\n    inline int GpuMat::type() const\n    {\n        return CV_MAT_TYPE(flags);\n    }\n\n    inline int GpuMat::depth() const\n    {\n        return CV_MAT_DEPTH(flags);\n    }\n\n    inline int GpuMat::channels() const\n    {\n        return CV_MAT_CN(flags);\n    }\n\n    inline Size GpuMat::size() const\n    {\n        return Size(cols, rows);\n    }\n\n    inline uchar* GpuMat::ptr(int y)\n    {\n        CV_DbgAssert((unsigned)y < (unsigned)rows);\n        return data + step * y;\n    }\n\n    inline const uchar* GpuMat::ptr(int y) const\n    {\n        CV_DbgAssert((unsigned)y < (unsigned)rows);\n        return data + step * y;\n    }\n\n    inline GpuMat& GpuMat::operator = (Scalar s)\n    {\n        setTo(s);\n        return *this;\n    }\n\n    template <class T> inline GpuMat::operator PtrStepSz<T>() const\n    {\n        return PtrStepSz<T>(rows, cols, (T*)data, step);\n    }\n\n    template <class T> inline GpuMat::operator PtrStep<T>() const\n    {\n        return PtrStep<T>((T*)data, step);\n    }\n\n    template <class T> inline GpuMat::operator DevMem2D_<T>() const\n    {\n        return DevMem2D_<T>(rows, cols, (T*)data, step);\n    }\n\n    template <class T> inline GpuMat::operator PtrStep_<T>() const\n    {\n        return PtrStep_<T>(static_cast< DevMem2D_<T> >(*this));\n    }\n\n    inline GpuMat createContinuous(int rows, int cols, int type)\n    {\n        GpuMat m;\n        createContinuous(rows, cols, type, m);\n        return m;\n    }\n\n    inline void createContinuous(Size size, int type, GpuMat& m)\n    {\n        createContinuous(size.height, size.width, type, m);\n    }\n\n    inline GpuMat createContinuous(Size size, int type)\n    {\n        GpuMat m;\n        createContinuous(size, type, m);\n        return m;\n    }\n\n    inline void ensureSizeIsEnough(Size size, int type, GpuMat& m)\n    {\n        ensureSizeIsEnough(size.height, size.width, type, m);\n    }\n}}\n\n#endif // __cplusplus\n\n#endif // __OPENCV_GPUMAT_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/internal.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n/* The header is for internal use and it is likely to change.\n   It contains some macro definitions that are used in cxcore, cv, cvaux\n   and, probably, other libraries. If you need some of this functionality,\n   the safe way is to copy it into your code and rename the macros.\n*/\n#ifndef __OPENCV_CORE_INTERNAL_HPP__\n#define __OPENCV_CORE_INTERNAL_HPP__\n\n#include <vector>\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/types_c.h\"\n\n#if defined WIN32 || defined _WIN32\n#  ifndef WIN32\n#    define WIN32\n#  endif\n#  ifndef _WIN32\n#    define _WIN32\n#  endif\n#endif\n\n#if !defined WIN32 && !defined WINCE\n#  include <pthread.h>\n#endif\n\n#ifdef __BORLANDC__\n#  ifndef WIN32\n#    define WIN32\n#  endif\n#  ifndef _WIN32\n#    define _WIN32\n#  endif\n#  define CV_DLL\n#  undef _CV_ALWAYS_PROFILE_\n#  define _CV_ALWAYS_NO_PROFILE_\n#endif\n\n#ifndef FALSE\n#  define FALSE 0\n#endif\n#ifndef TRUE\n#  define TRUE 1\n#endif\n\n#define __BEGIN__ __CV_BEGIN__\n#define __END__ __CV_END__\n#define EXIT __CV_EXIT__\n\n#ifdef HAVE_IPP\n#  include \"ipp.h\"\n\nCV_INLINE IppiSize ippiSize(int width, int height)\n{\n    IppiSize size = { width, height };\n    return size;\n}\n#endif\n\n#ifndef IPPI_CALL\n#  define IPPI_CALL(func) CV_Assert((func) >= 0)\n#endif\n\n#if defined __SSE2__ || defined _M_X64  || (defined _M_IX86_FP && _M_IX86_FP >= 2)\n#  include \"emmintrin.h\"\n#  define CV_SSE 1\n#  define CV_SSE2 1\n#  if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include \"pmmintrin.h\"\n#    define CV_SSE3 1\n#  endif\n#  if defined __SSSE3__  || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include \"tmmintrin.h\"\n#    define CV_SSSE3 1\n#  endif\n#  if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include <smmintrin.h>\n#    define CV_SSE4_1 1\n#  endif\n#  if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500)\n#    include <nmmintrin.h>\n#    define CV_SSE4_2 1\n#  endif\n#  if defined __AVX__ || (defined _MSC_FULL_VER && _MSC_FULL_VER >= 160040219)\n// MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX\n// See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32\n#    include <immintrin.h>\n#    define CV_AVX 1\n#    if defined(_XCR_XFEATURE_ENABLED_MASK)\n#      define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK)\n#    else\n#      define __xgetbv() 0\n#    endif\n#  endif\n#endif\n\n\n#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)\n# include <Intrin.h>\n# include \"arm_neon.h\"\n# define CV_NEON 1\n# define CPU_HAS_NEON_FEATURE (true)\n#elif defined(__ARM_NEON__)\n#  include <arm_neon.h>\n#  define CV_NEON 1\n#  define CPU_HAS_NEON_FEATURE (true)\n#endif\n\n#ifndef CV_SSE\n#  define CV_SSE 0\n#endif\n#ifndef CV_SSE2\n#  define CV_SSE2 0\n#endif\n#ifndef CV_SSE3\n#  define CV_SSE3 0\n#endif\n#ifndef CV_SSSE3\n#  define CV_SSSE3 0\n#endif\n#ifndef CV_SSE4_1\n#  define CV_SSE4_1 0\n#endif\n#ifndef CV_SSE4_2\n#  define CV_SSE4_2 0\n#endif\n#ifndef CV_AVX\n#  define CV_AVX 0\n#endif\n#ifndef CV_NEON\n#  define CV_NEON 0\n#endif\n\n#ifdef HAVE_TBB\n#  include \"tbb/tbb_stddef.h\"\n#  if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202\n#    include \"tbb/tbb.h\"\n#    include \"tbb/task.h\"\n#    undef min\n#    undef max\n#  else\n#    undef HAVE_TBB\n#  endif\n#endif\n\n#ifdef HAVE_EIGEN\n#  if defined __GNUC__ && defined __APPLE__\n#    pragma GCC diagnostic ignored \"-Wshadow\"\n#  endif\n#  include <Eigen/Core>\n#  include \"opencv2/core/eigen.hpp\"\n#endif\n\n#ifdef __cplusplus\n\nnamespace cv\n{\n#ifdef HAVE_TBB\n\n    typedef tbb::blocked_range<int> BlockedRange;\n\n    template<typename Body> static inline\n    void parallel_for( const BlockedRange& range, const Body& body )\n    {\n        tbb::parallel_for(range, body);\n    }\n\n    template<typename Iterator, typename Body> static inline\n    void parallel_do( Iterator first, Iterator last, const Body& body )\n    {\n        tbb::parallel_do(first, last, body);\n    }\n\n    typedef tbb::split Split;\n\n    template<typename Body> static inline\n    void parallel_reduce( const BlockedRange& range, Body& body )\n    {\n        tbb::parallel_reduce(range, body);\n    }\n\n    typedef tbb::concurrent_vector<Rect> ConcurrentRectVector;\n    typedef tbb::concurrent_vector<double> ConcurrentDoubleVector;\n#else\n    class BlockedRange\n    {\n    public:\n        BlockedRange() : _begin(0), _end(0), _grainsize(0) {}\n        BlockedRange(int b, int e, int g=1) : _begin(b), _end(e), _grainsize(g) {}\n        int begin() const { return _begin; }\n        int end() const { return _end; }\n        int grainsize() const { return _grainsize; }\n\n    protected:\n        int _begin, _end, _grainsize;\n    };\n\n    template<typename Body> static inline\n    void parallel_for( const BlockedRange& range, const Body& body )\n    {\n        body(range);\n    }\n    typedef std::vector<Rect> ConcurrentRectVector;\n    typedef std::vector<double> ConcurrentDoubleVector;\n\n    template<typename Iterator, typename Body> static inline\n    void parallel_do( Iterator first, Iterator last, const Body& body )\n    {\n        for( ; first != last; ++first )\n            body(*first);\n    }\n\n    class Split {};\n\n    template<typename Body> static inline\n    void parallel_reduce( const BlockedRange& range, Body& body )\n    {\n        body(range);\n    }\n#endif\n\n    // Returns a static string if there is a parallel framework,\n    // NULL otherwise.\n    CV_EXPORTS const char* currentParallelFramework();\n} //namespace cv\n\n#define CV_INIT_ALGORITHM(classname, algname, memberinit) \\\n    static ::cv::Algorithm* create##classname() \\\n    { \\\n        return new classname; \\\n    } \\\n    \\\n    static ::cv::AlgorithmInfo& classname##_info() \\\n    { \\\n        static ::cv::AlgorithmInfo classname##_info_var(algname, create##classname); \\\n        return classname##_info_var; \\\n    } \\\n    \\\n    static ::cv::AlgorithmInfo& classname##_info_auto = classname##_info(); \\\n    \\\n    ::cv::AlgorithmInfo* classname::info() const \\\n    { \\\n        static volatile bool initialized = false; \\\n        \\\n        if( !initialized ) \\\n        { \\\n            initialized = true; \\\n            classname obj; \\\n            memberinit; \\\n        } \\\n        return &classname##_info(); \\\n    }\n\n#endif //__cplusplus\n\n/* maximal size of vector to run matrix operations on it inline (i.e. w/o ipp calls) */\n#define  CV_MAX_INLINE_MAT_OP_SIZE  10\n\n/* maximal linear size of matrix to allocate it on stack. */\n#define  CV_MAX_LOCAL_MAT_SIZE  32\n\n/* maximal size of local memory storage */\n#define  CV_MAX_LOCAL_SIZE  \\\n    (CV_MAX_LOCAL_MAT_SIZE*CV_MAX_LOCAL_MAT_SIZE*(int)sizeof(double))\n\n/* default image row align (in bytes) */\n#define  CV_DEFAULT_IMAGE_ROW_ALIGN  4\n\n/* matrices are continuous by default */\n#define  CV_DEFAULT_MAT_ROW_ALIGN  1\n\n/* maximum size of dynamic memory buffer.\n   cvAlloc reports an error if a larger block is requested. */\n#define  CV_MAX_ALLOC_SIZE    (((size_t)1 << (sizeof(size_t)*8-2)))\n\n/* the alignment of all the allocated buffers */\n#define  CV_MALLOC_ALIGN    16\n\n/* default alignment for dynamic data strucutures, resided in storages. */\n#define  CV_STRUCT_ALIGN    ((int)sizeof(double))\n\n/* default storage block size */\n#define  CV_STORAGE_BLOCK_SIZE   ((1<<16) - 128)\n\n/* default memory block for sparse array elements */\n#define  CV_SPARSE_MAT_BLOCK    (1<<12)\n\n/* initial hash table size */\n#define  CV_SPARSE_HASH_SIZE0    (1<<10)\n\n/* maximal average node_count/hash_size ratio beyond which hash table is resized */\n#define  CV_SPARSE_HASH_RATIO    3\n\n/* max length of strings */\n#define  CV_MAX_STRLEN  1024\n\n#if 0 /*def  CV_CHECK_FOR_NANS*/\n#  define CV_CHECK_NANS( arr ) cvCheckArray((arr))\n#else\n#  define CV_CHECK_NANS( arr )\n#endif\n\n/****************************************************************************************\\\n*                                  Common declarations                                   *\n\\****************************************************************************************/\n\n#ifdef __GNUC__\n#  define CV_DECL_ALIGNED(x) __attribute__ ((aligned (x)))\n#elif defined _MSC_VER\n#  define CV_DECL_ALIGNED(x) __declspec(align(x))\n#else\n#  define CV_DECL_ALIGNED(x)\n#endif\n\n#ifndef CV_IMPL\n#  define CV_IMPL CV_EXTERN_C\n#endif\n\n#define CV_DBG_BREAK() { volatile int* crashMe = 0; *crashMe = 0; }\n\n/* default step, set in case of continuous data\n   to work around checks for valid step in some ipp functions */\n#define  CV_STUB_STEP     (1 << 30)\n\n#define  CV_SIZEOF_FLOAT ((int)sizeof(float))\n#define  CV_SIZEOF_SHORT ((int)sizeof(short))\n\n#define  CV_ORIGIN_TL  0\n#define  CV_ORIGIN_BL  1\n\n/* IEEE754 constants and macros */\n#define  CV_POS_INF       0x7f800000\n#define  CV_NEG_INF       0x807fffff /* CV_TOGGLE_FLT(0xff800000) */\n#define  CV_1F            0x3f800000\n#define  CV_TOGGLE_FLT(x) ((x)^((int)(x) < 0 ? 0x7fffffff : 0))\n#define  CV_TOGGLE_DBL(x) \\\n    ((x)^((int64)(x) < 0 ? CV_BIG_INT(0x7fffffffffffffff) : 0))\n\n#define  CV_NOP(a)      (a)\n#define  CV_ADD(a, b)   ((a) + (b))\n#define  CV_SUB(a, b)   ((a) - (b))\n#define  CV_MUL(a, b)   ((a) * (b))\n#define  CV_AND(a, b)   ((a) & (b))\n#define  CV_OR(a, b)    ((a) | (b))\n#define  CV_XOR(a, b)   ((a) ^ (b))\n#define  CV_ANDN(a, b)  (~(a) & (b))\n#define  CV_ORN(a, b)   (~(a) | (b))\n#define  CV_SQR(a)      ((a) * (a))\n\n#define  CV_LT(a, b)    ((a) < (b))\n#define  CV_LE(a, b)    ((a) <= (b))\n#define  CV_EQ(a, b)    ((a) == (b))\n#define  CV_NE(a, b)    ((a) != (b))\n#define  CV_GT(a, b)    ((a) > (b))\n#define  CV_GE(a, b)    ((a) >= (b))\n\n#define  CV_NONZERO(a)      ((a) != 0)\n#define  CV_NONZERO_FLT(a)  (((a)+(a)) != 0)\n\n/* general-purpose saturation macros */\n#define  CV_CAST_8U(t)  (uchar)(!((t) & ~255) ? (t) : (t) > 0 ? 255 : 0)\n#define  CV_CAST_8S(t)  (schar)(!(((t)+128) & ~255) ? (t) : (t) > 0 ? 127 : -128)\n#define  CV_CAST_16U(t) (ushort)(!((t) & ~65535) ? (t) : (t) > 0 ? 65535 : 0)\n#define  CV_CAST_16S(t) (short)(!(((t)+32768) & ~65535) ? (t) : (t) > 0 ? 32767 : -32768)\n#define  CV_CAST_32S(t) (int)(t)\n#define  CV_CAST_64S(t) (int64)(t)\n#define  CV_CAST_32F(t) (float)(t)\n#define  CV_CAST_64F(t) (double)(t)\n\n#define  CV_PASTE2(a,b) a##b\n#define  CV_PASTE(a,b)  CV_PASTE2(a,b)\n\n#define  CV_EMPTY\n#define  CV_MAKE_STR(a) #a\n\n#define  CV_ZERO_OBJ(x) memset((x), 0, sizeof(*(x)))\n\n#define  CV_DIM(static_array) ((int)(sizeof(static_array)/sizeof((static_array)[0])))\n\n#define  cvUnsupportedFormat \"Unsupported format\"\n\nCV_INLINE void* cvAlignPtr( const void* ptr, int align CV_DEFAULT(32) )\n{\n    assert( (align & (align-1)) == 0 );\n    return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) );\n}\n\nCV_INLINE int cvAlign( int size, int align )\n{\n    assert( (align & (align-1)) == 0 && size < INT_MAX );\n    return (size + align - 1) & -align;\n}\n\nCV_INLINE  CvSize  cvGetMatSize( const CvMat* mat )\n{\n    CvSize size;\n    size.width = mat->cols;\n    size.height = mat->rows;\n    return size;\n}\n\n#define  CV_DESCALE(x,n)     (((x) + (1 << ((n)-1))) >> (n))\n#define  CV_FLT_TO_FIX(x,n)  cvRound((x)*(1<<(n)))\n\n/****************************************************************************************\\\n\n  Generic implementation of QuickSort algorithm.\n  ----------------------------------------------\n  Using this macro user can declare customized sort function that can be much faster\n  than built-in qsort function because of lower overhead on elements\n  comparison and exchange. The macro takes less_than (or LT) argument - a macro or function\n  that takes 2 arguments returns non-zero if the first argument should be before the second\n  one in the sorted sequence and zero otherwise.\n\n  Example:\n\n    Suppose that the task is to sort points by ascending of y coordinates and if\n    y's are equal x's should ascend.\n\n    The code is:\n    ------------------------------------------------------------------------------\n           #define cmp_pts( pt1, pt2 ) \\\n               ((pt1).y < (pt2).y || ((pt1).y < (pt2).y && (pt1).x < (pt2).x))\n\n           [static] CV_IMPLEMENT_QSORT( icvSortPoints, CvPoint, cmp_pts )\n    ------------------------------------------------------------------------------\n\n    After that the function \"void icvSortPoints( CvPoint* array, size_t total, int aux );\"\n    is available to user.\n\n  aux is an additional parameter, which can be used when comparing elements.\n  The current implementation was derived from *BSD system qsort():\n\n    * Copyright (c) 1992, 1993\n    *  The Regents of the University of California.  All rights reserved.\n    *\n    * Redistribution and use in source and binary forms, with or without\n    * modification, are permitted provided that the following conditions\n    * are met:\n    * 1. Redistributions of source code must retain the above copyright\n    *    notice, this list of conditions and the following disclaimer.\n    * 2. Redistributions in binary form must reproduce the above copyright\n    *    notice, this list of conditions and the following disclaimer in the\n    *    documentation and/or other materials provided with the distribution.\n    * 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 University of\n    *  California, Berkeley and its contributors.\n    * 4. Neither the name of the University nor the names of its contributors\n    *    may be used to endorse or promote products derived from this software\n    *    without specific prior written permission.\n    *\n    * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n    * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n    * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    * SUCH DAMAGE.\n\n\\****************************************************************************************/\n\n#define CV_IMPLEMENT_QSORT_EX( func_name, T, LT, user_data_type )                   \\\nvoid func_name( T *array, size_t total, user_data_type aux )                        \\\n{                                                                                   \\\n    int isort_thresh = 7;                                                           \\\n    T t;                                                                            \\\n    int sp = 0;                                                                     \\\n                                                                                    \\\n    struct                                                                          \\\n    {                                                                               \\\n        T *lb;                                                                      \\\n        T *ub;                                                                      \\\n    }                                                                               \\\n    stack[48];                                                                      \\\n                                                                                    \\\n    aux = aux;                                                                      \\\n                                                                                    \\\n    if( total <= 1 )                                                                \\\n        return;                                                                     \\\n                                                                                    \\\n    stack[0].lb = array;                                                            \\\n    stack[0].ub = array + (total - 1);                                              \\\n                                                                                    \\\n    while( sp >= 0 )                                                                \\\n    {                                                                               \\\n        T* left = stack[sp].lb;                                                     \\\n        T* right = stack[sp--].ub;                                                  \\\n                                                                                    \\\n        for(;;)                                                                     \\\n        {                                                                           \\\n            int i, n = (int)(right - left) + 1, m;                                  \\\n            T* ptr;                                                                 \\\n            T* ptr2;                                                                \\\n                                                                                    \\\n            if( n <= isort_thresh )                                                 \\\n            {                                                                       \\\n            insert_sort:                                                            \\\n                for( ptr = left + 1; ptr <= right; ptr++ )                          \\\n                {                                                                   \\\n                    for( ptr2 = ptr; ptr2 > left && LT(ptr2[0],ptr2[-1]); ptr2--)   \\\n                        CV_SWAP( ptr2[0], ptr2[-1], t );                            \\\n                }                                                                   \\\n                break;                                                              \\\n            }                                                                       \\\n            else                                                                    \\\n            {                                                                       \\\n                T* left0;                                                           \\\n                T* left1;                                                           \\\n                T* right0;                                                          \\\n                T* right1;                                                          \\\n                T* pivot;                                                           \\\n                T* a;                                                               \\\n                T* b;                                                               \\\n                T* c;                                                               \\\n                int swap_cnt = 0;                                                   \\\n                                                                                    \\\n                left0 = left;                                                       \\\n                right0 = right;                                                     \\\n                pivot = left + (n/2);                                               \\\n                                                                                    \\\n                if( n > 40 )                                                        \\\n                {                                                                   \\\n                    int d = n / 8;                                                  \\\n                    a = left, b = left + d, c = left + 2*d;                         \\\n                    left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))     \\\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \\\n                                                                                    \\\n                    a = pivot - d, b = pivot, c = pivot + d;                        \\\n                    pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))    \\\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \\\n                                                                                    \\\n                    a = right - 2*d, b = right - d, c = right;                      \\\n                    right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))    \\\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \\\n                }                                                                   \\\n                                                                                    \\\n                a = left, b = pivot, c = right;                                     \\\n                pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))        \\\n                                   : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));       \\\n                if( pivot != left0 )                                                \\\n                {                                                                   \\\n                    CV_SWAP( *pivot, *left0, t );                                   \\\n                    pivot = left0;                                                  \\\n                }                                                                   \\\n                left = left1 = left0 + 1;                                           \\\n                right = right1 = right0;                                            \\\n                                                                                    \\\n                for(;;)                                                             \\\n                {                                                                   \\\n                    while( left <= right && !LT(*pivot, *left) )                    \\\n                    {                                                               \\\n                        if( !LT(*left, *pivot) )                                    \\\n                        {                                                           \\\n                            if( left > left1 )                                      \\\n                                CV_SWAP( *left1, *left, t );                        \\\n                            swap_cnt = 1;                                           \\\n                            left1++;                                                \\\n                        }                                                           \\\n                        left++;                                                     \\\n                    }                                                               \\\n                                                                                    \\\n                    while( left <= right && !LT(*right, *pivot) )                   \\\n                    {                                                               \\\n                        if( !LT(*pivot, *right) )                                   \\\n                        {                                                           \\\n                            if( right < right1 )                                    \\\n                                CV_SWAP( *right1, *right, t );                      \\\n                            swap_cnt = 1;                                           \\\n                            right1--;                                               \\\n                        }                                                           \\\n                        right--;                                                    \\\n                    }                                                               \\\n                                                                                    \\\n                    if( left > right )                                              \\\n                        break;                                                      \\\n                    CV_SWAP( *left, *right, t );                                    \\\n                    swap_cnt = 1;                                                   \\\n                    left++;                                                         \\\n                    right--;                                                        \\\n                }                                                                   \\\n                                                                                    \\\n                if( swap_cnt == 0 )                                                 \\\n                {                                                                   \\\n                    left = left0, right = right0;                                   \\\n                    goto insert_sort;                                               \\\n                }                                                                   \\\n                                                                                    \\\n                n = MIN( (int)(left1 - left0), (int)(left - left1) );               \\\n                for( i = 0; i < n; i++ )                                            \\\n                    CV_SWAP( left0[i], left[i-n], t );                              \\\n                                                                                    \\\n                n = MIN( (int)(right0 - right1), (int)(right1 - right) );           \\\n                for( i = 0; i < n; i++ )                                            \\\n                    CV_SWAP( left[i], right0[i-n+1], t );                           \\\n                n = (int)(left - left1);                                            \\\n                m = (int)(right1 - right);                                          \\\n                if( n > 1 )                                                         \\\n                {                                                                   \\\n                    if( m > 1 )                                                     \\\n                    {                                                               \\\n                        if( n > m )                                                 \\\n                        {                                                           \\\n                            stack[++sp].lb = left0;                                 \\\n                            stack[sp].ub = left0 + n - 1;                           \\\n                            left = right0 - m + 1, right = right0;                  \\\n                        }                                                           \\\n                        else                                                        \\\n                        {                                                           \\\n                            stack[++sp].lb = right0 - m + 1;                        \\\n                            stack[sp].ub = right0;                                  \\\n                            left = left0, right = left0 + n - 1;                    \\\n                        }                                                           \\\n                    }                                                               \\\n                    else                                                            \\\n                        left = left0, right = left0 + n - 1;                        \\\n                }                                                                   \\\n                else if( m > 1 )                                                    \\\n                    left = right0 - m + 1, right = right0;                          \\\n                else                                                                \\\n                    break;                                                          \\\n            }                                                                       \\\n        }                                                                           \\\n    }                                                                               \\\n}\n\n#define CV_IMPLEMENT_QSORT( func_name, T, cmp )  \\\n    CV_IMPLEMENT_QSORT_EX( func_name, T, cmp, int )\n\n/****************************************************************************************\\\n*                     Structures and macros for integration with IPP                     *\n\\****************************************************************************************/\n\n/* IPP-compatible return codes */\ntypedef enum CvStatus\n{\n    CV_BADMEMBLOCK_ERR          = -113,\n    CV_INPLACE_NOT_SUPPORTED_ERR= -112,\n    CV_UNMATCHED_ROI_ERR        = -111,\n    CV_NOTFOUND_ERR             = -110,\n    CV_BADCONVERGENCE_ERR       = -109,\n\n    CV_BADDEPTH_ERR             = -107,\n    CV_BADROI_ERR               = -106,\n    CV_BADHEADER_ERR            = -105,\n    CV_UNMATCHED_FORMATS_ERR    = -104,\n    CV_UNSUPPORTED_COI_ERR      = -103,\n    CV_UNSUPPORTED_CHANNELS_ERR = -102,\n    CV_UNSUPPORTED_DEPTH_ERR    = -101,\n    CV_UNSUPPORTED_FORMAT_ERR   = -100,\n\n    CV_BADARG_ERR               = -49,  //ipp comp\n    CV_NOTDEFINED_ERR           = -48,  //ipp comp\n\n    CV_BADCHANNELS_ERR          = -47,  //ipp comp\n    CV_BADRANGE_ERR             = -44,  //ipp comp\n    CV_BADSTEP_ERR              = -29,  //ipp comp\n\n    CV_BADFLAG_ERR              =  -12,\n    CV_DIV_BY_ZERO_ERR          =  -11, //ipp comp\n    CV_BADCOEF_ERR              =  -10,\n\n    CV_BADFACTOR_ERR            =  -7,\n    CV_BADPOINT_ERR             =  -6,\n    CV_BADSCALE_ERR             =  -4,\n    CV_OUTOFMEM_ERR             =  -3,\n    CV_NULLPTR_ERR              =  -2,\n    CV_BADSIZE_ERR              =  -1,\n    CV_NO_ERR                   =   0,\n    CV_OK                       =   CV_NO_ERR\n}\nCvStatus;\n\n#define CV_NOTHROW throw()\n\ntypedef struct CvFuncTable\n{\n    void*   fn_2d[CV_DEPTH_MAX];\n}\nCvFuncTable;\n\ntypedef struct CvBigFuncTable\n{\n    void*   fn_2d[CV_DEPTH_MAX*4];\n} CvBigFuncTable;\n\n#define CV_INIT_FUNC_TAB( tab, FUNCNAME, FLAG )         \\\n    (tab).fn_2d[CV_8U] = (void*)FUNCNAME##_8u##FLAG;    \\\n    (tab).fn_2d[CV_8S] = 0;                             \\\n    (tab).fn_2d[CV_16U] = (void*)FUNCNAME##_16u##FLAG;  \\\n    (tab).fn_2d[CV_16S] = (void*)FUNCNAME##_16s##FLAG;  \\\n    (tab).fn_2d[CV_32S] = (void*)FUNCNAME##_32s##FLAG;  \\\n    (tab).fn_2d[CV_32F] = (void*)FUNCNAME##_32f##FLAG;  \\\n    (tab).fn_2d[CV_64F] = (void*)FUNCNAME##_64f##FLAG\n\n#ifdef __cplusplus\n\n// < Deprecated\n\nclass CV_EXPORTS CvOpenGlFuncTab\n{\npublic:\n    virtual ~CvOpenGlFuncTab();\n\n    virtual void genBuffers(int n, unsigned int* buffers) const = 0;\n    virtual void deleteBuffers(int n, const unsigned int* buffers) const = 0;\n\n    virtual void bufferData(unsigned int target, ptrdiff_t size, const void* data, unsigned int usage) const = 0;\n    virtual void bufferSubData(unsigned int target, ptrdiff_t offset, ptrdiff_t size, const void* data) const = 0;\n\n    virtual void bindBuffer(unsigned int target, unsigned int buffer) const = 0;\n\n    virtual void* mapBuffer(unsigned int target, unsigned int access) const = 0;\n    virtual void unmapBuffer(unsigned int target) const = 0;\n\n    virtual void generateBitmapFont(const std::string& family, int height, int weight, bool italic, bool underline, int start, int count, int base) const = 0;\n\n    virtual bool isGlContextInitialized() const = 0;\n};\n\nCV_EXPORTS void icvSetOpenGlFuncTab(const CvOpenGlFuncTab* tab);\n\nCV_EXPORTS bool icvCheckGlError(const char* file, const int line, const char* func = \"\");\n\n// >\n\nnamespace cv { namespace ogl {\nCV_EXPORTS bool checkError(const char* file, const int line, const char* func = \"\");\n}}\n\n#define CV_CheckGlError() CV_DbgAssert( (cv::ogl::checkError(__FILE__, __LINE__, CV_Func)) )\n\n#endif //__cplusplus\n\n#endif // __OPENCV_CORE_INTERNAL_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/mat.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_MATRIX_OPERATIONS_HPP__\n#define __OPENCV_CORE_MATRIX_OPERATIONS_HPP__\n\n#ifndef SKIP_INCLUDES\n#include <limits.h>\n#include <string.h>\n#endif // SKIP_INCLUDES\n\n#ifdef __cplusplus\n\nnamespace cv\n{\n\n//////////////////////////////// Mat ////////////////////////////////\n\ninline void Mat::initEmpty()\n{\n    flags = MAGIC_VAL;\n    dims = rows = cols = 0;\n    data = datastart = dataend = datalimit = 0;\n    refcount = 0;\n    allocator = 0;\n}\n\ninline Mat::Mat() : size(&rows)\n{\n    initEmpty();\n}\n\ninline Mat::Mat(int _rows, int _cols, int _type) : size(&rows)\n{\n    initEmpty();\n    create(_rows, _cols, _type);\n}\n\ninline Mat::Mat(int _rows, int _cols, int _type, const Scalar& _s) : size(&rows)\n{\n    initEmpty();\n    create(_rows, _cols, _type);\n    *this = _s;\n}\n\ninline Mat::Mat(Size _sz, int _type) : size(&rows)\n{\n    initEmpty();\n    create( _sz.height, _sz.width, _type );\n}\n\ninline Mat::Mat(Size _sz, int _type, const Scalar& _s) : size(&rows)\n{\n    initEmpty();\n    create(_sz.height, _sz.width, _type);\n    *this = _s;\n}\n\ninline Mat::Mat(int _dims, const int* _sz, int _type) : size(&rows)\n{\n    initEmpty();\n    create(_dims, _sz, _type);\n}\n\ninline Mat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s) : size(&rows)\n{\n    initEmpty();\n    create(_dims, _sz, _type);\n    *this = _s;\n}\n\ninline Mat::Mat(const Mat& m)\n    : flags(m.flags), dims(m.dims), rows(m.rows), cols(m.cols), data(m.data),\n    refcount(m.refcount), datastart(m.datastart), dataend(m.dataend),\n    datalimit(m.datalimit), allocator(m.allocator), size(&rows)\n{\n    if( refcount )\n        CV_XADD(refcount, 1);\n    if( m.dims <= 2 )\n    {\n        step[0] = m.step[0]; step[1] = m.step[1];\n    }\n    else\n    {\n        dims = 0;\n        copySize(m);\n    }\n}\n\ninline Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step)\n    : flags(MAGIC_VAL + (_type & TYPE_MASK)), dims(2), rows(_rows), cols(_cols),\n    data((uchar*)_data), refcount(0), datastart((uchar*)_data), dataend(0),\n    datalimit(0), allocator(0), size(&rows)\n{\n    size_t esz = CV_ELEM_SIZE(_type), minstep = cols*esz;\n    if( _step == AUTO_STEP )\n    {\n        _step = minstep;\n        flags |= CONTINUOUS_FLAG;\n    }\n    else\n    {\n        if( rows == 1 ) _step = minstep;\n        CV_DbgAssert( _step >= minstep );\n        flags |= _step == minstep ? CONTINUOUS_FLAG : 0;\n    }\n    step[0] = _step; step[1] = esz;\n    datalimit = datastart + _step*rows;\n    dataend = datalimit - _step + minstep;\n}\n\ninline Mat::Mat(Size _sz, int _type, void* _data, size_t _step)\n    : flags(MAGIC_VAL + (_type & TYPE_MASK)), dims(2), rows(_sz.height), cols(_sz.width),\n    data((uchar*)_data), refcount(0), datastart((uchar*)_data), dataend(0),\n    datalimit(0), allocator(0), size(&rows)\n{\n    size_t esz = CV_ELEM_SIZE(_type), minstep = cols*esz;\n    if( _step == AUTO_STEP )\n    {\n        _step = minstep;\n        flags |= CONTINUOUS_FLAG;\n    }\n    else\n    {\n        if( rows == 1 ) _step = minstep;\n        CV_DbgAssert( _step >= minstep );\n        flags |= _step == minstep ? CONTINUOUS_FLAG : 0;\n    }\n    step[0] = _step; step[1] = esz;\n    datalimit = datastart + _step*rows;\n    dataend = datalimit - _step + minstep;\n}\n\n\ntemplate<typename _Tp> inline Mat::Mat(const vector<_Tp>& vec, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows((int)vec.size()), cols(1), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if(vec.empty())\n        return;\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)&vec[0];\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n        Mat((int)vec.size(), 1, DataType<_Tp>::type, (uchar*)&vec[0]).copyTo(*this);\n}\n\n\ntemplate<typename _Tp, int n> inline Mat::Mat(const Vec<_Tp, n>& vec, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows(n), cols(1), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)vec.val;\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n        Mat(n, 1, DataType<_Tp>::type, (void*)vec.val).copyTo(*this);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline Mat::Mat(const Matx<_Tp,m,n>& M, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows(m), cols(n), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = cols*sizeof(_Tp);\n        step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)M.val;\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n        Mat(m, n, DataType<_Tp>::type, (uchar*)M.val).copyTo(*this);\n}\n\n\ntemplate<typename _Tp> inline Mat::Mat(const Point_<_Tp>& pt, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows(2), cols(1), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)&pt.x;\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n    {\n        create(2, 1, DataType<_Tp>::type);\n        ((_Tp*)data)[0] = pt.x;\n        ((_Tp*)data)[1] = pt.y;\n    }\n}\n\n\ntemplate<typename _Tp> inline Mat::Mat(const Point3_<_Tp>& pt, bool copyData)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(2), rows(3), cols(1), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    if( !copyData )\n    {\n        step[0] = step[1] = sizeof(_Tp);\n        data = datastart = (uchar*)&pt.x;\n        datalimit = dataend = datastart + rows*step[0];\n    }\n    else\n    {\n        create(3, 1, DataType<_Tp>::type);\n        ((_Tp*)data)[0] = pt.x;\n        ((_Tp*)data)[1] = pt.y;\n        ((_Tp*)data)[2] = pt.z;\n    }\n}\n\n\ntemplate<typename _Tp> inline Mat::Mat(const MatCommaInitializer_<_Tp>& commaInitializer)\n    : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),\n    dims(0), rows(0), cols(0), data(0), refcount(0),\n    datastart(0), dataend(0), allocator(0), size(&rows)\n{\n    *this = *commaInitializer;\n}\n\ninline Mat::~Mat()\n{\n    release();\n    if( step.p != step.buf )\n        fastFree(step.p);\n}\n\ninline Mat& Mat::operator = (const Mat& m)\n{\n    if( this != &m )\n    {\n        if( m.refcount )\n            CV_XADD(m.refcount, 1);\n        release();\n        flags = m.flags;\n        if( dims <= 2 && m.dims <= 2 )\n        {\n            dims = m.dims;\n            rows = m.rows;\n            cols = m.cols;\n            step[0] = m.step[0];\n            step[1] = m.step[1];\n        }\n        else\n            copySize(m);\n        data = m.data;\n        datastart = m.datastart;\n        dataend = m.dataend;\n        datalimit = m.datalimit;\n        refcount = m.refcount;\n        allocator = m.allocator;\n    }\n    return *this;\n}\n\ninline Mat Mat::row(int y) const { return Mat(*this, Range(y, y+1), Range::all()); }\ninline Mat Mat::col(int x) const { return Mat(*this, Range::all(), Range(x, x+1)); }\ninline Mat Mat::rowRange(int startrow, int endrow) const\n    { return Mat(*this, Range(startrow, endrow), Range::all()); }\ninline Mat Mat::rowRange(const Range& r) const\n    { return Mat(*this, r, Range::all()); }\ninline Mat Mat::colRange(int startcol, int endcol) const\n    { return Mat(*this, Range::all(), Range(startcol, endcol)); }\ninline Mat Mat::colRange(const Range& r) const\n    { return Mat(*this, Range::all(), r); }\n\ninline Mat Mat::diag(const Mat& d)\n{\n    CV_Assert( d.cols == 1 || d.rows == 1 );\n    int len = d.rows + d.cols - 1;\n    Mat m(len, len, d.type(), Scalar(0)), md = m.diag();\n    if( d.cols == 1 )\n        d.copyTo(md);\n    else\n        transpose(d, md);\n    return m;\n}\n\ninline Mat Mat::clone() const\n{\n    Mat m;\n    copyTo(m);\n    return m;\n}\n\ninline void Mat::assignTo( Mat& m, int _type ) const\n{\n    if( _type < 0 )\n        m = *this;\n    else\n        convertTo(m, _type);\n}\n\ninline void Mat::create(int _rows, int _cols, int _type)\n{\n    _type &= TYPE_MASK;\n    if( dims <= 2 && rows == _rows && cols == _cols && type() == _type && data )\n        return;\n    int sz[] = {_rows, _cols};\n    create(2, sz, _type);\n}\n\ninline void Mat::create(Size _sz, int _type)\n{\n    create(_sz.height, _sz.width, _type);\n}\n\ninline void Mat::addref()\n{ if( refcount ) CV_XADD(refcount, 1); }\n\ninline void Mat::release()\n{\n    if( refcount && CV_XADD(refcount, -1) == 1 )\n        deallocate();\n    data = datastart = dataend = datalimit = 0;\n    size.p[0] = 0;\n    refcount = 0;\n}\n\ninline Mat Mat::operator()( Range _rowRange, Range _colRange ) const\n{\n    return Mat(*this, _rowRange, _colRange);\n}\n\ninline Mat Mat::operator()( const Rect& roi ) const\n{ return Mat(*this, roi); }\n\ninline Mat Mat::operator()(const Range* ranges) const\n{\n    return Mat(*this, ranges);\n}\n\ninline Mat::operator CvMat() const\n{\n    CV_DbgAssert(dims <= 2);\n    CvMat m = cvMat(rows, dims == 1 ? 1 : cols, type(), data);\n    m.step = (int)step[0];\n    m.type = (m.type & ~CONTINUOUS_FLAG) | (flags & CONTINUOUS_FLAG);\n    return m;\n}\n\ninline bool Mat::isContinuous() const { return (flags & CONTINUOUS_FLAG) != 0; }\ninline bool Mat::isSubmatrix() const { return (flags & SUBMATRIX_FLAG) != 0; }\ninline size_t Mat::elemSize() const { return dims > 0 ? step.p[dims-1] : 0; }\ninline size_t Mat::elemSize1() const { return CV_ELEM_SIZE1(flags); }\ninline int Mat::type() const { return CV_MAT_TYPE(flags); }\ninline int Mat::depth() const { return CV_MAT_DEPTH(flags); }\ninline int Mat::channels() const { return CV_MAT_CN(flags); }\ninline size_t Mat::step1(int i) const { return step.p[i]/elemSize1(); }\ninline bool Mat::empty() const { return data == 0 || total() == 0; }\ninline size_t Mat::total() const\n{\n    if( dims <= 2 )\n        return (size_t)rows*cols;\n    size_t p = 1;\n    for( int i = 0; i < dims; i++ )\n        p *= size[i];\n    return p;\n}\n\ninline uchar* Mat::ptr(int y)\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return data + step.p[0]*y;\n}\n\ninline const uchar* Mat::ptr(int y) const\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return data + step.p[0]*y;\n}\n\ntemplate<typename _Tp> inline _Tp* Mat::ptr(int y)\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return (_Tp*)(data + step.p[0]*y);\n}\n\ntemplate<typename _Tp> inline const _Tp* Mat::ptr(int y) const\n{\n    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );\n    return (const _Tp*)(data + step.p[0]*y);\n}\n\n\ninline uchar* Mat::ptr(int i0, int i1)\n{\n    CV_DbgAssert( dims >= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] );\n    return data + i0*step.p[0] + i1*step.p[1];\n}\n\ninline const uchar* Mat::ptr(int i0, int i1) const\n{\n    CV_DbgAssert( dims >= 2 && data &&\n                 (unsigned)i0 < (unsigned)size.p[0] &&\n                 (unsigned)i1 < (unsigned)size.p[1] );\n    return data + i0*step.p[0] + i1*step.p[1];\n}\n\ntemplate<typename _Tp> inline _Tp* Mat::ptr(int i0, int i1)\n{\n    CV_DbgAssert( dims >= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] );\n    return (_Tp*)(data + i0*step.p[0] + i1*step.p[1]);\n}\n\ntemplate<typename _Tp> inline const _Tp* Mat::ptr(int i0, int i1) const\n{\n    CV_DbgAssert( dims >= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] );\n    return (const _Tp*)(data + i0*step.p[0] + i1*step.p[1]);\n}\n\ninline uchar* Mat::ptr(int i0, int i1, int i2)\n{\n    CV_DbgAssert( dims >= 3 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  (unsigned)i2 < (unsigned)size.p[2] );\n    return data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2];\n}\n\ninline const uchar* Mat::ptr(int i0, int i1, int i2) const\n{\n    CV_DbgAssert( dims >= 3 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  (unsigned)i2 < (unsigned)size.p[2] );\n    return data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2];\n}\n\ntemplate<typename _Tp> inline _Tp* Mat::ptr(int i0, int i1, int i2)\n{\n    CV_DbgAssert( dims >= 3 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  (unsigned)i2 < (unsigned)size.p[2] );\n    return (_Tp*)(data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2]);\n}\n\ntemplate<typename _Tp> inline const _Tp* Mat::ptr(int i0, int i1, int i2) const\n{\n    CV_DbgAssert( dims >= 3 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  (unsigned)i2 < (unsigned)size.p[2] );\n    return (const _Tp*)(data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2]);\n}\n\ninline uchar* Mat::ptr(const int* idx)\n{\n    int i, d = dims;\n    uchar* p = data;\n    CV_DbgAssert( d >= 1 && p );\n    for( i = 0; i < d; i++ )\n    {\n        CV_DbgAssert( (unsigned)idx[i] < (unsigned)size.p[i] );\n        p += idx[i]*step.p[i];\n    }\n    return p;\n}\n\ninline const uchar* Mat::ptr(const int* idx) const\n{\n    int i, d = dims;\n    uchar* p = data;\n    CV_DbgAssert( d >= 1 && p );\n    for( i = 0; i < d; i++ )\n    {\n        CV_DbgAssert( (unsigned)idx[i] < (unsigned)size.p[i] );\n        p += idx[i]*step.p[i];\n    }\n    return p;\n}\n\ntemplate<typename _Tp> inline _Tp& Mat::at(int i0, int i1)\n{\n    CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] &&\n        (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&\n        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((_Tp*)(data + step.p[0]*i0))[i1];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat::at(int i0, int i1) const\n{\n    CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] &&\n        (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&\n        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((const _Tp*)(data + step.p[0]*i0))[i1];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat::at(Point pt)\n{\n    CV_DbgAssert( dims <= 2 && data && (unsigned)pt.y < (unsigned)size.p[0] &&\n        (unsigned)(pt.x*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&\n        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((_Tp*)(data + step.p[0]*pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat::at(Point pt) const\n{\n    CV_DbgAssert( dims <= 2 && data && (unsigned)pt.y < (unsigned)size.p[0] &&\n        (unsigned)(pt.x*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&\n        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());\n    return ((const _Tp*)(data + step.p[0]*pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat::at(int i0)\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                 (unsigned)i0 < (unsigned)(size.p[0]*size.p[1]) &&\n                 elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    if( isContinuous() || size.p[0] == 1 )\n        return ((_Tp*)data)[i0];\n    if( size.p[1] == 1 )\n        return *(_Tp*)(data + step.p[0]*i0);\n    int i = i0/cols, j = i0 - i*cols;\n    return ((_Tp*)(data + step.p[0]*i))[j];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat::at(int i0) const\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                 (unsigned)i0 < (unsigned)(size.p[0]*size.p[1]) &&\n                 elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    if( isContinuous() || size.p[0] == 1 )\n        return ((const _Tp*)data)[i0];\n    if( size.p[1] == 1 )\n        return *(const _Tp*)(data + step.p[0]*i0);\n    int i = i0/cols, j = i0 - i*cols;\n    return ((const _Tp*)(data + step.p[0]*i))[j];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat::at(int i0, int i1, int i2)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(i0, i1, i2);\n}\ntemplate<typename _Tp> inline const _Tp& Mat::at(int i0, int i1, int i2) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(i0, i1, i2);\n}\ntemplate<typename _Tp> inline _Tp& Mat::at(const int* idx)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(idx);\n}\ntemplate<typename _Tp> inline const _Tp& Mat::at(const int* idx) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(idx);\n}\ntemplate<typename _Tp, int n> _Tp& Mat::at(const Vec<int, n>& idx)\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(_Tp*)ptr(idx.val);\n}\ntemplate<typename _Tp, int n> inline const _Tp& Mat::at(const Vec<int, n>& idx) const\n{\n    CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) );\n    return *(const _Tp*)ptr(idx.val);\n}\n\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> Mat::begin() const\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    return MatConstIterator_<_Tp>((const Mat_<_Tp>*)this);\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> Mat::end() const\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    MatConstIterator_<_Tp> it((const Mat_<_Tp>*)this);\n    it += total();\n    return it;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> Mat::begin()\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    return MatIterator_<_Tp>((Mat_<_Tp>*)this);\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> Mat::end()\n{\n    CV_DbgAssert( elemSize() == sizeof(_Tp) );\n    MatIterator_<_Tp> it((Mat_<_Tp>*)this);\n    it += total();\n    return it;\n}\n\ntemplate<typename _Tp> inline Mat::operator vector<_Tp>() const\n{\n    vector<_Tp> v;\n    copyTo(v);\n    return v;\n}\n\ntemplate<typename _Tp, int n> inline Mat::operator Vec<_Tp, n>() const\n{\n    CV_Assert( data && dims <= 2 && (rows == 1 || cols == 1) &&\n               rows + cols - 1 == n && channels() == 1 );\n\n    if( isContinuous() && type() == DataType<_Tp>::type )\n        return Vec<_Tp, n>((_Tp*)data);\n    Vec<_Tp, n> v; Mat tmp(rows, cols, DataType<_Tp>::type, v.val);\n    convertTo(tmp, tmp.type());\n    return v;\n}\n\ntemplate<typename _Tp, int m, int n> inline Mat::operator Matx<_Tp, m, n>() const\n{\n    CV_Assert( data && dims <= 2 && rows == m && cols == n && channels() == 1 );\n\n    if( isContinuous() && type() == DataType<_Tp>::type )\n        return Matx<_Tp, m, n>((_Tp*)data);\n    Matx<_Tp, m, n> mtx; Mat tmp(rows, cols, DataType<_Tp>::type, mtx.val);\n    convertTo(tmp, tmp.type());\n    return mtx;\n}\n\n\ntemplate<typename _Tp> inline void Mat::push_back(const _Tp& elem)\n{\n    if( !data )\n    {\n        *this = Mat(1, 1, DataType<_Tp>::type, (void*)&elem).clone();\n        return;\n    }\n    CV_Assert(DataType<_Tp>::type == type() && cols == 1\n              /* && dims == 2 (cols == 1 implies dims == 2) */);\n    uchar* tmp = dataend + step[0];\n    if( !isSubmatrix() && isContinuous() && tmp <= datalimit )\n    {\n        *(_Tp*)(data + (size.p[0]++)*step.p[0]) = elem;\n        dataend = tmp;\n    }\n    else\n        push_back_(&elem);\n}\n\ntemplate<typename _Tp> inline void Mat::push_back(const Mat_<_Tp>& m)\n{\n    push_back((const Mat&)m);\n}\n\ninline Mat::MSize::MSize(int* _p) : p(_p) {}\ninline Size Mat::MSize::operator()() const\n{\n    CV_DbgAssert(p[-1] <= 2);\n    return Size(p[1], p[0]);\n}\ninline const int& Mat::MSize::operator[](int i) const { return p[i]; }\ninline int& Mat::MSize::operator[](int i) { return p[i]; }\ninline Mat::MSize::operator const int*() const { return p; }\n\ninline bool Mat::MSize::operator == (const MSize& sz) const\n{\n    int d = p[-1], dsz = sz.p[-1];\n    if( d != dsz )\n        return false;\n    if( d == 2 )\n        return p[0] == sz.p[0] && p[1] == sz.p[1];\n\n    for( int i = 0; i < d; i++ )\n        if( p[i] != sz.p[i] )\n            return false;\n    return true;\n}\n\ninline bool Mat::MSize::operator != (const MSize& sz) const\n{\n    return !(*this == sz);\n}\n\ninline Mat::MStep::MStep() { p = buf; p[0] = p[1] = 0; }\ninline Mat::MStep::MStep(size_t s) { p = buf; p[0] = s; p[1] = 0; }\ninline const size_t& Mat::MStep::operator[](int i) const { return p[i]; }\ninline size_t& Mat::MStep::operator[](int i) { return p[i]; }\ninline Mat::MStep::operator size_t() const\n{\n    CV_DbgAssert( p == buf );\n    return buf[0];\n}\ninline Mat::MStep& Mat::MStep::operator = (size_t s)\n{\n    CV_DbgAssert( p == buf );\n    buf[0] = s;\n    return *this;\n}\n\nstatic inline Mat cvarrToMatND(const CvArr* arr, bool copyData=false, int coiMode=0)\n{\n    return cvarrToMat(arr, copyData, true, coiMode);\n}\n\n///////////////////////////////////////////// SVD //////////////////////////////////////////////////////\n\ninline SVD::SVD() {}\ninline SVD::SVD( InputArray m, int flags ) { operator ()(m, flags); }\ninline void SVD::solveZ( InputArray m, OutputArray _dst )\n{\n    Mat mtx = m.getMat();\n    SVD svd(mtx, (mtx.rows >= mtx.cols ? 0 : SVD::FULL_UV));\n    _dst.create(svd.vt.cols, 1, svd.vt.type());\n    Mat dst = _dst.getMat();\n    svd.vt.row(svd.vt.rows-1).reshape(1,svd.vt.cols).copyTo(dst);\n}\n\ntemplate<typename _Tp, int m, int n, int nm> inline void\n    SVD::compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt )\n{\n    assert( nm == MIN(m, n));\n    Mat _a(a, false), _u(u, false), _w(w, false), _vt(vt, false);\n    SVD::compute(_a, _w, _u, _vt);\n    CV_Assert(_w.data == (uchar*)&w.val[0] && _u.data == (uchar*)&u.val[0] && _vt.data == (uchar*)&vt.val[0]);\n}\n\ntemplate<typename _Tp, int m, int n, int nm> inline void\nSVD::compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w )\n{\n    assert( nm == MIN(m, n));\n    Mat _a(a, false), _w(w, false);\n    SVD::compute(_a, _w);\n    CV_Assert(_w.data == (uchar*)&w.val[0]);\n}\n\ntemplate<typename _Tp, int m, int n, int nm, int nb> inline void\nSVD::backSubst( const Matx<_Tp, nm, 1>& w, const Matx<_Tp, m, nm>& u,\n                const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs,\n                Matx<_Tp, n, nb>& dst )\n{\n    assert( nm == MIN(m, n));\n    Mat _u(u, false), _w(w, false), _vt(vt, false), _rhs(rhs, false), _dst(dst, false);\n    SVD::backSubst(_w, _u, _vt, _rhs, _dst);\n    CV_Assert(_dst.data == (uchar*)&dst.val[0]);\n}\n\n///////////////////////////////// Mat_<_Tp> ////////////////////////////////////\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_()\n    : Mat() { flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type; }\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _rows, int _cols)\n    : Mat(_rows, _cols, DataType<_Tp>::type) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _rows, int _cols, const _Tp& value)\n    : Mat(_rows, _cols, DataType<_Tp>::type) { *this = value; }\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(Size _sz)\n    : Mat(_sz.height, _sz.width, DataType<_Tp>::type) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(Size _sz, const _Tp& value)\n    : Mat(_sz.height, _sz.width, DataType<_Tp>::type) { *this = value; }\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _dims, const int* _sz)\n    : Mat(_dims, _sz, DataType<_Tp>::type) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _dims, const int* _sz, const _Tp& _s)\n    : Mat(_dims, _sz, DataType<_Tp>::type, Scalar(_s)) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat_<_Tp>& m, const Range* ranges)\n    : Mat(m, ranges) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat& m)\n    : Mat() { flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type; *this = m; }\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat_& m)\n    : Mat(m) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(int _rows, int _cols, _Tp* _data, size_t steps)\n    : Mat(_rows, _cols, DataType<_Tp>::type, _data, steps) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat_& m, const Range& _rowRange, const Range& _colRange)\n    : Mat(m, _rowRange, _colRange) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Mat_& m, const Rect& roi)\n    : Mat(m, roi) {}\n\ntemplate<typename _Tp> template<int n> inline\n    Mat_<_Tp>::Mat_(const Vec<typename DataType<_Tp>::channel_type, n>& vec, bool copyData)\n    : Mat(n/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&vec)\n{\n    CV_Assert(n%DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> template<int m, int n> inline\n    Mat_<_Tp>::Mat_(const Matx<typename DataType<_Tp>::channel_type,m,n>& M, bool copyData)\n    : Mat(m, n/DataType<_Tp>::channels, DataType<_Tp>::type, (void*)&M)\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Point_<typename DataType<_Tp>::channel_type>& pt, bool copyData)\n    : Mat(2/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&pt)\n{\n    CV_Assert(2 % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const Point3_<typename DataType<_Tp>::channel_type>& pt, bool copyData)\n    : Mat(3/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&pt)\n{\n    CV_Assert(3 % DataType<_Tp>::channels == 0);\n    if( copyData )\n        *this = clone();\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const MatCommaInitializer_<_Tp>& commaInitializer)\n    : Mat(commaInitializer) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const vector<_Tp>& vec, bool copyData)\n    : Mat(vec, copyData) {}\n\ntemplate<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::operator = (const Mat& m)\n{\n    if( DataType<_Tp>::type == m.type() )\n    {\n        Mat::operator = (m);\n        return *this;\n    }\n    if( DataType<_Tp>::depth == m.depth() )\n    {\n        return (*this = m.reshape(DataType<_Tp>::channels, m.dims, 0));\n    }\n    CV_DbgAssert(DataType<_Tp>::channels == m.channels());\n    m.convertTo(*this, type());\n    return *this;\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::operator = (const Mat_& m)\n{\n    Mat::operator=(m);\n    return *this;\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::operator = (const _Tp& s)\n{\n    typedef typename DataType<_Tp>::vec_type VT;\n    Mat::operator=(Scalar((const VT&)s));\n    return *this;\n}\n\ntemplate<typename _Tp> inline void Mat_<_Tp>::create(int _rows, int _cols)\n{\n    Mat::create(_rows, _cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline void Mat_<_Tp>::create(Size _sz)\n{\n    Mat::create(_sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline void Mat_<_Tp>::create(int _dims, const int* _sz)\n{\n    Mat::create(_dims, _sz, DataType<_Tp>::type);\n}\n\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::cross(const Mat_& m) const\n{ return Mat_<_Tp>(Mat::cross(m)); }\n\ntemplate<typename _Tp> template<typename T2> inline Mat_<_Tp>::operator Mat_<T2>() const\n{ return Mat_<T2>(*this); }\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::row(int y) const\n{ return Mat_(*this, Range(y, y+1), Range::all()); }\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::col(int x) const\n{ return Mat_(*this, Range::all(), Range(x, x+1)); }\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::diag(int d) const\n{ return Mat_(Mat::diag(d)); }\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::clone() const\n{ return Mat_(Mat::clone()); }\n\ntemplate<typename _Tp> inline size_t Mat_<_Tp>::elemSize() const\n{\n    CV_DbgAssert( Mat::elemSize() == sizeof(_Tp) );\n    return sizeof(_Tp);\n}\n\ntemplate<typename _Tp> inline size_t Mat_<_Tp>::elemSize1() const\n{\n    CV_DbgAssert( Mat::elemSize1() == sizeof(_Tp)/DataType<_Tp>::channels );\n    return sizeof(_Tp)/DataType<_Tp>::channels;\n}\ntemplate<typename _Tp> inline int Mat_<_Tp>::type() const\n{\n    CV_DbgAssert( Mat::type() == DataType<_Tp>::type );\n    return DataType<_Tp>::type;\n}\ntemplate<typename _Tp> inline int Mat_<_Tp>::depth() const\n{\n    CV_DbgAssert( Mat::depth() == DataType<_Tp>::depth );\n    return DataType<_Tp>::depth;\n}\ntemplate<typename _Tp> inline int Mat_<_Tp>::channels() const\n{\n    CV_DbgAssert( Mat::channels() == DataType<_Tp>::channels );\n    return DataType<_Tp>::channels;\n}\ntemplate<typename _Tp> inline size_t Mat_<_Tp>::stepT(int i) const { return step.p[i]/elemSize(); }\ntemplate<typename _Tp> inline size_t Mat_<_Tp>::step1(int i) const { return step.p[i]/elemSize1(); }\n\ntemplate<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::adjustROI( int dtop, int dbottom, int dleft, int dright )\n{ return (Mat_<_Tp>&)(Mat::adjustROI(dtop, dbottom, dleft, dright));  }\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::operator()( const Range& _rowRange, const Range& _colRange ) const\n{ return Mat_<_Tp>(*this, _rowRange, _colRange); }\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::operator()( const Rect& roi ) const\n{ return Mat_<_Tp>(*this, roi); }\n\ntemplate<typename _Tp> inline Mat_<_Tp> Mat_<_Tp>::operator()( const Range* ranges ) const\n{ return Mat_<_Tp>(*this, ranges); }\n\ntemplate<typename _Tp> inline _Tp* Mat_<_Tp>::operator [](int y)\n{ return (_Tp*)ptr(y); }\ntemplate<typename _Tp> inline const _Tp* Mat_<_Tp>::operator [](int y) const\n{ return (const _Tp*)ptr(y); }\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0, int i1)\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  type() == DataType<_Tp>::type );\n    return ((_Tp*)(data + step.p[0]*i0))[i1];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(int i0, int i1) const\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                  (unsigned)i0 < (unsigned)size.p[0] &&\n                  (unsigned)i1 < (unsigned)size.p[1] &&\n                  type() == DataType<_Tp>::type );\n    return ((const _Tp*)(data + step.p[0]*i0))[i1];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(Point pt)\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                  (unsigned)pt.y < (unsigned)size.p[0] &&\n                  (unsigned)pt.x < (unsigned)size.p[1] &&\n                  type() == DataType<_Tp>::type );\n    return ((_Tp*)(data + step.p[0]*pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(Point pt) const\n{\n    CV_DbgAssert( dims <= 2 && data &&\n                  (unsigned)pt.y < (unsigned)size.p[0] &&\n                  (unsigned)pt.x < (unsigned)size.p[1] &&\n                 type() == DataType<_Tp>::type );\n    return ((const _Tp*)(data + step.p[0]*pt.y))[pt.x];\n}\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(const int* idx)\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(const int* idx) const\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> template<int n> inline _Tp& Mat_<_Tp>::operator ()(const Vec<int, n>& idx)\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> template<int n> inline const _Tp& Mat_<_Tp>::operator ()(const Vec<int, n>& idx) const\n{\n    return Mat::at<_Tp>(idx);\n}\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0)\n{\n    return this->at<_Tp>(i0);\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(int i0) const\n{\n    return this->at<_Tp>(i0);\n}\n\ntemplate<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2)\n{\n    return this->at<_Tp>(i0, i1, i2);\n}\n\ntemplate<typename _Tp> inline const _Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2) const\n{\n    return this->at<_Tp>(i0, i1, i2);\n}\n\n\ntemplate<typename _Tp> inline Mat_<_Tp>::operator vector<_Tp>() const\n{\n    vector<_Tp> v;\n    copyTo(v);\n    return v;\n}\n\ntemplate<typename _Tp> template<int n> inline Mat_<_Tp>::operator Vec<typename DataType<_Tp>::channel_type, n>() const\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n    return this->Mat::operator Vec<typename DataType<_Tp>::channel_type, n>();\n}\n\ntemplate<typename _Tp> template<int m, int n> inline Mat_<_Tp>::operator Matx<typename DataType<_Tp>::channel_type, m, n>() const\n{\n    CV_Assert(n % DataType<_Tp>::channels == 0);\n\n    Matx<typename DataType<_Tp>::channel_type, m, n> res = this->Mat::operator Matx<typename DataType<_Tp>::channel_type, m, n>();\n    return res;\n}\n\ntemplate<typename T1, typename T2, typename Op> inline void\nprocess( const Mat_<T1>& m1, Mat_<T2>& m2, Op op )\n{\n    int y, x, rows = m1.rows, cols = m1.cols;\n\n    CV_DbgAssert( m1.size() == m2.size() );\n\n    for( y = 0; y < rows; y++ )\n    {\n        const T1* src = m1[y];\n        T2* dst = m2[y];\n\n        for( x = 0; x < cols; x++ )\n            dst[x] = op(src[x]);\n    }\n}\n\ntemplate<typename T1, typename T2, typename T3, typename Op> inline void\nprocess( const Mat_<T1>& m1, const Mat_<T2>& m2, Mat_<T3>& m3, Op op )\n{\n    int y, x, rows = m1.rows, cols = m1.cols;\n\n    CV_DbgAssert( m1.size() == m2.size() );\n\n    for( y = 0; y < rows; y++ )\n    {\n        const T1* src1 = m1[y];\n        const T2* src2 = m2[y];\n        T3* dst = m3[y];\n\n        for( x = 0; x < cols; x++ )\n            dst[x] = op( src1[x], src2[x] );\n    }\n}\n\n\n/////////////////////////////// Input/Output Arrays /////////////////////////////////\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const vector<_Tp>& vec)\n    : flags(FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type), obj((void*)&vec) {}\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const vector<vector<_Tp> >& vec)\n    : flags(FIXED_TYPE + STD_VECTOR_VECTOR + DataType<_Tp>::type), obj((void*)&vec) {}\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const vector<Mat_<_Tp> >& vec)\n    : flags(FIXED_TYPE + STD_VECTOR_MAT + DataType<_Tp>::type), obj((void*)&vec) {}\n\ntemplate<typename _Tp, int m, int n> inline _InputArray::_InputArray(const Matx<_Tp, m, n>& mtx)\n    : flags(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type), obj((void*)&mtx), sz(n, m) {}\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const _Tp* vec, int n)\n    : flags(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type), obj((void*)vec), sz(n, 1) {}\n\ninline _InputArray::_InputArray(const Scalar& s)\n    : flags(FIXED_TYPE + FIXED_SIZE + MATX + CV_64F), obj((void*)&s), sz(1, 4) {}\n\ntemplate<typename _Tp> inline _InputArray::_InputArray(const Mat_<_Tp>& m)\n    : flags(FIXED_TYPE + MAT + DataType<_Tp>::type), obj((void*)&m) {}\n\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(vector<_Tp>& vec)\n    : _InputArray(vec) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(vector<vector<_Tp> >& vec)\n    : _InputArray(vec) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(vector<Mat_<_Tp> >& vec)\n    : _InputArray(vec) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(Mat_<_Tp>& m)\n    : _InputArray(m) {}\ntemplate<typename _Tp, int m, int n> inline _OutputArray::_OutputArray(Matx<_Tp, m, n>& mtx)\n    : _InputArray(mtx) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(_Tp* vec, int n)\n    : _InputArray(vec, n) {}\n\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const vector<_Tp>& vec)\n    : _InputArray(vec) {flags |= FIXED_SIZE;}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const vector<vector<_Tp> >& vec)\n    : _InputArray(vec) {flags |= FIXED_SIZE;}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const vector<Mat_<_Tp> >& vec)\n    : _InputArray(vec) {flags |= FIXED_SIZE;}\n\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const Mat_<_Tp>& m)\n    : _InputArray(m) {flags |= FIXED_SIZE;}\ntemplate<typename _Tp, int m, int n> inline _OutputArray::_OutputArray(const Matx<_Tp, m, n>& mtx)\n    : _InputArray(mtx) {}\ntemplate<typename _Tp> inline _OutputArray::_OutputArray(const _Tp* vec, int n)\n    : _InputArray(vec, n) {}\n\n//////////////////////////////////// Matrix Expressions /////////////////////////////////////////\n\nclass CV_EXPORTS MatOp\n{\npublic:\n    MatOp() {};\n    virtual ~MatOp() {};\n\n    virtual bool elementWise(const MatExpr& expr) const;\n    virtual void assign(const MatExpr& expr, Mat& m, int type=-1) const = 0;\n    virtual void roi(const MatExpr& expr, const Range& rowRange,\n                     const Range& colRange, MatExpr& res) const;\n    virtual void diag(const MatExpr& expr, int d, MatExpr& res) const;\n    virtual void augAssignAdd(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignSubtract(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignMultiply(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignDivide(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignAnd(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignOr(const MatExpr& expr, Mat& m) const;\n    virtual void augAssignXor(const MatExpr& expr, Mat& m) const;\n\n    virtual void add(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void add(const MatExpr& expr1, const Scalar& s, MatExpr& res) const;\n\n    virtual void subtract(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void subtract(const Scalar& s, const MatExpr& expr, MatExpr& res) const;\n\n    virtual void multiply(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res, double scale=1) const;\n    virtual void multiply(const MatExpr& expr1, double s, MatExpr& res) const;\n\n    virtual void divide(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res, double scale=1) const;\n    virtual void divide(double s, const MatExpr& expr, MatExpr& res) const;\n\n    virtual void abs(const MatExpr& expr, MatExpr& res) const;\n\n    virtual void transpose(const MatExpr& expr, MatExpr& res) const;\n    virtual void matmul(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const;\n    virtual void invert(const MatExpr& expr, int method, MatExpr& res) const;\n\n    virtual Size size(const MatExpr& expr) const;\n    virtual int type(const MatExpr& expr) const;\n};\n\n\nclass CV_EXPORTS MatExpr\n{\npublic:\n    MatExpr() : op(0), flags(0), a(Mat()), b(Mat()), c(Mat()), alpha(0), beta(0), s(Scalar()) {}\n    MatExpr(const MatOp* _op, int _flags, const Mat& _a=Mat(), const Mat& _b=Mat(),\n            const Mat& _c=Mat(), double _alpha=1, double _beta=1, const Scalar& _s=Scalar())\n        : op(_op), flags(_flags), a(_a), b(_b), c(_c), alpha(_alpha), beta(_beta), s(_s) {}\n    explicit MatExpr(const Mat& m);\n    operator Mat() const\n    {\n        Mat m;\n        op->assign(*this, m);\n        return m;\n    }\n\n    template<typename _Tp> operator Mat_<_Tp>() const\n    {\n        Mat_<_Tp> m;\n        op->assign(*this, m, DataType<_Tp>::type);\n        return m;\n    }\n\n    MatExpr row(int y) const;\n    MatExpr col(int x) const;\n    MatExpr diag(int d=0) const;\n    MatExpr operator()( const Range& rowRange, const Range& colRange ) const;\n    MatExpr operator()( const Rect& roi ) const;\n\n    Mat cross(const Mat& m) const;\n    double dot(const Mat& m) const;\n\n    MatExpr t() const;\n    MatExpr inv(int method = DECOMP_LU) const;\n    MatExpr mul(const MatExpr& e, double scale=1) const;\n    MatExpr mul(const Mat& m, double scale=1) const;\n\n    Size size() const;\n    int type() const;\n\n    const MatOp* op;\n    int flags;\n\n    Mat a, b, c;\n    double alpha, beta;\n    Scalar s;\n};\n\n\nCV_EXPORTS MatExpr operator + (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator + (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator + (const Scalar& s, const Mat& a);\nCV_EXPORTS MatExpr operator + (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator + (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator + (const MatExpr& e, const Scalar& s);\nCV_EXPORTS MatExpr operator + (const Scalar& s, const MatExpr& e);\nCV_EXPORTS MatExpr operator + (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator - (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator - (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator - (const Scalar& s, const Mat& a);\nCV_EXPORTS MatExpr operator - (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator - (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator - (const MatExpr& e, const Scalar& s);\nCV_EXPORTS MatExpr operator - (const Scalar& s, const MatExpr& e);\nCV_EXPORTS MatExpr operator - (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator - (const Mat& m);\nCV_EXPORTS MatExpr operator - (const MatExpr& e);\n\nCV_EXPORTS MatExpr operator * (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator * (const Mat& a, double s);\nCV_EXPORTS MatExpr operator * (double s, const Mat& a);\nCV_EXPORTS MatExpr operator * (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator * (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator * (const MatExpr& e, double s);\nCV_EXPORTS MatExpr operator * (double s, const MatExpr& e);\nCV_EXPORTS MatExpr operator * (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator / (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator / (const Mat& a, double s);\nCV_EXPORTS MatExpr operator / (double s, const Mat& a);\nCV_EXPORTS MatExpr operator / (const MatExpr& e, const Mat& m);\nCV_EXPORTS MatExpr operator / (const Mat& m, const MatExpr& e);\nCV_EXPORTS MatExpr operator / (const MatExpr& e, double s);\nCV_EXPORTS MatExpr operator / (double s, const MatExpr& e);\nCV_EXPORTS MatExpr operator / (const MatExpr& e1, const MatExpr& e2);\n\nCV_EXPORTS MatExpr operator < (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator < (const Mat& a, double s);\nCV_EXPORTS MatExpr operator < (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator <= (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator <= (const Mat& a, double s);\nCV_EXPORTS MatExpr operator <= (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator == (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator == (const Mat& a, double s);\nCV_EXPORTS MatExpr operator == (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator != (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator != (const Mat& a, double s);\nCV_EXPORTS MatExpr operator != (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator >= (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator >= (const Mat& a, double s);\nCV_EXPORTS MatExpr operator >= (double s, const Mat& a);\n\nCV_EXPORTS MatExpr operator > (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator > (const Mat& a, double s);\nCV_EXPORTS MatExpr operator > (double s, const Mat& a);\n\nCV_EXPORTS MatExpr min(const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr min(const Mat& a, double s);\nCV_EXPORTS MatExpr min(double s, const Mat& a);\n\nCV_EXPORTS MatExpr max(const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr max(const Mat& a, double s);\nCV_EXPORTS MatExpr max(double s, const Mat& a);\n\ntemplate<typename _Tp> static inline MatExpr min(const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    return cv::min((const Mat&)a, (const Mat&)b);\n}\n\ntemplate<typename _Tp> static inline MatExpr min(const Mat_<_Tp>& a, double s)\n{\n    return cv::min((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline MatExpr min(double s, const Mat_<_Tp>& a)\n{\n    return cv::min((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline MatExpr max(const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    return cv::max((const Mat&)a, (const Mat&)b);\n}\n\ntemplate<typename _Tp> static inline MatExpr max(const Mat_<_Tp>& a, double s)\n{\n    return cv::max((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline MatExpr max(double s, const Mat_<_Tp>& a)\n{\n    return cv::max((const Mat&)a, s);\n}\n\ntemplate<typename _Tp> static inline void min(const Mat_<_Tp>& a, const Mat_<_Tp>& b, Mat_<_Tp>& c)\n{\n    cv::min((const Mat&)a, (const Mat&)b, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void min(const Mat_<_Tp>& a, double s, Mat_<_Tp>& c)\n{\n    cv::min((const Mat&)a, s, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void min(double s, const Mat_<_Tp>& a, Mat_<_Tp>& c)\n{\n    cv::min((const Mat&)a, s, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void max(const Mat_<_Tp>& a, const Mat_<_Tp>& b, Mat_<_Tp>& c)\n{\n    cv::max((const Mat&)a, (const Mat&)b, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void max(const Mat_<_Tp>& a, double s, Mat_<_Tp>& c)\n{\n    cv::max((const Mat&)a, s, (Mat&)c);\n}\n\ntemplate<typename _Tp> static inline void max(double s, const Mat_<_Tp>& a, Mat_<_Tp>& c)\n{\n    cv::max((const Mat&)a, s, (Mat&)c);\n}\n\n\nCV_EXPORTS MatExpr operator & (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator & (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator & (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator | (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator | (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator | (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator ^ (const Mat& a, const Mat& b);\nCV_EXPORTS MatExpr operator ^ (const Mat& a, const Scalar& s);\nCV_EXPORTS MatExpr operator ^ (const Scalar& s, const Mat& a);\n\nCV_EXPORTS MatExpr operator ~(const Mat& m);\n\nCV_EXPORTS MatExpr abs(const Mat& m);\nCV_EXPORTS MatExpr abs(const MatExpr& e);\n\ntemplate<typename _Tp> static inline MatExpr abs(const Mat_<_Tp>& m)\n{\n    return cv::abs((const Mat&)m);\n}\n\n////////////////////////////// Augmenting algebraic operations //////////////////////////////////\n\ninline Mat& Mat::operator = (const MatExpr& e)\n{\n    e.op->assign(e, *this);\n    return *this;\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp>::Mat_(const MatExpr& e)\n{\n    e.op->assign(e, *this, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> Mat_<_Tp>& Mat_<_Tp>::operator = (const MatExpr& e)\n{\n    e.op->assign(e, *this, DataType<_Tp>::type);\n    return *this;\n}\n\nstatic inline Mat& operator += (const Mat& a, const Mat& b)\n{\n    add(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator += (const Mat& a, const Scalar& s)\n{\n    add(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator += (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    add(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator += (const Mat_<_Tp>& a, const Scalar& s)\n{\n    add(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator += (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignAdd(b, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator += (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignAdd(b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator -= (const Mat& a, const Mat& b)\n{\n    subtract(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator -= (const Mat& a, const Scalar& s)\n{\n    subtract(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator -= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    subtract(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator -= (const Mat_<_Tp>& a, const Scalar& s)\n{\n    subtract(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator -= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignSubtract(b, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator -= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignSubtract(b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator *= (const Mat& a, const Mat& b)\n{\n    gemm(a, b, 1, Mat(), 0, (Mat&)a, 0);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator *= (const Mat& a, double s)\n{\n    a.convertTo((Mat&)a, -1, s);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator *= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    gemm(a, b, 1, Mat(), 0, (Mat&)a, 0);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator *= (const Mat_<_Tp>& a, double s)\n{\n    a.convertTo((Mat&)a, -1, s);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator *= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignMultiply(b, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator *= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignMultiply(b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator /= (const Mat& a, const Mat& b)\n{\n    divide(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator /= (const Mat& a, double s)\n{\n    a.convertTo((Mat&)a, -1, 1./s);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator /= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    divide(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator /= (const Mat_<_Tp>& a, double s)\n{\n    a.convertTo((Mat&)a, -1, 1./s);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator /= (const Mat& a, const MatExpr& b)\n{\n    b.op->augAssignDivide(b, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline\nMat_<_Tp>& operator /= (const Mat_<_Tp>& a, const MatExpr& b)\n{\n    b.op->augAssignDivide(b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\n////////////////////////////// Logical operations ///////////////////////////////\n\nstatic inline Mat& operator &= (const Mat& a, const Mat& b)\n{\n    bitwise_and(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator &= (const Mat& a, const Scalar& s)\n{\n    bitwise_and(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator &= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    bitwise_and(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator &= (const Mat_<_Tp>& a, const Scalar& s)\n{\n    bitwise_and(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator |= (const Mat& a, const Mat& b)\n{\n    bitwise_or(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator |= (const Mat& a, const Scalar& s)\n{\n    bitwise_or(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator |= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    bitwise_or(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator |= (const Mat_<_Tp>& a, const Scalar& s)\n{\n    bitwise_or(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\nstatic inline Mat& operator ^= (const Mat& a, const Mat& b)\n{\n    bitwise_xor(a, b, (Mat&)a);\n    return (Mat&)a;\n}\n\nstatic inline Mat& operator ^= (const Mat& a, const Scalar& s)\n{\n    bitwise_xor(a, s, (Mat&)a);\n    return (Mat&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator ^= (const Mat_<_Tp>& a, const Mat_<_Tp>& b)\n{\n    bitwise_xor(a, b, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\ntemplate<typename _Tp> static inline Mat_<_Tp>&\noperator ^= (const Mat_<_Tp>& a, const Scalar& s)\n{\n    bitwise_xor(a, s, (Mat&)a);\n    return (Mat_<_Tp>&)a;\n}\n\n/////////////////////////////// Miscellaneous operations //////////////////////////////\n\ntemplate<typename _Tp> void split(const Mat& src, vector<Mat_<_Tp> >& mv)\n{ split(src, (vector<Mat>&)mv ); }\n\n//////////////////////////////////////////////////////////////\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::zeros(int rows, int cols)\n{\n    return Mat::zeros(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::zeros(Size sz)\n{\n    return Mat::zeros(sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::ones(int rows, int cols)\n{\n    return Mat::ones(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::ones(Size sz)\n{\n    return Mat::ones(sz, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::eye(int rows, int cols)\n{\n    return Mat::eye(rows, cols, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline MatExpr Mat_<_Tp>::eye(Size sz)\n{\n    return Mat::eye(sz, DataType<_Tp>::type);\n}\n\n//////////////////////////////// Iterators & Comma initializers //////////////////////////////////\n\ninline MatConstIterator::MatConstIterator()\n    : m(0), elemSize(0), ptr(0), sliceStart(0), sliceEnd(0) {}\n\ninline MatConstIterator::MatConstIterator(const Mat* _m)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    if( m && m->isContinuous() )\n    {\n        sliceStart = m->data;\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    seek((const int*)0);\n}\n\ninline MatConstIterator::MatConstIterator(const Mat* _m, int _row, int _col)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    CV_Assert(m && m->dims <= 2);\n    if( m->isContinuous() )\n    {\n        sliceStart = m->data;\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    int idx[]={_row, _col};\n    seek(idx);\n}\n\ninline MatConstIterator::MatConstIterator(const Mat* _m, Point _pt)\n    : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)\n{\n    CV_Assert(m && m->dims <= 2);\n    if( m->isContinuous() )\n    {\n        sliceStart = m->data;\n        sliceEnd = sliceStart + m->total()*elemSize;\n    }\n    int idx[]={_pt.y, _pt.x};\n    seek(idx);\n}\n\ninline MatConstIterator::MatConstIterator(const MatConstIterator& it)\n    : m(it.m), elemSize(it.elemSize), ptr(it.ptr), sliceStart(it.sliceStart), sliceEnd(it.sliceEnd)\n{}\n\ninline MatConstIterator& MatConstIterator::operator = (const MatConstIterator& it )\n{\n    m = it.m; elemSize = it.elemSize; ptr = it.ptr;\n    sliceStart = it.sliceStart; sliceEnd = it.sliceEnd;\n    return *this;\n}\n\ninline uchar* MatConstIterator::operator *() const { return ptr; }\n\ninline MatConstIterator& MatConstIterator::operator += (ptrdiff_t ofs)\n{\n    if( !m || ofs == 0 )\n        return *this;\n    ptrdiff_t ofsb = ofs*elemSize;\n    ptr += ofsb;\n    if( ptr < sliceStart || sliceEnd <= ptr )\n    {\n        ptr -= ofsb;\n        seek(ofs, true);\n    }\n    return *this;\n}\n\ninline MatConstIterator& MatConstIterator::operator -= (ptrdiff_t ofs)\n{ return (*this += -ofs); }\n\ninline MatConstIterator& MatConstIterator::operator --()\n{\n    if( m && (ptr -= elemSize) < sliceStart )\n    {\n        ptr += elemSize;\n        seek(-1, true);\n    }\n    return *this;\n}\n\ninline MatConstIterator MatConstIterator::operator --(int)\n{\n    MatConstIterator b = *this;\n    *this += -1;\n    return b;\n}\n\ninline MatConstIterator& MatConstIterator::operator ++()\n{\n    if( m && (ptr += elemSize) >= sliceEnd )\n    {\n        ptr -= elemSize;\n        seek(1, true);\n    }\n    return *this;\n}\n\ninline MatConstIterator MatConstIterator::operator ++(int)\n{\n    MatConstIterator b = *this;\n    *this += 1;\n    return b;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::MatConstIterator_() {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::MatConstIterator_(const Mat_<_Tp>* _m)\n    : MatConstIterator(_m) {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::\n    MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col)\n    : MatConstIterator(_m, _row, _col) {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::\n    MatConstIterator_(const Mat_<_Tp>* _m, Point _pt)\n    : MatConstIterator(_m, _pt) {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>::\n    MatConstIterator_(const MatConstIterator_& it)\n    : MatConstIterator(it) {}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>&\n    MatConstIterator_<_Tp>::operator = (const MatConstIterator_& it )\n{\n    MatConstIterator::operator = (it);\n    return *this;\n}\n\ntemplate<typename _Tp> inline _Tp MatConstIterator_<_Tp>::operator *() const { return *(_Tp*)(this->ptr); }\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator += (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator -= (ptrdiff_t ofs)\n{ return (*this += -ofs); }\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator --()\n{\n    MatConstIterator::operator --();\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator --(int)\n{\n    MatConstIterator_ b = *this;\n    MatConstIterator::operator --();\n    return b;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator ++()\n{\n    MatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator ++(int)\n{\n    MatConstIterator_ b = *this;\n    MatConstIterator::operator ++();\n    return b;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_() : MatConstIterator_<_Tp>() {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m)\n    : MatConstIterator_<_Tp>(_m) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m, int _row, int _col)\n    : MatConstIterator_<_Tp>(_m, _row, _col) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(const Mat_<_Tp>* _m, Point _pt)\n    : MatConstIterator_<_Tp>(_m, _pt) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(const Mat_<_Tp>* _m, const int* _idx)\n    : MatConstIterator_<_Tp>(_m, _idx) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>::MatIterator_(const MatIterator_& it)\n    : MatConstIterator_<_Tp>(it) {}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator = (const MatIterator_<_Tp>& it )\n{\n    MatConstIterator::operator = (it);\n    return *this;\n}\n\ntemplate<typename _Tp> inline _Tp& MatIterator_<_Tp>::operator *() const { return *(_Tp*)(this->ptr); }\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator += (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator -= (ptrdiff_t ofs)\n{\n    MatConstIterator::operator += (-ofs);\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator --()\n{\n    MatConstIterator::operator --();\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> MatIterator_<_Tp>::operator --(int)\n{\n    MatIterator_ b = *this;\n    MatConstIterator::operator --();\n    return b;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator ++()\n{\n    MatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> MatIterator_<_Tp>::operator ++(int)\n{\n    MatIterator_ b = *this;\n    MatConstIterator::operator ++();\n    return b;\n}\n\ntemplate<typename _Tp> inline Point MatConstIterator_<_Tp>::pos() const\n{\n    if( !m )\n        return Point();\n    CV_DbgAssert( m->dims <= 2 );\n    if( m->isContinuous() )\n    {\n        ptrdiff_t ofs = (const _Tp*)ptr - (const _Tp*)m->data;\n        int y = (int)(ofs / m->cols), x = (int)(ofs - (ptrdiff_t)y*m->cols);\n        return Point(x, y);\n    }\n    else\n    {\n        ptrdiff_t ofs = (uchar*)ptr - m->data;\n        int y = (int)(ofs / m->step), x = (int)((ofs - y*m->step)/sizeof(_Tp));\n        return Point(x, y);\n    }\n}\n\nstatic inline bool\noperator == (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.m == b.m && a.ptr == b.ptr; }\n\ntemplate<typename _Tp> static inline bool\noperator != (const MatConstIterator& a, const MatConstIterator& b)\n{ return !(a == b); }\n\ntemplate<typename _Tp> static inline bool\noperator == (const MatConstIterator_<_Tp>& a, const MatConstIterator_<_Tp>& b)\n{ return a.m == b.m && a.ptr == b.ptr; }\n\ntemplate<typename _Tp> static inline bool\noperator != (const MatConstIterator_<_Tp>& a, const MatConstIterator_<_Tp>& b)\n{ return a.m != b.m || a.ptr != b.ptr; }\n\ntemplate<typename _Tp> static inline bool\noperator == (const MatIterator_<_Tp>& a, const MatIterator_<_Tp>& b)\n{ return a.m == b.m && a.ptr == b.ptr; }\n\ntemplate<typename _Tp> static inline bool\noperator != (const MatIterator_<_Tp>& a, const MatIterator_<_Tp>& b)\n{ return a.m != b.m || a.ptr != b.ptr; }\n\nstatic inline bool\noperator < (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.ptr < b.ptr; }\n\nstatic inline bool\noperator > (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.ptr > b.ptr; }\n\nstatic inline bool\noperator <= (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.ptr <= b.ptr; }\n\nstatic inline bool\noperator >= (const MatConstIterator& a, const MatConstIterator& b)\n{ return a.ptr >= b.ptr; }\n\nCV_EXPORTS ptrdiff_t operator - (const MatConstIterator& b, const MatConstIterator& a);\n\nstatic inline MatConstIterator operator + (const MatConstIterator& a, ptrdiff_t ofs)\n{ MatConstIterator b = a; return b += ofs; }\n\nstatic inline MatConstIterator operator + (ptrdiff_t ofs, const MatConstIterator& a)\n{ MatConstIterator b = a; return b += ofs; }\n\nstatic inline MatConstIterator operator - (const MatConstIterator& a, ptrdiff_t ofs)\n{ MatConstIterator b = a; return b += -ofs; }\n\ntemplate<typename _Tp> static inline MatConstIterator_<_Tp>\noperator + (const MatConstIterator_<_Tp>& a, ptrdiff_t ofs)\n{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatConstIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> static inline MatConstIterator_<_Tp>\noperator + (ptrdiff_t ofs, const MatConstIterator_<_Tp>& a)\n{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatConstIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> static inline MatConstIterator_<_Tp>\noperator - (const MatConstIterator_<_Tp>& a, ptrdiff_t ofs)\n{ MatConstIterator t = (const MatConstIterator&)a - ofs; return (MatConstIterator_<_Tp>&)t; }\n\ninline uchar* MatConstIterator::operator [](ptrdiff_t i) const\n{ return *(*this + i); }\n\ntemplate<typename _Tp> inline _Tp MatConstIterator_<_Tp>::operator [](ptrdiff_t i) const\n{ return *(_Tp*)MatConstIterator::operator [](i); }\n\ntemplate<typename _Tp> static inline MatIterator_<_Tp>\noperator + (const MatIterator_<_Tp>& a, ptrdiff_t ofs)\n{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> static inline MatIterator_<_Tp>\noperator + (ptrdiff_t ofs, const MatIterator_<_Tp>& a)\n{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> static inline MatIterator_<_Tp>\noperator - (const MatIterator_<_Tp>& a, ptrdiff_t ofs)\n{ MatConstIterator t = (const MatConstIterator&)a - ofs; return (MatIterator_<_Tp>&)t; }\n\ntemplate<typename _Tp> inline _Tp& MatIterator_<_Tp>::operator [](ptrdiff_t i) const\n{ return *(*this + i); }\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> Mat_<_Tp>::begin() const\n{ return Mat::begin<_Tp>(); }\n\ntemplate<typename _Tp> inline MatConstIterator_<_Tp> Mat_<_Tp>::end() const\n{ return Mat::end<_Tp>(); }\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> Mat_<_Tp>::begin()\n{ return Mat::begin<_Tp>(); }\n\ntemplate<typename _Tp> inline MatIterator_<_Tp> Mat_<_Tp>::end()\n{ return Mat::end<_Tp>(); }\n\ntemplate<typename _Tp> inline MatCommaInitializer_<_Tp>::MatCommaInitializer_(Mat_<_Tp>* _m) : it(_m) {}\n\ntemplate<typename _Tp> template<typename T2> inline MatCommaInitializer_<_Tp>&\nMatCommaInitializer_<_Tp>::operator , (T2 v)\n{\n    CV_DbgAssert( this->it < ((const Mat_<_Tp>*)this->it.m)->end() );\n    *this->it = _Tp(v); ++this->it;\n    return *this;\n}\n\ntemplate<typename _Tp> inline Mat_<_Tp> MatCommaInitializer_<_Tp>::operator *() const\n{\n    CV_DbgAssert( this->it == ((const Mat_<_Tp>*)this->it.m)->end() );\n    return Mat_<_Tp>(*this->it.m);\n}\n\ntemplate<typename _Tp> inline MatCommaInitializer_<_Tp>::operator Mat_<_Tp>() const\n{\n    CV_DbgAssert( this->it == ((const Mat_<_Tp>*)this->it.m)->end() );\n    return Mat_<_Tp>(*this->it.m);\n}\n\ntemplate<typename _Tp, typename T2> static inline MatCommaInitializer_<_Tp>\noperator << (const Mat_<_Tp>& m, T2 val)\n{\n    MatCommaInitializer_<_Tp> commaInitializer((Mat_<_Tp>*)&m);\n    return (commaInitializer, val);\n}\n\n//////////////////////////////// SparseMat ////////////////////////////////\n\ninline SparseMat::SparseMat()\n: flags(MAGIC_VAL), hdr(0)\n{\n}\n\ninline SparseMat::SparseMat(int _dims, const int* _sizes, int _type)\n: flags(MAGIC_VAL), hdr(0)\n{\n    create(_dims, _sizes, _type);\n}\n\ninline SparseMat::SparseMat(const SparseMat& m)\n: flags(m.flags), hdr(m.hdr)\n{\n    addref();\n}\n\ninline SparseMat::~SparseMat()\n{\n    release();\n}\n\ninline SparseMat& SparseMat::operator = (const SparseMat& m)\n{\n    if( this != &m )\n    {\n        if( m.hdr )\n            CV_XADD(&m.hdr->refcount, 1);\n        release();\n        flags = m.flags;\n        hdr = m.hdr;\n    }\n    return *this;\n}\n\ninline SparseMat& SparseMat::operator = (const Mat& m)\n{ return (*this = SparseMat(m)); }\n\ninline SparseMat SparseMat::clone() const\n{\n    SparseMat temp;\n    this->copyTo(temp);\n    return temp;\n}\n\n\ninline void SparseMat::assignTo( SparseMat& m, int _type ) const\n{\n    if( _type < 0 )\n        m = *this;\n    else\n        convertTo(m, _type);\n}\n\ninline void SparseMat::addref()\n{ if( hdr ) CV_XADD(&hdr->refcount, 1); }\n\ninline void SparseMat::release()\n{\n    if( hdr && CV_XADD(&hdr->refcount, -1) == 1 )\n        delete hdr;\n    hdr = 0;\n}\n\ninline size_t SparseMat::elemSize() const\n{ return CV_ELEM_SIZE(flags); }\n\ninline size_t SparseMat::elemSize1() const\n{ return CV_ELEM_SIZE1(flags); }\n\ninline int SparseMat::type() const\n{ return CV_MAT_TYPE(flags); }\n\ninline int SparseMat::depth() const\n{ return CV_MAT_DEPTH(flags); }\n\ninline int SparseMat::channels() const\n{ return CV_MAT_CN(flags); }\n\ninline const int* SparseMat::size() const\n{\n    return hdr ? hdr->size : 0;\n}\n\ninline int SparseMat::size(int i) const\n{\n    if( hdr )\n    {\n        CV_DbgAssert((unsigned)i < (unsigned)hdr->dims);\n        return hdr->size[i];\n    }\n    return 0;\n}\n\ninline int SparseMat::dims() const\n{\n    return hdr ? hdr->dims : 0;\n}\n\ninline size_t SparseMat::nzcount() const\n{\n    return hdr ? hdr->nodeCount : 0;\n}\n\ninline size_t SparseMat::hash(int i0) const\n{\n    return (size_t)i0;\n}\n\ninline size_t SparseMat::hash(int i0, int i1) const\n{\n    return (size_t)(unsigned)i0*HASH_SCALE + (unsigned)i1;\n}\n\ninline size_t SparseMat::hash(int i0, int i1, int i2) const\n{\n    return ((size_t)(unsigned)i0*HASH_SCALE + (unsigned)i1)*HASH_SCALE + (unsigned)i2;\n}\n\ninline size_t SparseMat::hash(const int* idx) const\n{\n    size_t h = (unsigned)idx[0];\n    if( !hdr )\n        return 0;\n    int i, d = hdr->dims;\n    for( i = 1; i < d; i++ )\n        h = h*HASH_SCALE + (unsigned)idx[i];\n    return h;\n}\n\ntemplate<typename _Tp> inline _Tp& SparseMat::ref(int i0, size_t* hashval)\n{ return *(_Tp*)((SparseMat*)this)->ptr(i0, true, hashval); }\n\ntemplate<typename _Tp> inline _Tp& SparseMat::ref(int i0, int i1, size_t* hashval)\n{ return *(_Tp*)((SparseMat*)this)->ptr(i0, i1, true, hashval); }\n\ntemplate<typename _Tp> inline _Tp& SparseMat::ref(int i0, int i1, int i2, size_t* hashval)\n{ return *(_Tp*)((SparseMat*)this)->ptr(i0, i1, i2, true, hashval); }\n\ntemplate<typename _Tp> inline _Tp& SparseMat::ref(const int* idx, size_t* hashval)\n{ return *(_Tp*)((SparseMat*)this)->ptr(idx, true, hashval); }\n\ntemplate<typename _Tp> inline _Tp SparseMat::value(int i0, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline _Tp SparseMat::value(int i0, int i1, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, i1, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline _Tp SparseMat::value(int i0, int i1, int i2, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, i1, i2, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline _Tp SparseMat::value(const int* idx, size_t* hashval) const\n{\n    const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(idx, false, hashval);\n    return p ? *p : _Tp();\n}\n\ntemplate<typename _Tp> inline const _Tp* SparseMat::find(int i0, size_t* hashval) const\n{ return (const _Tp*)((SparseMat*)this)->ptr(i0, false, hashval); }\n\ntemplate<typename _Tp> inline const _Tp* SparseMat::find(int i0, int i1, size_t* hashval) const\n{ return (const _Tp*)((SparseMat*)this)->ptr(i0, i1, false, hashval); }\n\ntemplate<typename _Tp> inline const _Tp* SparseMat::find(int i0, int i1, int i2, size_t* hashval) const\n{ return (const _Tp*)((SparseMat*)this)->ptr(i0, i1, i2, false, hashval); }\n\ntemplate<typename _Tp> inline const _Tp* SparseMat::find(const int* idx, size_t* hashval) const\n{ return (const _Tp*)((SparseMat*)this)->ptr(idx, false, hashval); }\n\ntemplate<typename _Tp> inline _Tp& SparseMat::value(Node* n)\n{ return *(_Tp*)((uchar*)n + hdr->valueOffset); }\n\ntemplate<typename _Tp> inline const _Tp& SparseMat::value(const Node* n) const\n{ return *(const _Tp*)((const uchar*)n + hdr->valueOffset); }\n\ninline SparseMat::Node* SparseMat::node(size_t nidx)\n{ return (Node*)(void*)&hdr->pool[nidx]; }\n\ninline const SparseMat::Node* SparseMat::node(size_t nidx) const\n{ return (const Node*)(void*)&hdr->pool[nidx]; }\n\ninline SparseMatIterator SparseMat::begin()\n{ return SparseMatIterator(this); }\n\ninline SparseMatConstIterator SparseMat::begin() const\n{ return SparseMatConstIterator(this); }\n\ninline SparseMatIterator SparseMat::end()\n{ SparseMatIterator it(this); it.seekEnd(); return it; }\n\ninline SparseMatConstIterator SparseMat::end() const\n{ SparseMatConstIterator it(this); it.seekEnd(); return it; }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp> SparseMat::begin()\n{ return SparseMatIterator_<_Tp>(this); }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp> SparseMat::begin() const\n{ return SparseMatConstIterator_<_Tp>(this); }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp> SparseMat::end()\n{ SparseMatIterator_<_Tp> it(this); it.seekEnd(); return it; }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp> SparseMat::end() const\n{ SparseMatConstIterator_<_Tp> it(this); it.seekEnd(); return it; }\n\n\ninline SparseMatConstIterator::SparseMatConstIterator()\n: m(0), hashidx(0), ptr(0)\n{\n}\n\ninline SparseMatConstIterator::SparseMatConstIterator(const SparseMatConstIterator& it)\n: m(it.m), hashidx(it.hashidx), ptr(it.ptr)\n{\n}\n\nstatic inline bool operator == (const SparseMatConstIterator& it1, const SparseMatConstIterator& it2)\n{ return it1.m == it2.m && it1.ptr == it2.ptr; }\n\nstatic inline bool operator != (const SparseMatConstIterator& it1, const SparseMatConstIterator& it2)\n{ return !(it1 == it2); }\n\n\ninline SparseMatConstIterator& SparseMatConstIterator::operator = (const SparseMatConstIterator& it)\n{\n    if( this != &it )\n    {\n        m = it.m;\n        hashidx = it.hashidx;\n        ptr = it.ptr;\n    }\n    return *this;\n}\n\ntemplate<typename _Tp> inline const _Tp& SparseMatConstIterator::value() const\n{ return *(_Tp*)ptr; }\n\ninline const SparseMat::Node* SparseMatConstIterator::node() const\n{\n    return ptr && m && m->hdr ?\n        (const SparseMat::Node*)(void*)(ptr - m->hdr->valueOffset) : 0;\n}\n\ninline SparseMatConstIterator SparseMatConstIterator::operator ++(int)\n{\n    SparseMatConstIterator it = *this;\n    ++*this;\n    return it;\n}\n\n\ninline void SparseMatConstIterator::seekEnd()\n{\n    if( m && m->hdr )\n    {\n        hashidx = m->hdr->hashtab.size();\n        ptr = 0;\n    }\n}\n\ninline SparseMatIterator::SparseMatIterator()\n{}\n\ninline SparseMatIterator::SparseMatIterator(SparseMat* _m)\n: SparseMatConstIterator(_m)\n{}\n\ninline SparseMatIterator::SparseMatIterator(const SparseMatIterator& it)\n: SparseMatConstIterator(it)\n{\n}\n\ninline SparseMatIterator& SparseMatIterator::operator = (const SparseMatIterator& it)\n{\n    (SparseMatConstIterator&)*this = it;\n    return *this;\n}\n\ntemplate<typename _Tp> inline _Tp& SparseMatIterator::value() const\n{ return *(_Tp*)ptr; }\n\ninline SparseMat::Node* SparseMatIterator::node() const\n{\n    return (SparseMat::Node*)SparseMatConstIterator::node();\n}\n\ninline SparseMatIterator& SparseMatIterator::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ninline SparseMatIterator SparseMatIterator::operator ++(int)\n{\n    SparseMatIterator it = *this;\n    ++*this;\n    return it;\n}\n\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_()\n{ flags = MAGIC_VAL | DataType<_Tp>::type; }\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(int _dims, const int* _sizes)\n: SparseMat(_dims, _sizes, DataType<_Tp>::type)\n{}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(const SparseMat& m)\n{\n    if( m.type() == DataType<_Tp>::type )\n        *this = (const SparseMat_<_Tp>&)m;\n    else\n        m.convertTo(*this, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(const SparseMat_<_Tp>& m)\n{\n    this->flags = m.flags;\n    this->hdr = m.hdr;\n    if( this->hdr )\n        CV_XADD(&this->hdr->refcount, 1);\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(const Mat& m)\n{\n    SparseMat sm(m);\n    *this = sm;\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>::SparseMat_(const CvSparseMat* m)\n{\n    SparseMat sm(m);\n    *this = sm;\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>&\nSparseMat_<_Tp>::operator = (const SparseMat_<_Tp>& m)\n{\n    if( this != &m )\n    {\n        if( m.hdr ) CV_XADD(&m.hdr->refcount, 1);\n        release();\n        flags = m.flags;\n        hdr = m.hdr;\n    }\n    return *this;\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>&\nSparseMat_<_Tp>::operator = (const SparseMat& m)\n{\n    if( m.type() == DataType<_Tp>::type )\n        return (*this = (const SparseMat_<_Tp>&)m);\n    m.convertTo(*this, DataType<_Tp>::type);\n    return *this;\n}\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>&\nSparseMat_<_Tp>::operator = (const Mat& m)\n{ return (*this = SparseMat(m)); }\n\ntemplate<typename _Tp> inline SparseMat_<_Tp>\nSparseMat_<_Tp>::clone() const\n{\n    SparseMat_<_Tp> m;\n    this->copyTo(m);\n    return m;\n}\n\ntemplate<typename _Tp> inline void\nSparseMat_<_Tp>::create(int _dims, const int* _sizes)\n{\n    SparseMat::create(_dims, _sizes, DataType<_Tp>::type);\n}\n\ntemplate<typename _Tp> inline\nSparseMat_<_Tp>::operator CvSparseMat*() const\n{\n    return SparseMat::operator CvSparseMat*();\n}\n\ntemplate<typename _Tp> inline int SparseMat_<_Tp>::type() const\n{ return DataType<_Tp>::type; }\n\ntemplate<typename _Tp> inline int SparseMat_<_Tp>::depth() const\n{ return DataType<_Tp>::depth; }\n\ntemplate<typename _Tp> inline int SparseMat_<_Tp>::channels() const\n{ return DataType<_Tp>::channels; }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMat_<_Tp>::ref(int i0, size_t* hashval)\n{ return SparseMat::ref<_Tp>(i0, hashval); }\n\ntemplate<typename _Tp> inline _Tp\nSparseMat_<_Tp>::operator()(int i0, size_t* hashval) const\n{ return SparseMat::value<_Tp>(i0, hashval); }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMat_<_Tp>::ref(int i0, int i1, size_t* hashval)\n{ return SparseMat::ref<_Tp>(i0, i1, hashval); }\n\ntemplate<typename _Tp> inline _Tp\nSparseMat_<_Tp>::operator()(int i0, int i1, size_t* hashval) const\n{ return SparseMat::value<_Tp>(i0, i1, hashval); }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMat_<_Tp>::ref(int i0, int i1, int i2, size_t* hashval)\n{ return SparseMat::ref<_Tp>(i0, i1, i2, hashval); }\n\ntemplate<typename _Tp> inline _Tp\nSparseMat_<_Tp>::operator()(int i0, int i1, int i2, size_t* hashval) const\n{ return SparseMat::value<_Tp>(i0, i1, i2, hashval); }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMat_<_Tp>::ref(const int* idx, size_t* hashval)\n{ return SparseMat::ref<_Tp>(idx, hashval); }\n\ntemplate<typename _Tp> inline _Tp\nSparseMat_<_Tp>::operator()(const int* idx, size_t* hashval) const\n{ return SparseMat::value<_Tp>(idx, hashval); }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp> SparseMat_<_Tp>::begin()\n{ return SparseMatIterator_<_Tp>(this); }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::begin() const\n{ return SparseMatConstIterator_<_Tp>(this); }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp> SparseMat_<_Tp>::end()\n{ SparseMatIterator_<_Tp> it(this); it.seekEnd(); return it; }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::end() const\n{ SparseMatConstIterator_<_Tp> it(this); it.seekEnd(); return it; }\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_()\n{}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMat_<_Tp>* _m)\n: SparseMatConstIterator(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMat* _m)\n: SparseMatConstIterator(_m)\n{\n    CV_Assert( _m->type() == DataType<_Tp>::type );\n}\n\ntemplate<typename _Tp> inline\nSparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMatConstIterator_<_Tp>& it)\n: SparseMatConstIterator(it)\n{}\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp>&\nSparseMatConstIterator_<_Tp>::operator = (const SparseMatConstIterator_<_Tp>& it)\n{ return reinterpret_cast<SparseMatConstIterator_<_Tp>&>\n    (*reinterpret_cast<SparseMatConstIterator*>(this) =\n     reinterpret_cast<const SparseMatConstIterator&>(it)); }\n\ntemplate<typename _Tp> inline const _Tp&\nSparseMatConstIterator_<_Tp>::operator *() const\n{ return *(const _Tp*)this->ptr; }\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp>&\nSparseMatConstIterator_<_Tp>::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline SparseMatConstIterator_<_Tp>\nSparseMatConstIterator_<_Tp>::operator ++(int)\n{\n    SparseMatConstIterator it = *this;\n    SparseMatConstIterator::operator ++();\n    return it;\n}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_()\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat_<_Tp>* _m)\n: SparseMatConstIterator_<_Tp>(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat* _m)\n: SparseMatConstIterator_<_Tp>(_m)\n{}\n\ntemplate<typename _Tp> inline\nSparseMatIterator_<_Tp>::SparseMatIterator_(const SparseMatIterator_<_Tp>& it)\n: SparseMatConstIterator_<_Tp>(it)\n{}\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp>&\nSparseMatIterator_<_Tp>::operator = (const SparseMatIterator_<_Tp>& it)\n{ return reinterpret_cast<SparseMatIterator_<_Tp>&>\n    (*reinterpret_cast<SparseMatConstIterator*>(this) =\n     reinterpret_cast<const SparseMatConstIterator&>(it)); }\n\ntemplate<typename _Tp> inline _Tp&\nSparseMatIterator_<_Tp>::operator *() const\n{ return *(_Tp*)this->ptr; }\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp>&\nSparseMatIterator_<_Tp>::operator ++()\n{\n    SparseMatConstIterator::operator ++();\n    return *this;\n}\n\ntemplate<typename _Tp> inline SparseMatIterator_<_Tp>\nSparseMatIterator_<_Tp>::operator ++(int)\n{\n    SparseMatIterator it = *this;\n    SparseMatConstIterator::operator ++();\n    return it;\n}\n\n}\n\n#endif\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/opengl_interop.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPENGL_INTEROP_HPP__\n#define __OPENCV_OPENGL_INTEROP_HPP__\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/opengl_interop_deprecated.hpp\"\n\nnamespace cv { namespace ogl {\n\n/////////////////// OpenGL Objects ///////////////////\n\n//! Smart pointer for OpenGL buffer memory with reference counting.\nclass CV_EXPORTS Buffer\n{\npublic:\n    enum Target\n    {\n        ARRAY_BUFFER         = 0x8892, //!< The buffer will be used as a source for vertex data\n        ELEMENT_ARRAY_BUFFER = 0x8893, //!< The buffer will be used for indices (in glDrawElements, for example)\n        PIXEL_PACK_BUFFER    = 0x88EB, //!< The buffer will be used for reading from OpenGL textures\n        PIXEL_UNPACK_BUFFER  = 0x88EC  //!< The buffer will be used for writing to OpenGL textures\n    };\n\n    enum Access\n    {\n        READ_ONLY  = 0x88B8,\n        WRITE_ONLY = 0x88B9,\n        READ_WRITE = 0x88BA\n    };\n\n    //! create empty buffer\n    Buffer();\n\n    //! create buffer from existed buffer id\n    Buffer(int arows, int acols, int atype, unsigned int abufId, bool autoRelease = false);\n    Buffer(Size asize, int atype, unsigned int abufId, bool autoRelease = false);\n\n    //! create buffer\n    Buffer(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n    Buffer(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    //! copy from host/device memory\n    explicit Buffer(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    //! create buffer\n    void create(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false);\n    void create(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false) { create(asize.height, asize.width, atype, target, autoRelease); }\n\n    //! release memory and delete buffer object\n    void release();\n\n    //! set auto release mode (if true, release will be called in object's destructor)\n    void setAutoRelease(bool flag);\n\n    //! copy from host/device memory\n    void copyFrom(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false);\n\n    //! copy to host/device memory\n    void copyTo(OutputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false) const;\n\n    //! create copy of current buffer\n    Buffer clone(Target target = ARRAY_BUFFER, bool autoRelease = false) const;\n\n    //! bind buffer for specified target\n    void bind(Target target) const;\n\n    //! unbind any buffers from specified target\n    static void unbind(Target target);\n\n    //! map to host memory\n    Mat mapHost(Access access);\n    void unmapHost();\n\n    //! map to device memory\n    gpu::GpuMat mapDevice();\n    void unmapDevice();\n\n    int rows() const { return rows_; }\n    int cols() const { return cols_; }\n    Size size() const { return Size(cols_, rows_); }\n    bool empty() const { return rows_ == 0 || cols_ == 0; }\n\n    int type() const { return type_; }\n    int depth() const { return CV_MAT_DEPTH(type_); }\n    int channels() const { return CV_MAT_CN(type_); }\n    int elemSize() const { return CV_ELEM_SIZE(type_); }\n    int elemSize1() const { return CV_ELEM_SIZE1(type_); }\n\n    unsigned int bufId() const;\n\n    class Impl;\n\nprivate:\n    Ptr<Impl> impl_;\n    int rows_;\n    int cols_;\n    int type_;\n};\n\n//! Smart pointer for OpenGL 2D texture memory with reference counting.\nclass CV_EXPORTS Texture2D\n{\npublic:\n    enum Format\n    {\n        NONE            = 0,\n        DEPTH_COMPONENT = 0x1902, //!< Depth\n        RGB             = 0x1907, //!< Red, Green, Blue\n        RGBA            = 0x1908  //!< Red, Green, Blue, Alpha\n    };\n\n    //! create empty texture\n    Texture2D();\n\n    //! create texture from existed texture id\n    Texture2D(int arows, int acols, Format aformat, unsigned int atexId, bool autoRelease = false);\n    Texture2D(Size asize, Format aformat, unsigned int atexId, bool autoRelease = false);\n\n    //! create texture\n    Texture2D(int arows, int acols, Format aformat, bool autoRelease = false);\n    Texture2D(Size asize, Format aformat, bool autoRelease = false);\n\n    //! copy from host/device memory\n    explicit Texture2D(InputArray arr, bool autoRelease = false);\n\n    //! create texture\n    void create(int arows, int acols, Format aformat, bool autoRelease = false);\n    void create(Size asize, Format aformat, bool autoRelease = false) { create(asize.height, asize.width, aformat, autoRelease); }\n\n    //! release memory and delete texture object\n    void release();\n\n    //! set auto release mode (if true, release will be called in object's destructor)\n    void setAutoRelease(bool flag);\n\n    //! copy from host/device memory\n    void copyFrom(InputArray arr, bool autoRelease = false);\n\n    //! copy to host/device memory\n    void copyTo(OutputArray arr, int ddepth = CV_32F, bool autoRelease = false) const;\n\n    //! bind texture to current active texture unit for GL_TEXTURE_2D target\n    void bind() const;\n\n    int rows() const { return rows_; }\n    int cols() const { return cols_; }\n    Size size() const { return Size(cols_, rows_); }\n    bool empty() const { return rows_ == 0 || cols_ == 0; }\n\n    Format format() const { return format_; }\n\n    unsigned int texId() const;\n\n    class Impl;\n\nprivate:\n    Ptr<Impl> impl_;\n    int rows_;\n    int cols_;\n    Format format_;\n};\n\n//! OpenGL Arrays\nclass CV_EXPORTS Arrays\n{\npublic:\n    Arrays();\n\n    void setVertexArray(InputArray vertex);\n    void resetVertexArray();\n\n    void setColorArray(InputArray color);\n    void resetColorArray();\n\n    void setNormalArray(InputArray normal);\n    void resetNormalArray();\n\n    void setTexCoordArray(InputArray texCoord);\n    void resetTexCoordArray();\n\n    void release();\n\n    void setAutoRelease(bool flag);\n\n    void bind() const;\n\n    int size() const { return size_; }\n    bool empty() const { return size_ == 0; }\n\nprivate:\n    int size_;\n    Buffer vertex_;\n    Buffer color_;\n    Buffer normal_;\n    Buffer texCoord_;\n};\n\n/////////////////// Render Functions ///////////////////\n\n//! render texture rectangle in window\nCV_EXPORTS void render(const Texture2D& tex,\n    Rect_<double> wndRect = Rect_<double>(0.0, 0.0, 1.0, 1.0),\n    Rect_<double> texRect = Rect_<double>(0.0, 0.0, 1.0, 1.0));\n\n//! render mode\nenum {\n    POINTS         = 0x0000,\n    LINES          = 0x0001,\n    LINE_LOOP      = 0x0002,\n    LINE_STRIP     = 0x0003,\n    TRIANGLES      = 0x0004,\n    TRIANGLE_STRIP = 0x0005,\n    TRIANGLE_FAN   = 0x0006,\n    QUADS          = 0x0007,\n    QUAD_STRIP     = 0x0008,\n    POLYGON        = 0x0009\n};\n\n//! render OpenGL arrays\nCV_EXPORTS void render(const Arrays& arr, int mode = POINTS, Scalar color = Scalar::all(255));\nCV_EXPORTS void render(const Arrays& arr, InputArray indices, int mode = POINTS, Scalar color = Scalar::all(255));\n\n}} // namespace cv::gl\n\nnamespace cv { namespace gpu {\n\n//! set a CUDA device to use OpenGL interoperability\nCV_EXPORTS void setGlDevice(int device = 0);\n\n}}\n\nnamespace cv {\n\ntemplate <> CV_EXPORTS void Ptr<cv::ogl::Buffer::Impl>::delete_obj();\ntemplate <> CV_EXPORTS void Ptr<cv::ogl::Texture2D::Impl>::delete_obj();\n\n}\n\n#endif // __cplusplus\n\n#endif // __OPENCV_OPENGL_INTEROP_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/opengl_interop_deprecated.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__\n#define __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\n//! Smart pointer for OpenGL buffer memory with reference counting.\nclass CV_EXPORTS GlBuffer\n{\npublic:\n    enum Usage\n    {\n        ARRAY_BUFFER = 0x8892,  // buffer will use for OpenGL arrays (vertices, colors, normals, etc)\n        TEXTURE_BUFFER = 0x88EC // buffer will ise for OpenGL textures\n    };\n\n    //! create empty buffer\n    explicit GlBuffer(Usage usage);\n\n    //! create buffer\n    GlBuffer(int rows, int cols, int type, Usage usage);\n    GlBuffer(Size size, int type, Usage usage);\n\n    //! copy from host/device memory\n    GlBuffer(InputArray mat, Usage usage);\n\n    void create(int rows, int cols, int type, Usage usage);\n    void create(Size size, int type, Usage usage);\n    void create(int rows, int cols, int type);\n    void create(Size size, int type);\n\n    void release();\n\n    //! copy from host/device memory\n    void copyFrom(InputArray mat);\n\n    void bind() const;\n    void unbind() const;\n\n    //! map to host memory\n    Mat mapHost();\n    void unmapHost();\n\n    //! map to device memory\n    gpu::GpuMat mapDevice();\n    void unmapDevice();\n\n    inline int rows() const { return rows_; }\n    inline int cols() const { return cols_; }\n    inline Size size() const { return Size(cols_, rows_); }\n    inline bool empty() const { return rows_ == 0 || cols_ == 0; }\n\n    inline int type() const { return type_; }\n    inline int depth() const { return CV_MAT_DEPTH(type_); }\n    inline int channels() const { return CV_MAT_CN(type_); }\n    inline int elemSize() const { return CV_ELEM_SIZE(type_); }\n    inline int elemSize1() const { return CV_ELEM_SIZE1(type_); }\n\n    inline Usage usage() const { return usage_; }\n\n    class Impl;\nprivate:\n    int rows_;\n    int cols_;\n    int type_;\n    Usage usage_;\n\n    Ptr<Impl> impl_;\n};\n\ntemplate <> CV_EXPORTS void Ptr<GlBuffer::Impl>::delete_obj();\n\n//! Smart pointer for OpenGL 2d texture memory with reference counting.\nclass CV_EXPORTS GlTexture\n{\npublic:\n    //! create empty texture\n    GlTexture();\n\n    //! create texture\n    GlTexture(int rows, int cols, int type);\n    GlTexture(Size size, int type);\n\n    //! copy from host/device memory\n    explicit GlTexture(InputArray mat, bool bgra = true);\n\n    void create(int rows, int cols, int type);\n    void create(Size size, int type);\n    void release();\n\n    //! copy from host/device memory\n    void copyFrom(InputArray mat, bool bgra = true);\n\n    void bind() const;\n    void unbind() const;\n\n    inline int rows() const { return rows_; }\n    inline int cols() const { return cols_; }\n    inline Size size() const { return Size(cols_, rows_); }\n    inline bool empty() const { return rows_ == 0 || cols_ == 0; }\n\n    inline int type() const { return type_; }\n    inline int depth() const { return CV_MAT_DEPTH(type_); }\n    inline int channels() const { return CV_MAT_CN(type_); }\n    inline int elemSize() const { return CV_ELEM_SIZE(type_); }\n    inline int elemSize1() const { return CV_ELEM_SIZE1(type_); }\n\n    class Impl;\nprivate:\n    int rows_;\n    int cols_;\n    int type_;\n\n    Ptr<Impl> impl_;\n    GlBuffer buf_;\n};\n\ntemplate <> CV_EXPORTS void Ptr<GlTexture::Impl>::delete_obj();\n\n//! OpenGL Arrays\nclass CV_EXPORTS GlArrays\n{\npublic:\n    inline GlArrays()\n        : vertex_(GlBuffer::ARRAY_BUFFER), color_(GlBuffer::ARRAY_BUFFER), bgra_(true), normal_(GlBuffer::ARRAY_BUFFER), texCoord_(GlBuffer::ARRAY_BUFFER)\n    {\n    }\n\n    void setVertexArray(InputArray vertex);\n    inline void resetVertexArray() { vertex_.release(); }\n\n    void setColorArray(InputArray color, bool bgra = true);\n    inline void resetColorArray() { color_.release(); }\n\n    void setNormalArray(InputArray normal);\n    inline void resetNormalArray() { normal_.release(); }\n\n    void setTexCoordArray(InputArray texCoord);\n    inline void resetTexCoordArray() { texCoord_.release(); }\n\n    void bind() const;\n    void unbind() const;\n\n    inline int rows() const { return vertex_.rows(); }\n    inline int cols() const { return vertex_.cols(); }\n    inline Size size() const { return vertex_.size(); }\n    inline bool empty() const { return vertex_.empty(); }\n\nprivate:\n    GlBuffer vertex_;\n    GlBuffer color_;\n    bool bgra_;\n    GlBuffer normal_;\n    GlBuffer texCoord_;\n};\n\n//! OpenGL Font\nclass CV_EXPORTS GlFont\n{\npublic:\n    enum Weight\n    {\n        WEIGHT_LIGHT    = 300,\n        WEIGHT_NORMAL   = 400,\n        WEIGHT_SEMIBOLD = 600,\n        WEIGHT_BOLD     = 700,\n        WEIGHT_BLACK    = 900\n    };\n\n    enum Style\n    {\n        STYLE_NORMAL    = 0,\n        STYLE_ITALIC    = 1,\n        STYLE_UNDERLINE = 2\n    };\n\n    static Ptr<GlFont> get(const std::string& family, int height = 12, Weight weight = WEIGHT_NORMAL, Style style = STYLE_NORMAL);\n\n    void draw(const char* str, int len) const;\n\n    inline const std::string& family() const { return family_; }\n    inline int height() const { return height_; }\n    inline Weight weight() const { return weight_; }\n    inline Style style() const { return style_; }\n\nprivate:\n    GlFont(const std::string& family, int height, Weight weight, Style style);\n\n    std::string family_;\n    int height_;\n    Weight weight_;\n    Style style_;\n\n    unsigned int base_;\n\n    GlFont(const GlFont&);\n    GlFont& operator =(const GlFont&);\n};\n\n//! render functions\n\n//! render texture rectangle in window\nCV_EXPORTS void render(const GlTexture& tex,\n    Rect_<double> wndRect = Rect_<double>(0.0, 0.0, 1.0, 1.0),\n    Rect_<double> texRect = Rect_<double>(0.0, 0.0, 1.0, 1.0));\n\n//! render mode\nnamespace RenderMode {\n    enum {\n        POINTS         = 0x0000,\n        LINES          = 0x0001,\n        LINE_LOOP      = 0x0002,\n        LINE_STRIP     = 0x0003,\n        TRIANGLES      = 0x0004,\n        TRIANGLE_STRIP = 0x0005,\n        TRIANGLE_FAN   = 0x0006,\n        QUADS          = 0x0007,\n        QUAD_STRIP     = 0x0008,\n        POLYGON        = 0x0009\n    };\n}\n\n//! render OpenGL arrays\nCV_EXPORTS void render(const GlArrays& arr, int mode = RenderMode::POINTS, Scalar color = Scalar::all(255));\n\nCV_EXPORTS void render(const std::string& str, const Ptr<GlFont>& font, Scalar color, Point2d pos);\n\n//! OpenGL camera\nclass CV_EXPORTS GlCamera\n{\npublic:\n    GlCamera();\n\n    void lookAt(Point3d eye, Point3d center, Point3d up);\n    void setCameraPos(Point3d pos, double yaw, double pitch, double roll);\n\n    void setScale(Point3d scale);\n\n    void setProjectionMatrix(const Mat& projectionMatrix, bool transpose = true);\n    void setPerspectiveProjection(double fov, double aspect, double zNear, double zFar);\n    void setOrthoProjection(double left, double right, double bottom, double top, double zNear, double zFar);\n\n    void setupProjectionMatrix() const;\n    void setupModelViewMatrix() const;\n\nprivate:\n    Point3d eye_;\n    Point3d center_;\n    Point3d up_;\n\n    Point3d pos_;\n    double yaw_;\n    double pitch_;\n    double roll_;\n\n    bool useLookAtParams_;\n\n    Point3d scale_;\n\n    Mat projectionMatrix_;\n\n    double fov_;\n    double aspect_;\n\n    double left_;\n    double right_;\n    double bottom_;\n    double top_;\n\n    double zNear_;\n    double zFar_;\n\n    bool perspectiveProjection_;\n};\n\ninline void GlBuffer::create(Size _size, int _type, Usage _usage) { create(_size.height, _size.width, _type, _usage); }\ninline void GlBuffer::create(int _rows, int _cols, int _type) { create(_rows, _cols, _type, usage()); }\ninline void GlBuffer::create(Size _size, int _type) { create(_size.height, _size.width, _type, usage()); }\ninline void GlTexture::create(Size _size, int _type) { create(_size.height, _size.width, _type); }\n\n} // namespace cv\n\n#endif // __cplusplus\n\n#endif // __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/operations.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_OPERATIONS_HPP__\n#define __OPENCV_CORE_OPERATIONS_HPP__\n\n#ifndef SKIP_INCLUDES\n  #include <string.h>\n  #include <limits.h>\n#endif // SKIP_INCLUDES\n\n\n#ifdef __cplusplus\n\n/////// exchange-add operation for atomic operations on reference counters ///////\n#if defined __INTEL_COMPILER && !(defined WIN32 || defined _WIN32)   // atomic increment on the linux version of the Intel(tm) compiler\n  #define CV_XADD(addr,delta) _InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(addr)), delta)\n#elif defined __GNUC__\n\n  #if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ && !defined __EMSCRIPTEN__\n    #ifdef __ATOMIC_SEQ_CST\n        #define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), (delta), __ATOMIC_SEQ_CST)\n    #else\n        #define CV_XADD(addr, delta) __atomic_fetch_add((_Atomic(int)*)(addr), (delta), 5)\n    #endif\n  #elif __GNUC__*10 + __GNUC_MINOR__ >= 42\n\n    #if !(defined WIN32 || defined _WIN32) && (defined __i486__ || defined __i586__ || \\\n        defined __i686__ || defined __MMX__ || defined __SSE__  || defined __ppc__) || \\\n        (defined __GNUC__ && defined _STLPORT_MAJOR) || \\\n        defined __EMSCRIPTEN__\n\n      #define CV_XADD __sync_fetch_and_add\n    #else\n      #include <ext/atomicity.h>\n      #define CV_XADD __gnu_cxx::__exchange_and_add\n    #endif\n\n  #else\n    #include <bits/atomicity.h>\n    #if __GNUC__*10 + __GNUC_MINOR__ >= 34\n      #define CV_XADD __gnu_cxx::__exchange_and_add\n    #else\n      #define CV_XADD __exchange_and_add\n    #endif\n  #endif\n\n#elif defined WIN32 || defined _WIN32 || defined WINCE\n  namespace cv { CV_EXPORTS int _interlockedExchangeAdd(int* addr, int delta); }\n  #define CV_XADD cv::_interlockedExchangeAdd\n\n#else\n  static inline int CV_XADD(int* addr, int delta)\n  { int tmp = *addr; *addr += delta; return tmp; }\n#endif\n\n#include <limits>\n\n#ifdef _MSC_VER\n# pragma warning(push)\n# pragma warning(disable:4127) //conditional expression is constant\n#endif\n\nnamespace cv\n{\n\nusing std::cos;\nusing std::sin;\nusing std::max;\nusing std::min;\nusing std::exp;\nusing std::log;\nusing std::pow;\nusing std::sqrt;\n\n\n/////////////// saturate_cast (used in image & signal processing) ///////////////////\n\ntemplate<typename _Tp> static inline _Tp saturate_cast(uchar v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(schar v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(ushort v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(short v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(unsigned v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(int v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(float v) { return _Tp(v); }\ntemplate<typename _Tp> static inline _Tp saturate_cast(double v) { return _Tp(v); }\n\ntemplate<> inline uchar saturate_cast<uchar>(schar v)\n{ return (uchar)std::max((int)v, 0); }\ntemplate<> inline uchar saturate_cast<uchar>(ushort v)\n{ return (uchar)std::min((unsigned)v, (unsigned)UCHAR_MAX); }\ntemplate<> inline uchar saturate_cast<uchar>(int v)\n{ return (uchar)((unsigned)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); }\ntemplate<> inline uchar saturate_cast<uchar>(short v)\n{ return saturate_cast<uchar>((int)v); }\ntemplate<> inline uchar saturate_cast<uchar>(unsigned v)\n{ return (uchar)std::min(v, (unsigned)UCHAR_MAX); }\ntemplate<> inline uchar saturate_cast<uchar>(float v)\n{ int iv = cvRound(v); return saturate_cast<uchar>(iv); }\ntemplate<> inline uchar saturate_cast<uchar>(double v)\n{ int iv = cvRound(v); return saturate_cast<uchar>(iv); }\n\ntemplate<> inline schar saturate_cast<schar>(uchar v)\n{ return (schar)std::min((int)v, SCHAR_MAX); }\ntemplate<> inline schar saturate_cast<schar>(ushort v)\n{ return (schar)std::min((unsigned)v, (unsigned)SCHAR_MAX); }\ntemplate<> inline schar saturate_cast<schar>(int v)\n{\n    return (schar)((unsigned)(v-SCHAR_MIN) <= (unsigned)UCHAR_MAX ?\n                v : v > 0 ? SCHAR_MAX : SCHAR_MIN);\n}\ntemplate<> inline schar saturate_cast<schar>(short v)\n{ return saturate_cast<schar>((int)v); }\ntemplate<> inline schar saturate_cast<schar>(unsigned v)\n{ return (schar)std::min(v, (unsigned)SCHAR_MAX); }\n\ntemplate<> inline schar saturate_cast<schar>(float v)\n{ int iv = cvRound(v); return saturate_cast<schar>(iv); }\ntemplate<> inline schar saturate_cast<schar>(double v)\n{ int iv = cvRound(v); return saturate_cast<schar>(iv); }\n\ntemplate<> inline ushort saturate_cast<ushort>(schar v)\n{ return (ushort)std::max((int)v, 0); }\ntemplate<> inline ushort saturate_cast<ushort>(short v)\n{ return (ushort)std::max((int)v, 0); }\ntemplate<> inline ushort saturate_cast<ushort>(int v)\n{ return (ushort)((unsigned)v <= (unsigned)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); }\ntemplate<> inline ushort saturate_cast<ushort>(unsigned v)\n{ return (ushort)std::min(v, (unsigned)USHRT_MAX); }\ntemplate<> inline ushort saturate_cast<ushort>(float v)\n{ int iv = cvRound(v); return saturate_cast<ushort>(iv); }\ntemplate<> inline ushort saturate_cast<ushort>(double v)\n{ int iv = cvRound(v); return saturate_cast<ushort>(iv); }\n\ntemplate<> inline short saturate_cast<short>(ushort v)\n{ return (short)std::min((int)v, SHRT_MAX); }\ntemplate<> inline short saturate_cast<short>(int v)\n{\n    return (short)((unsigned)(v - SHRT_MIN) <= (unsigned)USHRT_MAX ?\n            v : v > 0 ? SHRT_MAX : SHRT_MIN);\n}\ntemplate<> inline short saturate_cast<short>(unsigned v)\n{ return (short)std::min(v, (unsigned)SHRT_MAX); }\ntemplate<> inline short saturate_cast<short>(float v)\n{ int iv = cvRound(v); return saturate_cast<short>(iv); }\ntemplate<> inline short saturate_cast<short>(double v)\n{ int iv = cvRound(v); return saturate_cast<short>(iv); }\n\ntemplate<> inline int saturate_cast<int>(float v) { return cvRound(v); }\ntemplate<> inline int saturate_cast<int>(double v) { return cvRound(v); }\n\n// we intentionally do not clip negative numbers, to make -1 become 0xffffffff etc.\ntemplate<> inline unsigned saturate_cast<unsigned>(float v){ return cvRound(v); }\ntemplate<> inline unsigned saturate_cast<unsigned>(double v) { return cvRound(v); }\n\ninline int fast_abs(uchar v) { return v; }\ninline int fast_abs(schar v) { return std::abs((int)v); }\ninline int fast_abs(ushort v) { return v; }\ninline int fast_abs(short v) { return std::abs((int)v); }\ninline int fast_abs(int v) { return std::abs(v); }\ninline float fast_abs(float v) { return std::abs(v); }\ninline double fast_abs(double v) { return std::abs(v); }\n\n//////////////////////////////// Matx /////////////////////////////////\n\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx()\n{\n    for(int i = 0; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0)\n{\n    val[0] = v0;\n    for(int i = 1; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1)\n{\n    assert(channels >= 2);\n    val[0] = v0; val[1] = v1;\n    for(int i = 2; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2)\n{\n    assert(channels >= 3);\n    val[0] = v0; val[1] = v1; val[2] = v2;\n    for(int i = 3; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n{\n    assert(channels >= 4);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    for(int i = 4; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4)\n{\n    assert(channels >= 5);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; val[4] = v4;\n    for(int i = 5; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5)\n{\n    assert(channels >= 6);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5;\n    for(int i = 6; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6)\n{\n    assert(channels >= 7);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6;\n    for(int i = 7; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7)\n{\n    assert(channels >= 8);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    for(int i = 8; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                                                        _Tp v8)\n{\n    assert(channels >= 9);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8;\n    for(int i = 9; i < channels; i++) val[i] = _Tp(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                                                        _Tp v8, _Tp v9)\n{\n    assert(channels >= 10);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9;\n    for(int i = 10; i < channels; i++) val[i] = _Tp(0);\n}\n\n\ntemplate<typename _Tp, int m, int n>\ninline Matx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                            _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                            _Tp v8, _Tp v9, _Tp v10, _Tp v11)\n{\n    assert(channels == 12);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11;\n}\n\ntemplate<typename _Tp, int m, int n>\ninline Matx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                           _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                           _Tp v8, _Tp v9, _Tp v10, _Tp v11,\n                           _Tp v12, _Tp v13, _Tp v14, _Tp v15)\n{\n    assert(channels == 16);\n    val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3;\n    val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7;\n    val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11;\n    val[12] = v12; val[13] = v13; val[14] = v14; val[15] = v15;\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n>::Matx(const _Tp* values)\n{\n    for( int i = 0; i < channels; i++ ) val[i] = values[i];\n}\n\ntemplate<typename _Tp, int m, int n> inline Matx<_Tp, m, n> Matx<_Tp, m, n>::all(_Tp alpha)\n{\n    Matx<_Tp, m, n> M;\n    for( int i = 0; i < m*n; i++ ) M.val[i] = alpha;\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::zeros()\n{\n    return all(0);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::ones()\n{\n    return all(1);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::eye()\n{\n    Matx<_Tp,m,n> M;\n    for(int i = 0; i < MIN(m,n); i++)\n        M(i,i) = 1;\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline _Tp Matx<_Tp, m, n>::dot(const Matx<_Tp, m, n>& M) const\n{\n    _Tp s = 0;\n    for( int i = 0; i < m*n; i++ ) s += val[i]*M.val[i];\n    return s;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline double Matx<_Tp, m, n>::ddot(const Matx<_Tp, m, n>& M) const\n{\n    double s = 0;\n    for( int i = 0; i < m*n; i++ ) s += (double)val[i]*M.val[i];\n    return s;\n}\n\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::diag(const typename Matx<_Tp,m,n>::diag_type& d)\n{\n    Matx<_Tp,m,n> M;\n    for(int i = 0; i < MIN(m,n); i++)\n        M(i,i) = d(i, 0);\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::randu(_Tp a, _Tp b)\n{\n    Matx<_Tp,m,n> M;\n    Mat matM(M, false);\n    cv::randu(matM, Scalar(a), Scalar(b));\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n> Matx<_Tp,m,n>::randn(_Tp a, _Tp b)\n{\n    Matx<_Tp,m,n> M;\n    Mat matM(M, false);\n    cv::randn(matM, Scalar(a), Scalar(b));\n    return M;\n}\n\ntemplate<typename _Tp, int m, int n> template<typename T2>\ninline Matx<_Tp, m, n>::operator Matx<T2, m, n>() const\n{\n    Matx<T2, m, n> M;\n    for( int i = 0; i < m*n; i++ ) M.val[i] = saturate_cast<T2>(val[i]);\n    return M;\n}\n\n\ntemplate<typename _Tp, int m, int n> template<int m1, int n1> inline\nMatx<_Tp, m1, n1> Matx<_Tp, m, n>::reshape() const\n{\n    CV_DbgAssert(m1*n1 == m*n);\n    return (const Matx<_Tp, m1, n1>&)*this;\n}\n\n\ntemplate<typename _Tp, int m, int n>\ntemplate<int m1, int n1> inline\nMatx<_Tp, m1, n1> Matx<_Tp, m, n>::get_minor(int i, int j) const\n{\n    CV_DbgAssert(0 <= i && i+m1 <= m && 0 <= j && j+n1 <= n);\n    Matx<_Tp, m1, n1> s;\n    for( int di = 0; di < m1; di++ )\n        for( int dj = 0; dj < n1; dj++ )\n            s(di, dj) = (*this)(i+di, j+dj);\n    return s;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, 1, n> Matx<_Tp, m, n>::row(int i) const\n{\n    CV_DbgAssert((unsigned)i < (unsigned)m);\n    return Matx<_Tp, 1, n>(&val[i*n]);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, 1> Matx<_Tp, m, n>::col(int j) const\n{\n    CV_DbgAssert((unsigned)j < (unsigned)n);\n    Matx<_Tp, m, 1> v;\n    for( int i = 0; i < m; i++ )\n        v.val[i] = val[i*n + j];\n    return v;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\ntypename Matx<_Tp, m, n>::diag_type Matx<_Tp, m, n>::diag() const\n{\n    diag_type d;\n    for( int i = 0; i < MIN(m, n); i++ )\n        d.val[i] = val[i*n + i];\n    return d;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nconst _Tp& Matx<_Tp, m, n>::operator ()(int i, int j) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)m && (unsigned)j < (unsigned)n );\n    return this->val[i*n + j];\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\n_Tp& Matx<_Tp, m, n>::operator ()(int i, int j)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)m && (unsigned)j < (unsigned)n );\n    return val[i*n + j];\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nconst _Tp& Matx<_Tp, m, n>::operator ()(int i) const\n{\n    CV_DbgAssert( (m == 1 || n == 1) && (unsigned)i < (unsigned)(m+n-1) );\n    return val[i];\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\n_Tp& Matx<_Tp, m, n>::operator ()(int i)\n{\n    CV_DbgAssert( (m == 1 || n == 1) && (unsigned)i < (unsigned)(m+n-1) );\n    return val[i];\n}\n\n\ntemplate<typename _Tp1, typename _Tp2, int m, int n> static inline\nMatx<_Tp1, m, n>& operator += (Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] + b.val[i]);\n    return a;\n}\n\n\ntemplate<typename _Tp1, typename _Tp2, int m, int n> static inline\nMatx<_Tp1, m, n>& operator -= (Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] - b.val[i]);\n    return a;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_AddOp)\n{\n    for( int i = 0; i < m*n; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] + b.val[i]);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp)\n{\n    for( int i = 0; i < m*n; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] - b.val[i]);\n}\n\n\ntemplate<typename _Tp, int m, int n> template<typename _T2> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp)\n{\n    for( int i = 0; i < m*n; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp)\n{\n    for( int i = 0; i < m*n; i++ )\n        val[i] = saturate_cast<_Tp>(a.val[i] * b.val[i]);\n}\n\n\ntemplate<typename _Tp, int m, int n> template<int l> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp)\n{\n    for( int i = 0; i < m; i++ )\n        for( int j = 0; j < n; j++ )\n        {\n            _Tp s = 0;\n            for( int k = 0; k < l; k++ )\n                s += a(i, k) * b(k, j);\n            val[i*n + j] = s;\n        }\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp,m,n>::Matx(const Matx<_Tp, n, m>& a, Matx_TOp)\n{\n    for( int i = 0; i < m; i++ )\n        for( int j = 0; j < n; j++ )\n            val[i*n + j] = a(j, i);\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator + (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_AddOp());\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator - (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_SubOp());\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, int alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, float alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, double alpha)\n{\n    for( int i = 0; i < m*n; i++ )\n        a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, int alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, float alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, double alpha)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (int alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (float alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator * (double alpha, const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nMatx<_Tp, m, n> operator - (const Matx<_Tp, m, n>& a)\n{\n    return Matx<_Tp, m, n>(a, -1, Matx_ScaleOp());\n}\n\n\ntemplate<typename _Tp, int m, int n, int l> static inline\nMatx<_Tp, m, n> operator * (const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b)\n{\n    return Matx<_Tp, m, n>(a, b, Matx_MatMulOp());\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nVec<_Tp, m> operator * (const Matx<_Tp, m, n>& a, const Vec<_Tp, n>& b)\n{\n    Matx<_Tp, m, 1> c(a, b, Matx_MatMulOp());\n    return reinterpret_cast<const Vec<_Tp, m>&>(c);\n}\n\n\ntemplate<typename _Tp> static inline\nPoint_<_Tp> operator * (const Matx<_Tp, 2, 2>& a, const Point_<_Tp>& b)\n{\n    Matx<_Tp, 2, 1> tmp = a*Vec<_Tp,2>(b.x, b.y);\n    return Point_<_Tp>(tmp.val[0], tmp.val[1]);\n}\n\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Matx<_Tp, 3, 3>& a, const Point3_<_Tp>& b)\n{\n    Matx<_Tp, 3, 1> tmp = a*Vec<_Tp,3>(b.x, b.y, b.z);\n    return Point3_<_Tp>(tmp.val[0], tmp.val[1], tmp.val[2]);\n}\n\n\ntemplate<typename _Tp> static inline\nPoint3_<_Tp> operator * (const Matx<_Tp, 3, 3>& a, const Point_<_Tp>& b)\n{\n    Matx<_Tp, 3, 1> tmp = a*Vec<_Tp,3>(b.x, b.y, 1);\n    return Point3_<_Tp>(tmp.val[0], tmp.val[1], tmp.val[2]);\n}\n\n\ntemplate<typename _Tp> static inline\nMatx<_Tp, 4, 1> operator * (const Matx<_Tp, 4, 4>& a, const Point3_<_Tp>& b)\n{\n    return a*Matx<_Tp, 4, 1>(b.x, b.y, b.z, 1);\n}\n\n\ntemplate<typename _Tp> static inline\nScalar operator * (const Matx<_Tp, 4, 4>& a, const Scalar& b)\n{\n    Matx<double, 4, 1> c(Matx<double, 4, 4>(a), b, Matx_MatMulOp());\n    return static_cast<const Scalar&>(c);\n}\n\n\nstatic inline\nScalar operator * (const Matx<double, 4, 4>& a, const Scalar& b)\n{\n    Matx<double, 4, 1> c(a, b, Matx_MatMulOp());\n    return static_cast<const Scalar&>(c);\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n> Matx<_Tp, m, n>::mul(const Matx<_Tp, m, n>& a) const\n{\n    return Matx<_Tp, m, n>(*this, a, Matx_MulOp());\n}\n\n\nCV_EXPORTS int LU(float* A, size_t astep, int m, float* b, size_t bstep, int n);\nCV_EXPORTS int LU(double* A, size_t astep, int m, double* b, size_t bstep, int n);\nCV_EXPORTS bool Cholesky(float* A, size_t astep, int m, float* b, size_t bstep, int n);\nCV_EXPORTS bool Cholesky(double* A, size_t astep, int m, double* b, size_t bstep, int n);\n\n\ntemplate<typename _Tp, int m> struct Matx_DetOp\n{\n    double operator ()(const Matx<_Tp, m, m>& a) const\n    {\n        Matx<_Tp, m, m> temp = a;\n        double p = LU(temp.val, m*sizeof(_Tp), m, 0, 0, 0);\n        if( p == 0 )\n            return p;\n        for( int i = 0; i < m; i++ )\n            p *= temp(i, i);\n        return 1./p;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 1>\n{\n    double operator ()(const Matx<_Tp, 1, 1>& a) const\n    {\n        return a(0,0);\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 2>\n{\n    double operator ()(const Matx<_Tp, 2, 2>& a) const\n    {\n        return a(0,0)*a(1,1) - a(0,1)*a(1,0);\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_DetOp<_Tp, 3>\n{\n    double operator ()(const Matx<_Tp, 3, 3>& a) const\n    {\n        return a(0,0)*(a(1,1)*a(2,2) - a(2,1)*a(1,2)) -\n            a(0,1)*(a(1,0)*a(2,2) - a(2,0)*a(1,2)) +\n            a(0,2)*(a(1,0)*a(2,1) - a(2,0)*a(1,1));\n    }\n};\n\ntemplate<typename _Tp, int m> static inline\ndouble determinant(const Matx<_Tp, m, m>& a)\n{\n    return Matx_DetOp<_Tp, m>()(a);\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble trace(const Matx<_Tp, m, n>& a)\n{\n    _Tp s = 0;\n    for( int i = 0; i < std::min(m, n); i++ )\n        s += a(i,i);\n    return s;\n}\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, n, m> Matx<_Tp, m, n>::t() const\n{\n    return Matx<_Tp, n, m>(*this, Matx_TOp());\n}\n\n\ntemplate<typename _Tp, int m> struct Matx_FastInvOp\n{\n    bool operator()(const Matx<_Tp, m, m>& a, Matx<_Tp, m, m>& b, int method) const\n    {\n        Matx<_Tp, m, m> temp = a;\n\n        // assume that b is all 0's on input => make it a unity matrix\n        for( int i = 0; i < m; i++ )\n            b(i, i) = (_Tp)1;\n\n        if( method == DECOMP_CHOLESKY )\n            return Cholesky(temp.val, m*sizeof(_Tp), m, b.val, m*sizeof(_Tp), m);\n\n        return LU(temp.val, m*sizeof(_Tp), m, b.val, m*sizeof(_Tp), m) != 0;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_FastInvOp<_Tp, 2>\n{\n    bool operator()(const Matx<_Tp, 2, 2>& a, Matx<_Tp, 2, 2>& b, int) const\n    {\n        _Tp d = determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        b(1,1) = a(0,0)*d;\n        b(0,0) = a(1,1)*d;\n        b(0,1) = -a(0,1)*d;\n        b(1,0) = -a(1,0)*d;\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_FastInvOp<_Tp, 3>\n{\n    bool operator()(const Matx<_Tp, 3, 3>& a, Matx<_Tp, 3, 3>& b, int) const\n    {\n        _Tp d = (_Tp)determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        b(0,0) = (a(1,1) * a(2,2) - a(1,2) * a(2,1)) * d;\n        b(0,1) = (a(0,2) * a(2,1) - a(0,1) * a(2,2)) * d;\n        b(0,2) = (a(0,1) * a(1,2) - a(0,2) * a(1,1)) * d;\n\n        b(1,0) = (a(1,2) * a(2,0) - a(1,0) * a(2,2)) * d;\n        b(1,1) = (a(0,0) * a(2,2) - a(0,2) * a(2,0)) * d;\n        b(1,2) = (a(0,2) * a(1,0) - a(0,0) * a(1,2)) * d;\n\n        b(2,0) = (a(1,0) * a(2,1) - a(1,1) * a(2,0)) * d;\n        b(2,1) = (a(0,1) * a(2,0) - a(0,0) * a(2,1)) * d;\n        b(2,2) = (a(0,0) * a(1,1) - a(0,1) * a(1,0)) * d;\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, n, m> Matx<_Tp, m, n>::inv(int method) const\n{\n    Matx<_Tp, n, m> b;\n    bool ok;\n    if( method == DECOMP_LU || method == DECOMP_CHOLESKY )\n        ok = Matx_FastInvOp<_Tp, m>()(*this, b, method);\n    else\n    {\n        Mat A(*this, false), B(b, false);\n        ok = (invert(A, B, method) != 0);\n    }\n    return ok ? b : Matx<_Tp, n, m>::zeros();\n}\n\n\ntemplate<typename _Tp, int m, int n> struct Matx_FastSolveOp\n{\n    bool operator()(const Matx<_Tp, m, m>& a, const Matx<_Tp, m, n>& b,\n                    Matx<_Tp, m, n>& x, int method) const\n    {\n        Matx<_Tp, m, m> temp = a;\n        x = b;\n        if( method == DECOMP_CHOLESKY )\n            return Cholesky(temp.val, m*sizeof(_Tp), m, x.val, n*sizeof(_Tp), n);\n\n        return LU(temp.val, m*sizeof(_Tp), m, x.val, n*sizeof(_Tp), n) != 0;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_FastSolveOp<_Tp, 2, 1>\n{\n    bool operator()(const Matx<_Tp, 2, 2>& a, const Matx<_Tp, 2, 1>& b,\n                    Matx<_Tp, 2, 1>& x, int) const\n    {\n        _Tp d = determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        x(0) = (b(0)*a(1,1) - b(1)*a(0,1))*d;\n        x(1) = (b(1)*a(0,0) - b(0)*a(1,0))*d;\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp> struct Matx_FastSolveOp<_Tp, 3, 1>\n{\n    bool operator()(const Matx<_Tp, 3, 3>& a, const Matx<_Tp, 3, 1>& b,\n                    Matx<_Tp, 3, 1>& x, int) const\n    {\n        _Tp d = (_Tp)determinant(a);\n        if( d == 0 )\n            return false;\n        d = 1/d;\n        x(0) = d*(b(0)*(a(1,1)*a(2,2) - a(1,2)*a(2,1)) -\n                a(0,1)*(b(1)*a(2,2) - a(1,2)*b(2)) +\n                a(0,2)*(b(1)*a(2,1) - a(1,1)*b(2)));\n\n        x(1) = d*(a(0,0)*(b(1)*a(2,2) - a(1,2)*b(2)) -\n                b(0)*(a(1,0)*a(2,2) - a(1,2)*a(2,0)) +\n                a(0,2)*(a(1,0)*b(2) - b(1)*a(2,0)));\n\n        x(2) = d*(a(0,0)*(a(1,1)*b(2) - b(1)*a(2,1)) -\n                a(0,1)*(a(1,0)*b(2) - b(1)*a(2,0)) +\n                b(0)*(a(1,0)*a(2,1) - a(1,1)*a(2,0)));\n        return true;\n    }\n};\n\n\ntemplate<typename _Tp, int m, int n> template<int l> inline\nMatx<_Tp, n, l> Matx<_Tp, m, n>::solve(const Matx<_Tp, m, l>& rhs, int method) const\n{\n    Matx<_Tp, n, l> x;\n    bool ok;\n    if( method == DECOMP_LU || method == DECOMP_CHOLESKY )\n        ok = Matx_FastSolveOp<_Tp, m, l>()(*this, rhs, x, method);\n    else\n    {\n        Mat A(*this, false), B(rhs, false), X(x, false);\n        ok = cv::solve(A, B, X, method);\n    }\n\n    return ok ? x : Matx<_Tp, n, l>::zeros();\n}\n\ntemplate<typename _Tp, int m, int n> inline\nVec<_Tp, n> Matx<_Tp, m, n>::solve(const Vec<_Tp, m>& rhs, int method) const\n{\n    Matx<_Tp, n, 1> x = solve(reinterpret_cast<const Matx<_Tp, m, 1>&>(rhs), method);\n    return reinterpret_cast<Vec<_Tp, n>&>(x);\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL2Sqr(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    int i=0;\n #if CV_ENABLE_UNROLLED\n    for( ; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = a[i], v1 = a[i+1], v2 = a[i+2], v3 = a[i+3];\n        s += v0*v0 + v1*v1 + v2*v2 + v3*v3;\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = a[i];\n        s += v*v;\n    }\n    return s;\n}\n\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL1(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    int i = 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        s += (_AccTp)fast_abs(a[i]) + (_AccTp)fast_abs(a[i+1]) +\n            (_AccTp)fast_abs(a[i+2]) + (_AccTp)fast_abs(a[i+3]);\n    }\n#endif\n    for( ; i < n; i++ )\n        s += fast_abs(a[i]);\n    return s;\n}\n\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normInf(const _Tp* a, int n)\n{\n    _AccTp s = 0;\n    for( int i = 0; i < n; i++ )\n        s = std::max(s, (_AccTp)fast_abs(a[i]));\n    return s;\n}\n\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL2Sqr(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    int i= 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]);\n        s += v0*v0 + v1*v1 + v2*v2 + v3*v3;\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = _AccTp(a[i] - b[i]);\n        s += v*v;\n    }\n    return s;\n}\n\nCV_EXPORTS float normL2Sqr_(const float* a, const float* b, int n);\nCV_EXPORTS float normL1_(const float* a, const float* b, int n);\nCV_EXPORTS int normL1_(const uchar* a, const uchar* b, int n);\nCV_EXPORTS int normHamming(const uchar* a, const uchar* b, int n);\nCV_EXPORTS int normHamming(const uchar* a, const uchar* b, int n, int cellSize);\n\ntemplate<> inline float normL2Sqr(const float* a, const float* b, int n)\n{\n    if( n >= 8 )\n        return normL2Sqr_(a, b, n);\n    float s = 0;\n    for( int i = 0; i < n; i++ )\n    {\n        float v = a[i] - b[i];\n        s += v*v;\n    }\n    return s;\n}\n\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normL1(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    int i= 0;\n#if CV_ENABLE_UNROLLED\n    for(; i <= n - 4; i += 4 )\n    {\n        _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]);\n        s += std::abs(v0) + std::abs(v1) + std::abs(v2) + std::abs(v3);\n    }\n#endif\n    for( ; i < n; i++ )\n    {\n        _AccTp v = _AccTp(a[i] - b[i]);\n        s += std::abs(v);\n    }\n    return s;\n}\n\ntemplate<> inline float normL1(const float* a, const float* b, int n)\n{\n    if( n >= 8 )\n        return normL1_(a, b, n);\n    float s = 0;\n    for( int i = 0; i < n; i++ )\n    {\n        float v = a[i] - b[i];\n        s += std::abs(v);\n    }\n    return s;\n}\n\ntemplate<> inline int normL1(const uchar* a, const uchar* b, int n)\n{\n    return normL1_(a, b, n);\n}\n\ntemplate<typename _Tp, typename _AccTp> static inline\n_AccTp normInf(const _Tp* a, const _Tp* b, int n)\n{\n    _AccTp s = 0;\n    for( int i = 0; i < n; i++ )\n    {\n        _AccTp v0 = a[i] - b[i];\n        s = std::max(s, std::abs(v0));\n    }\n    return s;\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble norm(const Matx<_Tp, m, n>& M)\n{\n    return std::sqrt(normL2Sqr<_Tp, double>(M.val, m*n));\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\ndouble norm(const Matx<_Tp, m, n>& M, int normType)\n{\n    return normType == NORM_INF ? (double)normInf<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n) :\n        normType == NORM_L1 ? (double)normL1<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n) :\n        std::sqrt((double)normL2Sqr<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n));\n}\n\n\ntemplate<typename _Tp, int m, int n> static inline\nbool operator == (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    for( int i = 0; i < m*n; i++ )\n        if( a.val[i] != b.val[i] ) return false;\n    return true;\n}\n\ntemplate<typename _Tp, int m, int n> static inline\nbool operator != (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)\n{\n    return !(a == b);\n}\n\n\ntemplate<typename _Tp, typename _T2, int m, int n> static inline\nMatxCommaInitializer<_Tp, m, n> operator << (const Matx<_Tp, m, n>& mtx, _T2 val)\n{\n    MatxCommaInitializer<_Tp, m, n> commaInitializer((Matx<_Tp, m, n>*)&mtx);\n    return (commaInitializer, val);\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatxCommaInitializer<_Tp, m, n>::MatxCommaInitializer(Matx<_Tp, m, n>* _mtx)\n    : dst(_mtx), idx(0)\n{}\n\ntemplate<typename _Tp, int m, int n> template<typename _T2> inline\nMatxCommaInitializer<_Tp, m, n>& MatxCommaInitializer<_Tp, m, n>::operator , (_T2 value)\n{\n    CV_DbgAssert( idx < m*n );\n    dst->val[idx++] = saturate_cast<_Tp>(value);\n    return *this;\n}\n\ntemplate<typename _Tp, int m, int n> inline\nMatx<_Tp, m, n> MatxCommaInitializer<_Tp, m, n>::operator *() const\n{\n    CV_DbgAssert( idx == n*m );\n    return *dst;\n}\n\n/////////////////////////// short vector (Vec) /////////////////////////////\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec()\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0)\n    : Matx<_Tp, cn, 1>(v0)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1)\n    : Matx<_Tp, cn, 1>(v0, v1)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2)\n    : Matx<_Tp, cn, 1>(v0, v1, v2)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                                                        _Tp v8)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3,\n                                                        _Tp v4, _Tp v5, _Tp v6, _Tp v7,\n                                                        _Tp v8, _Tp v9)\n    : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(const _Tp* values)\n    : Matx<_Tp, cn, 1>(values)\n{}\n\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::Vec(const Vec<_Tp, cn>& m)\n    : Matx<_Tp, cn, 1>(m.val)\n{}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp op)\n: Matx<_Tp, cn, 1>(a, b, op)\n{}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp op)\n: Matx<_Tp, cn, 1>(a, b, op)\n{}\n\ntemplate<typename _Tp, int cn> template<typename _T2> inline\nVec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp op)\n: Matx<_Tp, cn, 1>(a, alpha, op)\n{}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha)\n{\n    Vec v;\n    for( int i = 0; i < cn; i++ ) v.val[i] = alpha;\n    return v;\n}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::mul(const Vec<_Tp, cn>& v) const\n{\n    Vec<_Tp, cn> w;\n    for( int i = 0; i < cn; i++ ) w.val[i] = saturate_cast<_Tp>(this->val[i]*v.val[i]);\n    return w;\n}\n\ntemplate<typename _Tp> Vec<_Tp, 2> conjugate(const Vec<_Tp, 2>& v)\n{\n    return Vec<_Tp, 2>(v[0], -v[1]);\n}\n\ntemplate<typename _Tp> Vec<_Tp, 4> conjugate(const Vec<_Tp, 4>& v)\n{\n    return Vec<_Tp, 4>(v[0], -v[1], -v[2], -v[3]);\n}\n\ntemplate<> inline Vec<float, 2> Vec<float, 2>::conj() const\n{\n    return conjugate(*this);\n}\n\ntemplate<> inline Vec<double, 2> Vec<double, 2>::conj() const\n{\n    return conjugate(*this);\n}\n\ntemplate<> inline Vec<float, 4> Vec<float, 4>::conj() const\n{\n    return conjugate(*this);\n}\n\ntemplate<> inline Vec<double, 4> Vec<double, 4>::conj() const\n{\n    return conjugate(*this);\n}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::cross(const Vec<_Tp, cn>&) const\n{\n    CV_Error(CV_StsError, \"for arbitrary-size vector there is no cross-product defined\");\n    return Vec<_Tp, cn>();\n}\n\ntemplate<typename _Tp, int cn> template<typename T2>\ninline Vec<_Tp, cn>::operator Vec<T2, cn>() const\n{\n    Vec<T2, cn> v;\n    for( int i = 0; i < cn; i++ ) v.val[i] = saturate_cast<T2>(this->val[i]);\n    return v;\n}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn>::operator CvScalar() const\n{\n    CvScalar s = {{0,0,0,0}};\n    int i;\n    for( i = 0; i < std::min(cn, 4); i++ ) s.val[i] = this->val[i];\n    for( ; i < 4; i++ ) s.val[i] = 0;\n    return s;\n}\n\ntemplate<typename _Tp, int cn> inline const _Tp& Vec<_Tp, cn>::operator [](int i) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline _Tp& Vec<_Tp, cn>::operator [](int i)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline const _Tp& Vec<_Tp, cn>::operator ()(int i) const\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp, int cn> inline _Tp& Vec<_Tp, cn>::operator ()(int i)\n{\n    CV_DbgAssert( (unsigned)i < (unsigned)cn );\n    return this->val[i];\n}\n\ntemplate<typename _Tp1, typename _Tp2, int cn> static inline Vec<_Tp1, cn>&\noperator += (Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b)\n{\n    for( int i = 0; i < cn; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] + b.val[i]);\n    return a;\n}\n\ntemplate<typename _Tp1, typename _Tp2, int cn> static inline Vec<_Tp1, cn>&\noperator -= (Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b)\n{\n    for( int i = 0; i < cn; i++ )\n        a.val[i] = saturate_cast<_Tp1>(a.val[i] - b.val[i]);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator + (const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b)\n{\n    return Vec<_Tp, cn>(a, b, Matx_AddOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator - (const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b)\n{\n    return Vec<_Tp, cn>(a, b, Matx_SubOp());\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, int alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, float alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, double alpha)\n{\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*alpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, int alpha)\n{\n    double ialpha = 1./alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, float alpha)\n{\n    float ialpha = 1.f/alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline\nVec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, double alpha)\n{\n    double ialpha = 1./alpha;\n    for( int i = 0; i < cn; i++ )\n        a[i] = saturate_cast<_Tp>(a[i]*ialpha);\n    return a;\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (const Vec<_Tp, cn>& a, int alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (int alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (const Vec<_Tp, cn>& a, float alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (float alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (const Vec<_Tp, cn>& a, double alpha)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator * (double alpha, const Vec<_Tp, cn>& a)\n{\n    return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator / (const Vec<_Tp, cn>& a, int alpha)\n{\n    return Vec<_Tp, cn>(a, 1./alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator / (const Vec<_Tp, cn>& a, float alpha)\n{\n    return Vec<_Tp, cn>(a, 1.f/alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator / (const Vec<_Tp, cn>& a, double alpha)\n{\n    return Vec<_Tp, cn>(a, 1./alpha, Matx_ScaleOp());\n}\n\ntemplate<typename _Tp, int cn> static inline Vec<_Tp, cn>\noperator - (const Vec<_Tp, cn>& a)\n{\n    Vec<_Tp,cn> t;\n    for( int i = 0; i < cn; i++ ) t.val[i] = saturate_cast<_Tp>(-a.val[i]);\n    return t;\n}\n\ntemplate<typename _Tp> inline Vec<_Tp, 4> operator * (const Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2)\n{\n    return Vec<_Tp, 4>(saturate_cast<_Tp>(v1[0]*v2[0] - v1[1]*v2[1] - v1[2]*v2[2] - v1[3]*v2[3]),\n                       saturate_cast<_Tp>(v1[0]*v2[1] + v1[1]*v2[0] + v1[2]*v2[3] - v1[3]*v2[2]),\n                       saturate_cast<_Tp>(v1[0]*v2[2] - v1[1]*v2[3] + v1[2]*v2[0] + v1[3]*v2[1]),\n                       saturate_cast<_Tp>(v1[0]*v2[3] + v1[1]*v2[2] - v1[2]*v2[1] + v1[3]*v2[0]));\n}\n\ntemplate<typename _Tp> inline Vec<_Tp, 4>& operator *= (Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2)\n{\n    v1 = v1 * v2;\n    return v1;\n}\n\ntemplate<> inline Vec<float, 3> Vec<float, 3>::cross(const Vec<float, 3>& v) const\n{\n    return Vec<float,3>(val[1]*v.val[2] - val[2]*v.val[1],\n                     val[2]*v.val[0] - val[0]*v.val[2],\n                     val[0]*v.val[1] - val[1]*v.val[0]);\n}\n\ntemplate<> inline Vec<double, 3> Vec<double, 3>::cross(const Vec<double, 3>& v) const\n{\n    return Vec<double,3>(val[1]*v.val[2] - val[2]*v.val[1],\n                     val[2]*v.val[0] - val[0]*v.val[2],\n                     val[0]*v.val[1] - val[1]*v.val[0]);\n}\n\ntemplate<typename _Tp, int cn> inline Vec<_Tp, cn> normalize(const Vec<_Tp, cn>& v)\n{\n    double nv = norm(v);\n    return v * (nv ? 1./nv : 0.);\n}\n\ntemplate<typename _Tp, typename _T2, int cn> static inline\nVecCommaInitializer<_Tp, cn> operator << (const Vec<_Tp, cn>& vec, _T2 val)\n{\n    VecCommaInitializer<_Tp, cn> commaInitializer((Vec<_Tp, cn>*)&vec);\n    return (commaInitializer, val);\n}\n\ntemplate<typename _Tp, int cn> inline\nVecCommaInitializer<_Tp, cn>::VecCommaInitializer(Vec<_Tp, cn>* _vec)\n    : MatxCommaInitializer<_Tp, cn, 1>(_vec)\n{}\n\ntemplate<typename _Tp, int cn> template<typename _T2> inline\nVecCommaInitializer<_Tp, cn>& VecCommaInitializer<_Tp, cn>::operator , (_T2 value)\n{\n    CV_DbgAssert( this->idx < cn );\n    this->dst->val[this->idx++] = saturate_cast<_Tp>(value);\n    return *this;\n}\n\ntemplate<typename _Tp, int cn> inline\nVec<_Tp, cn> VecCommaInitializer<_Tp, cn>::operator *() const\n{\n    CV_DbgAssert( this->idx == cn );\n    return *this->dst;\n}\n\n//////////////////////////////// Complex //////////////////////////////\n\ntemplate<typename _Tp> inline Complex<_Tp>::Complex() : re(0), im(0) {}\ntemplate<typename _Tp> inline Complex<_Tp>::Complex( _Tp _re, _Tp _im ) : re(_re), im(_im) {}\ntemplate<typename _Tp> template<typename T2> inline Complex<_Tp>::operator Complex<T2>() const\n{ return Complex<T2>(saturate_cast<T2>(re), saturate_cast<T2>(im)); }\ntemplate<typename _Tp> inline Complex<_Tp> Complex<_Tp>::conj() const\n{ return Complex<_Tp>(re, -im); }\n\ntemplate<typename _Tp> static inline\nbool operator == (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return a.re == b.re && a.im == b.im; }\n\ntemplate<typename _Tp> static inline\nbool operator != (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return a.re != b.re || a.im != b.im; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return Complex<_Tp>( a.re + b.re, a.im + b.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator += (Complex<_Tp>& a, const Complex<_Tp>& b)\n{ a.re += b.re; a.im += b.im; return a; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return Complex<_Tp>( a.re - b.re, a.im - b.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator -= (Complex<_Tp>& a, const Complex<_Tp>& b)\n{ a.re -= b.re; a.im -= b.im; return a; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a)\n{ return Complex<_Tp>(-a.re, -a.im); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{ return Complex<_Tp>( a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (const Complex<_Tp>& a, _Tp b)\n{ return Complex<_Tp>( a.re*b, a.im*b ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator * (_Tp b, const Complex<_Tp>& a)\n{ return Complex<_Tp>( a.re*b, a.im*b ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (const Complex<_Tp>& a, _Tp b)\n{ return Complex<_Tp>( a.re + b, a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (const Complex<_Tp>& a, _Tp b)\n{ return Complex<_Tp>( a.re - b, a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator + (_Tp b, const Complex<_Tp>& a)\n{ return Complex<_Tp>( a.re + b, a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator - (_Tp b, const Complex<_Tp>& a)\n{ return Complex<_Tp>( b - a.re, -a.im ); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator += (Complex<_Tp>& a, _Tp b)\n{ a.re += b; return a; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator -= (Complex<_Tp>& a, _Tp b)\n{ a.re -= b; return a; }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator *= (Complex<_Tp>& a, _Tp b)\n{ a.re *= b; a.im *= b; return a; }\n\ntemplate<typename _Tp> static inline\ndouble abs(const Complex<_Tp>& a)\n{ return std::sqrt( (double)a.re*a.re + (double)a.im*a.im); }\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (const Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    double t = 1./((double)b.re*b.re + (double)b.im*b.im);\n    return Complex<_Tp>( (_Tp)((a.re*b.re + a.im*b.im)*t),\n                        (_Tp)((-a.re*b.im + a.im*b.re)*t) );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp>& operator /= (Complex<_Tp>& a, const Complex<_Tp>& b)\n{\n    return (a = a / b);\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (const Complex<_Tp>& a, _Tp b)\n{\n    _Tp t = (_Tp)1/b;\n    return Complex<_Tp>( a.re*t, a.im*t );\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator / (_Tp b, const Complex<_Tp>& a)\n{\n    return Complex<_Tp>(b)/a;\n}\n\ntemplate<typename _Tp> static inline\nComplex<_Tp> operator /= (const Complex<_Tp>& a, _Tp b)\n{\n    _Tp t = (_Tp)1/b;\n    a.re *= t; a.im *= t; return a;\n}\n\n//////////////////////////////// 2D Point ////////////////////////////////\n\ntemplate<typename _Tp> inline Point_<_Tp>::Point_() : x(0), y(0) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(_Tp _x, _Tp _y) : x(_x), y(_y) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const Point_& pt) : x(pt.x), y(pt.y) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const CvPoint& pt) : x((_Tp)pt.x), y((_Tp)pt.y) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const CvPoint2D32f& pt)\n    : x(saturate_cast<_Tp>(pt.x)), y(saturate_cast<_Tp>(pt.y)) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const Size_<_Tp>& sz) : x(sz.width), y(sz.height) {}\ntemplate<typename _Tp> inline Point_<_Tp>::Point_(const Vec<_Tp,2>& v) : x(v[0]), y(v[1]) {}\ntemplate<typename _Tp> inline Point_<_Tp>& Point_<_Tp>::operator = (const Point_& pt)\n{ x = pt.x; y = pt.y; return *this; }\n\ntemplate<typename _Tp> template<typename _Tp2> inline Point_<_Tp>::operator Point_<_Tp2>() const\n{ return Point_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y)); }\ntemplate<typename _Tp> inline Point_<_Tp>::operator CvPoint() const\n{ return cvPoint(saturate_cast<int>(x), saturate_cast<int>(y)); }\ntemplate<typename _Tp> inline Point_<_Tp>::operator CvPoint2D32f() const\n{ return cvPoint2D32f((float)x, (float)y); }\ntemplate<typename _Tp> inline Point_<_Tp>::operator Vec<_Tp, 2>() const\n{ return Vec<_Tp, 2>(x, y); }\n\ntemplate<typename _Tp> inline _Tp Point_<_Tp>::dot(const Point_& pt) const\n{ return saturate_cast<_Tp>(x*pt.x + y*pt.y); }\ntemplate<typename _Tp> inline double Point_<_Tp>::ddot(const Point_& pt) const\n{ return (double)x*pt.x + (double)y*pt.y; }\n\ntemplate<typename _Tp> inline double Point_<_Tp>::cross(const Point_& pt) const\n{ return (double)x*pt.y - (double)y*pt.x; }\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator += (Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    a.x = saturate_cast<_Tp>(a.x + b.x);\n    a.y = saturate_cast<_Tp>(a.y + b.y);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator -= (Point_<_Tp>& a, const Point_<_Tp>& b)\n{\n    a.x = saturate_cast<_Tp>(a.x - b.x);\n    a.y = saturate_cast<_Tp>(a.y - b.y);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator *= (Point_<_Tp>& a, int b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator *= (Point_<_Tp>& a, float b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point_<_Tp>&\noperator *= (Point_<_Tp>& a, double b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline double norm(const Point_<_Tp>& pt)\n{ return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y); }\n\ntemplate<typename _Tp> static inline bool operator == (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{ return a.x == b.x && a.y == b.y; }\n\ntemplate<typename _Tp> static inline bool operator != (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{ return a.x != b.x || a.y != b.y; }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator + (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x + b.x), saturate_cast<_Tp>(a.y + b.y) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator - (const Point_<_Tp>& a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x - b.x), saturate_cast<_Tp>(a.y - b.y) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator - (const Point_<_Tp>& a)\n{ return Point_<_Tp>( saturate_cast<_Tp>(-a.x), saturate_cast<_Tp>(-a.y) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (const Point_<_Tp>& a, int b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (int a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (const Point_<_Tp>& a, float b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (float a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (const Point_<_Tp>& a, double b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); }\n\ntemplate<typename _Tp> static inline Point_<_Tp> operator * (double a, const Point_<_Tp>& b)\n{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); }\n\n//////////////////////////////// 3D Point ////////////////////////////////\n\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_() : x(0), y(0), z(0) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(_Tp _x, _Tp _y, _Tp _z) : x(_x), y(_y), z(_z) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(const Point3_& pt) : x(pt.x), y(pt.y), z(pt.z) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(const Point_<_Tp>& pt) : x(pt.x), y(pt.y), z(_Tp()) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(const CvPoint3D32f& pt) :\n    x(saturate_cast<_Tp>(pt.x)), y(saturate_cast<_Tp>(pt.y)), z(saturate_cast<_Tp>(pt.z)) {}\ntemplate<typename _Tp> inline Point3_<_Tp>::Point3_(const Vec<_Tp, 3>& v) : x(v[0]), y(v[1]), z(v[2]) {}\n\ntemplate<typename _Tp> template<typename _Tp2> inline Point3_<_Tp>::operator Point3_<_Tp2>() const\n{ return Point3_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y), saturate_cast<_Tp2>(z)); }\n\ntemplate<typename _Tp> inline Point3_<_Tp>::operator CvPoint3D32f() const\n{ return cvPoint3D32f((float)x, (float)y, (float)z); }\n\ntemplate<typename _Tp> inline Point3_<_Tp>::operator Vec<_Tp, 3>() const\n{ return Vec<_Tp, 3>(x, y, z); }\n\ntemplate<typename _Tp> inline Point3_<_Tp>& Point3_<_Tp>::operator = (const Point3_& pt)\n{ x = pt.x; y = pt.y; z = pt.z; return *this; }\n\ntemplate<typename _Tp> inline _Tp Point3_<_Tp>::dot(const Point3_& pt) const\n{ return saturate_cast<_Tp>(x*pt.x + y*pt.y + z*pt.z); }\ntemplate<typename _Tp> inline double Point3_<_Tp>::ddot(const Point3_& pt) const\n{ return (double)x*pt.x + (double)y*pt.y + (double)z*pt.z; }\n\ntemplate<typename _Tp> inline Point3_<_Tp> Point3_<_Tp>::cross(const Point3_<_Tp>& pt) const\n{\n    return Point3_<_Tp>(y*pt.z - z*pt.y, z*pt.x - x*pt.z, x*pt.y - y*pt.x);\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator += (Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    a.x = saturate_cast<_Tp>(a.x + b.x);\n    a.y = saturate_cast<_Tp>(a.y + b.y);\n    a.z = saturate_cast<_Tp>(a.z + b.z);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator -= (Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{\n    a.x = saturate_cast<_Tp>(a.x - b.x);\n    a.y = saturate_cast<_Tp>(a.y - b.y);\n    a.z = saturate_cast<_Tp>(a.z - b.z);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator *= (Point3_<_Tp>& a, int b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    a.z = saturate_cast<_Tp>(a.z*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator *= (Point3_<_Tp>& a, float b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    a.z = saturate_cast<_Tp>(a.z*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Point3_<_Tp>&\noperator *= (Point3_<_Tp>& a, double b)\n{\n    a.x = saturate_cast<_Tp>(a.x*b);\n    a.y = saturate_cast<_Tp>(a.y*b);\n    a.z = saturate_cast<_Tp>(a.z*b);\n    return a;\n}\n\ntemplate<typename _Tp> static inline double norm(const Point3_<_Tp>& pt)\n{ return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y + (double)pt.z*pt.z); }\n\ntemplate<typename _Tp> static inline bool operator == (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{ return a.x == b.x && a.y == b.y && a.z == b.z; }\n\ntemplate<typename _Tp> static inline bool operator != (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{ return a.x != b.x || a.y != b.y || a.z != b.z; }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator + (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x + b.x),\n                      saturate_cast<_Tp>(a.y + b.y),\n                      saturate_cast<_Tp>(a.z + b.z)); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator - (const Point3_<_Tp>& a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x - b.x),\n                        saturate_cast<_Tp>(a.y - b.y),\n                        saturate_cast<_Tp>(a.z - b.z)); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator - (const Point3_<_Tp>& a)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(-a.x),\n                      saturate_cast<_Tp>(-a.y),\n                      saturate_cast<_Tp>(-a.z) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, int b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b),\n                      saturate_cast<_Tp>(a.y*b),\n                      saturate_cast<_Tp>(a.z*b) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (int a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a),\n                      saturate_cast<_Tp>(b.y*a),\n                      saturate_cast<_Tp>(b.z*a) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, float b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b),\n                      saturate_cast<_Tp>(a.y*b),\n                      saturate_cast<_Tp>(a.z*b) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (float a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a),\n                      saturate_cast<_Tp>(b.y*a),\n                      saturate_cast<_Tp>(b.z*a) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, double b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b),\n                      saturate_cast<_Tp>(a.y*b),\n                      saturate_cast<_Tp>(a.z*b) ); }\n\ntemplate<typename _Tp> static inline Point3_<_Tp> operator * (double a, const Point3_<_Tp>& b)\n{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a),\n                      saturate_cast<_Tp>(b.y*a),\n                      saturate_cast<_Tp>(b.z*a) ); }\n\n//////////////////////////////// Size ////////////////////////////////\n\ntemplate<typename _Tp> inline Size_<_Tp>::Size_()\n    : width(0), height(0) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(_Tp _width, _Tp _height)\n    : width(_width), height(_height) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(const Size_& sz)\n    : width(sz.width), height(sz.height) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(const CvSize& sz)\n    : width(saturate_cast<_Tp>(sz.width)), height(saturate_cast<_Tp>(sz.height)) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(const CvSize2D32f& sz)\n    : width(saturate_cast<_Tp>(sz.width)), height(saturate_cast<_Tp>(sz.height)) {}\ntemplate<typename _Tp> inline Size_<_Tp>::Size_(const Point_<_Tp>& pt) : width(pt.x), height(pt.y) {}\n\ntemplate<typename _Tp> template<typename _Tp2> inline Size_<_Tp>::operator Size_<_Tp2>() const\n{ return Size_<_Tp2>(saturate_cast<_Tp2>(width), saturate_cast<_Tp2>(height)); }\ntemplate<typename _Tp> inline Size_<_Tp>::operator CvSize() const\n{ return cvSize(saturate_cast<int>(width), saturate_cast<int>(height)); }\ntemplate<typename _Tp> inline Size_<_Tp>::operator CvSize2D32f() const\n{ return cvSize2D32f((float)width, (float)height); }\n\ntemplate<typename _Tp> inline Size_<_Tp>& Size_<_Tp>::operator = (const Size_<_Tp>& sz)\n{ width = sz.width; height = sz.height; return *this; }\ntemplate<typename _Tp> static inline Size_<_Tp> operator * (const Size_<_Tp>& a, _Tp b)\n{ return Size_<_Tp>(a.width * b, a.height * b); }\ntemplate<typename _Tp> static inline Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{ return Size_<_Tp>(a.width + b.width, a.height + b.height); }\ntemplate<typename _Tp> static inline Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{ return Size_<_Tp>(a.width - b.width, a.height - b.height); }\ntemplate<typename _Tp> inline _Tp Size_<_Tp>::area() const { return width*height; }\n\ntemplate<typename _Tp> static inline Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b)\n{ a.width += b.width; a.height += b.height; return a; }\ntemplate<typename _Tp> static inline Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b)\n{ a.width -= b.width; a.height -= b.height; return a; }\n\ntemplate<typename _Tp> static inline bool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{ return a.width == b.width && a.height == b.height; }\ntemplate<typename _Tp> static inline bool operator != (const Size_<_Tp>& a, const Size_<_Tp>& b)\n{ return a.width != b.width || a.height != b.height; }\n\n//////////////////////////////// Rect ////////////////////////////////\n\n\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_() : x(0), y(0), width(0), height(0) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height) : x(_x), y(_y), width(_width), height(_height) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(const Rect_<_Tp>& r) : x(r.x), y(r.y), width(r.width), height(r.height) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(const CvRect& r) : x((_Tp)r.x), y((_Tp)r.y), width((_Tp)r.width), height((_Tp)r.height) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz) :\n    x(org.x), y(org.y), width(sz.width), height(sz.height) {}\ntemplate<typename _Tp> inline Rect_<_Tp>::Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2)\n{\n    x = std::min(pt1.x, pt2.x); y = std::min(pt1.y, pt2.y);\n    width = std::max(pt1.x, pt2.x) - x; height = std::max(pt1.y, pt2.y) - y;\n}\ntemplate<typename _Tp> inline Rect_<_Tp>& Rect_<_Tp>::operator = ( const Rect_<_Tp>& r )\n{ x = r.x; y = r.y; width = r.width; height = r.height; return *this; }\n\ntemplate<typename _Tp> inline Point_<_Tp> Rect_<_Tp>::tl() const { return Point_<_Tp>(x,y); }\ntemplate<typename _Tp> inline Point_<_Tp> Rect_<_Tp>::br() const { return Point_<_Tp>(x+width, y+height); }\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator += ( Rect_<_Tp>& a, const Point_<_Tp>& b )\n{ a.x += b.x; a.y += b.y; return a; }\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator -= ( Rect_<_Tp>& a, const Point_<_Tp>& b )\n{ a.x -= b.x; a.y -= b.y; return a; }\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator += ( Rect_<_Tp>& a, const Size_<_Tp>& b )\n{ a.width += b.width; a.height += b.height; return a; }\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator -= ( Rect_<_Tp>& a, const Size_<_Tp>& b )\n{ a.width -= b.width; a.height -= b.height; return a; }\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator &= ( Rect_<_Tp>& a, const Rect_<_Tp>& b )\n{\n    _Tp x1 = std::max(a.x, b.x), y1 = std::max(a.y, b.y);\n    a.width = std::min(a.x + a.width, b.x + b.width) - x1;\n    a.height = std::min(a.y + a.height, b.y + b.height) - y1;\n    a.x = x1; a.y = y1;\n    if( a.width <= 0 || a.height <= 0 )\n        a = Rect();\n    return a;\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp>& operator |= ( Rect_<_Tp>& a, const Rect_<_Tp>& b )\n{\n    _Tp x1 = std::min(a.x, b.x), y1 = std::min(a.y, b.y);\n    a.width = std::max(a.x + a.width, b.x + b.width) - x1;\n    a.height = std::max(a.y + a.height, b.y + b.height) - y1;\n    a.x = x1; a.y = y1;\n    return a;\n}\n\ntemplate<typename _Tp> inline Size_<_Tp> Rect_<_Tp>::size() const { return Size_<_Tp>(width, height); }\ntemplate<typename _Tp> inline _Tp Rect_<_Tp>::area() const { return width*height; }\n\ntemplate<typename _Tp> template<typename _Tp2> inline Rect_<_Tp>::operator Rect_<_Tp2>() const\n{ return Rect_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y),\n                     saturate_cast<_Tp2>(width), saturate_cast<_Tp2>(height)); }\ntemplate<typename _Tp> inline Rect_<_Tp>::operator CvRect() const\n{ return cvRect(saturate_cast<int>(x), saturate_cast<int>(y),\n                saturate_cast<int>(width), saturate_cast<int>(height)); }\n\ntemplate<typename _Tp> inline bool Rect_<_Tp>::contains(const Point_<_Tp>& pt) const\n{ return x <= pt.x && pt.x < x + width && y <= pt.y && pt.y < y + height; }\n\ntemplate<typename _Tp> static inline bool operator == (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    return a.x == b.x && a.y == b.y && a.width == b.width && a.height == b.height;\n}\n\ntemplate<typename _Tp> static inline bool operator != (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    return a.x != b.x || a.y != b.y || a.width != b.width || a.height != b.height;\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator + (const Rect_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x + b.x, a.y + b.y, a.width, a.height );\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator - (const Rect_<_Tp>& a, const Point_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x - b.x, a.y - b.y, a.width, a.height );\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator + (const Rect_<_Tp>& a, const Size_<_Tp>& b)\n{\n    return Rect_<_Tp>( a.x, a.y, a.width + b.width, a.height + b.height );\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator & (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    Rect_<_Tp> c = a;\n    return c &= b;\n}\n\ntemplate<typename _Tp> static inline Rect_<_Tp> operator | (const Rect_<_Tp>& a, const Rect_<_Tp>& b)\n{\n    Rect_<_Tp> c = a;\n    return c |= b;\n}\n\ntemplate<typename _Tp> inline bool Point_<_Tp>::inside( const Rect_<_Tp>& r ) const\n{\n    return r.contains(*this);\n}\n\ninline RotatedRect::RotatedRect() { angle = 0; }\ninline RotatedRect::RotatedRect(const Point2f& _center, const Size2f& _size, float _angle)\n    : center(_center), size(_size), angle(_angle) {}\ninline RotatedRect::RotatedRect(const CvBox2D& box)\n    : center(box.center), size(box.size), angle(box.angle) {}\ninline RotatedRect::operator CvBox2D() const\n{\n    CvBox2D box; box.center = center; box.size = size; box.angle = angle;\n    return box;\n}\n\n//////////////////////////////// Scalar_ ///////////////////////////////\n\ntemplate<typename _Tp> inline Scalar_<_Tp>::Scalar_()\n{ this->val[0] = this->val[1] = this->val[2] = this->val[3] = 0; }\n\ntemplate<typename _Tp> inline Scalar_<_Tp>::Scalar_(_Tp v0, _Tp v1, _Tp v2, _Tp v3)\n{ this->val[0] = v0; this->val[1] = v1; this->val[2] = v2; this->val[3] = v3; }\n\ntemplate<typename _Tp> inline Scalar_<_Tp>::Scalar_(const CvScalar& s)\n{\n    this->val[0] = saturate_cast<_Tp>(s.val[0]);\n    this->val[1] = saturate_cast<_Tp>(s.val[1]);\n    this->val[2] = saturate_cast<_Tp>(s.val[2]);\n    this->val[3] = saturate_cast<_Tp>(s.val[3]);\n}\n\ntemplate<typename _Tp> inline Scalar_<_Tp>::Scalar_(_Tp v0)\n{ this->val[0] = v0; this->val[1] = this->val[2] = this->val[3] = 0; }\n\ntemplate<typename _Tp> inline Scalar_<_Tp> Scalar_<_Tp>::all(_Tp v0)\n{ return Scalar_<_Tp>(v0, v0, v0, v0); }\ntemplate<typename _Tp> inline Scalar_<_Tp>::operator CvScalar() const\n{ return cvScalar(this->val[0], this->val[1], this->val[2], this->val[3]); }\n\ntemplate<typename _Tp> template<typename T2> inline Scalar_<_Tp>::operator Scalar_<T2>() const\n{\n    return Scalar_<T2>(saturate_cast<T2>(this->val[0]),\n                  saturate_cast<T2>(this->val[1]),\n                  saturate_cast<T2>(this->val[2]),\n                  saturate_cast<T2>(this->val[3]));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>& operator += (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a.val[0] = saturate_cast<_Tp>(a.val[0] + b.val[0]);\n    a.val[1] = saturate_cast<_Tp>(a.val[1] + b.val[1]);\n    a.val[2] = saturate_cast<_Tp>(a.val[2] + b.val[2]);\n    a.val[3] = saturate_cast<_Tp>(a.val[3] + b.val[3]);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>& operator -= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a.val[0] = saturate_cast<_Tp>(a.val[0] - b.val[0]);\n    a.val[1] = saturate_cast<_Tp>(a.val[1] - b.val[1]);\n    a.val[2] = saturate_cast<_Tp>(a.val[2] - b.val[2]);\n    a.val[3] = saturate_cast<_Tp>(a.val[3] - b.val[3]);\n    return a;\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>& operator *= ( Scalar_<_Tp>& a, _Tp v )\n{\n    a.val[0] = saturate_cast<_Tp>(a.val[0] * v);\n    a.val[1] = saturate_cast<_Tp>(a.val[1] * v);\n    a.val[2] = saturate_cast<_Tp>(a.val[2] * v);\n    a.val[3] = saturate_cast<_Tp>(a.val[3] * v);\n    return a;\n}\n\ntemplate<typename _Tp> inline Scalar_<_Tp> Scalar_<_Tp>::mul(const Scalar_<_Tp>& t, double scale ) const\n{\n    return Scalar_<_Tp>( saturate_cast<_Tp>(this->val[0]*t.val[0]*scale),\n                       saturate_cast<_Tp>(this->val[1]*t.val[1]*scale),\n                       saturate_cast<_Tp>(this->val[2]*t.val[2]*scale),\n                       saturate_cast<_Tp>(this->val[3]*t.val[3]*scale));\n}\n\ntemplate<typename _Tp> static inline bool operator == ( const Scalar_<_Tp>& a, const Scalar_<_Tp>& b )\n{\n    return a.val[0] == b.val[0] && a.val[1] == b.val[1] &&\n        a.val[2] == b.val[2] && a.val[3] == b.val[3];\n}\n\ntemplate<typename _Tp> static inline bool operator != ( const Scalar_<_Tp>& a, const Scalar_<_Tp>& b )\n{\n    return a.val[0] != b.val[0] || a.val[1] != b.val[1] ||\n        a.val[2] != b.val[2] || a.val[3] != b.val[3];\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator + (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] + b.val[0]),\n                      saturate_cast<_Tp>(a.val[1] + b.val[1]),\n                      saturate_cast<_Tp>(a.val[2] + b.val[2]),\n                      saturate_cast<_Tp>(a.val[3] + b.val[3]));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator - (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] - b.val[0]),\n                      saturate_cast<_Tp>(a.val[1] - b.val[1]),\n                      saturate_cast<_Tp>(a.val[2] - b.val[2]),\n                      saturate_cast<_Tp>(a.val[3] - b.val[3]));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator * (const Scalar_<_Tp>& a, _Tp alpha)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] * alpha),\n                      saturate_cast<_Tp>(a.val[1] * alpha),\n                      saturate_cast<_Tp>(a.val[2] * alpha),\n                      saturate_cast<_Tp>(a.val[3] * alpha));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator * (_Tp alpha, const Scalar_<_Tp>& a)\n{\n    return a*alpha;\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp> operator - (const Scalar_<_Tp>& a)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(-a.val[0]), saturate_cast<_Tp>(-a.val[1]),\n                      saturate_cast<_Tp>(-a.val[2]), saturate_cast<_Tp>(-a.val[3]));\n}\n\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>\noperator * (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a[0]*b[0] - a[1]*b[1] - a[2]*b[2] - a[3]*b[3]),\n                        saturate_cast<_Tp>(a[0]*b[1] + a[1]*b[0] + a[2]*b[3] - a[3]*b[2]),\n                        saturate_cast<_Tp>(a[0]*b[2] - a[1]*b[3] + a[2]*b[0] + a[3]*b[1]),\n                        saturate_cast<_Tp>(a[0]*b[3] + a[1]*b[2] - a[2]*b[1] + a[3]*b[0]));\n}\n\ntemplate<typename _Tp> static inline Scalar_<_Tp>&\noperator *= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a = a*b;\n    return a;\n}\n\ntemplate<typename _Tp> inline Scalar_<_Tp> Scalar_<_Tp>::conj() const\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(this->val[0]),\n                        saturate_cast<_Tp>(-this->val[1]),\n                        saturate_cast<_Tp>(-this->val[2]),\n                        saturate_cast<_Tp>(-this->val[3]));\n}\n\ntemplate<typename _Tp> inline bool Scalar_<_Tp>::isReal() const\n{\n    return this->val[1] == 0 && this->val[2] == 0 && this->val[3] == 0;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (const Scalar_<_Tp>& a, _Tp alpha)\n{\n    return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] / alpha),\n                        saturate_cast<_Tp>(a.val[1] / alpha),\n                        saturate_cast<_Tp>(a.val[2] / alpha),\n                        saturate_cast<_Tp>(a.val[3] / alpha));\n}\n\ntemplate<typename _Tp> static inline\nScalar_<float> operator / (const Scalar_<float>& a, float alpha)\n{\n    float s = 1/alpha;\n    return Scalar_<float>(a.val[0]*s, a.val[1]*s, a.val[2]*s, a.val[3]*s);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<double> operator / (const Scalar_<double>& a, double alpha)\n{\n    double s = 1/alpha;\n    return Scalar_<double>(a.val[0]*s, a.val[1]*s, a.val[2]*s, a.val[3]*s);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator /= (Scalar_<_Tp>& a, _Tp alpha)\n{\n    a = a/alpha;\n    return a;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (_Tp a, const Scalar_<_Tp>& b)\n{\n    _Tp s = a/(b[0]*b[0] + b[1]*b[1] + b[2]*b[2] + b[3]*b[3]);\n    return b.conj()*s;\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp> operator / (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    return a*((_Tp)1/b);\n}\n\ntemplate<typename _Tp> static inline\nScalar_<_Tp>& operator /= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b)\n{\n    a = a/b;\n    return a;\n}\n\n//////////////////////////////// Range /////////////////////////////////\n\ninline Range::Range() : start(0), end(0) {}\ninline Range::Range(int _start, int _end) : start(_start), end(_end) {}\ninline Range::Range(const CvSlice& slice) : start(slice.start_index), end(slice.end_index)\n{\n    if( start == 0 && end == CV_WHOLE_SEQ_END_INDEX )\n        *this = Range::all();\n}\n\ninline int Range::size() const { return end - start; }\ninline bool Range::empty() const { return start == end; }\ninline Range Range::all() { return Range(INT_MIN, INT_MAX); }\n\nstatic inline bool operator == (const Range& r1, const Range& r2)\n{ return r1.start == r2.start && r1.end == r2.end; }\n\nstatic inline bool operator != (const Range& r1, const Range& r2)\n{ return !(r1 == r2); }\n\nstatic inline bool operator !(const Range& r)\n{ return r.start == r.end; }\n\nstatic inline Range operator & (const Range& r1, const Range& r2)\n{\n    Range r(std::max(r1.start, r2.start), std::min(r1.end, r2.end));\n    r.end = std::max(r.end, r.start);\n    return r;\n}\n\nstatic inline Range& operator &= (Range& r1, const Range& r2)\n{\n    r1 = r1 & r2;\n    return r1;\n}\n\nstatic inline Range operator + (const Range& r1, int delta)\n{\n    return Range(r1.start + delta, r1.end + delta);\n}\n\nstatic inline Range operator + (int delta, const Range& r1)\n{\n    return Range(r1.start + delta, r1.end + delta);\n}\n\nstatic inline Range operator - (const Range& r1, int delta)\n{\n    return r1 + (-delta);\n}\n\ninline Range::operator CvSlice() const\n{ return *this != Range::all() ? cvSlice(start, end) : CV_WHOLE_SEQ; }\n\n\n\n//////////////////////////////// Vector ////////////////////////////////\n\n// template vector class. It is similar to STL's vector,\n// with a few important differences:\n//   1) it can be created on top of user-allocated data w/o copying it\n//   2) vector b = a means copying the header,\n//      not the underlying data (use clone() to make a deep copy)\ntemplate <typename _Tp> class Vector\n{\npublic:\n    typedef _Tp value_type;\n    typedef _Tp* iterator;\n    typedef const _Tp* const_iterator;\n    typedef _Tp& reference;\n    typedef const _Tp& const_reference;\n\n    struct Hdr\n    {\n        Hdr() : data(0), datastart(0), refcount(0), size(0), capacity(0) {};\n        _Tp* data;\n        _Tp* datastart;\n        int* refcount;\n        size_t size;\n        size_t capacity;\n    };\n\n    Vector() {}\n    Vector(size_t _size)  { resize(_size); }\n    Vector(size_t _size, const _Tp& val)\n    {\n        resize(_size);\n        for(size_t i = 0; i < _size; i++)\n            hdr.data[i] = val;\n    }\n    Vector(_Tp* _data, size_t _size, bool _copyData=false)\n    { set(_data, _size, _copyData); }\n\n    template<int n> Vector(const Vec<_Tp, n>& vec)\n    { set((_Tp*)&vec.val[0], n, true); }\n\n    Vector(const std::vector<_Tp>& vec, bool _copyData=false)\n    { set(!vec.empty() ? (_Tp*)&vec[0] : 0, vec.size(), _copyData); }\n\n    Vector(const Vector& d) { *this = d; }\n\n    Vector(const Vector& d, const Range& r_)\n    {\n        Range r = r_ == Range::all() ? Range(0, d.size()) : r_;\n        /*if( r == Range::all() )\n            r = Range(0, d.size());*/\n        if( r.size() > 0 && r.start >= 0 && r.end <= d.size() )\n        {\n            if( d.hdr.refcount )\n                CV_XADD(d.hdr.refcount, 1);\n            hdr.refcount = d.hdr.refcount;\n            hdr.datastart = d.hdr.datastart;\n            hdr.data = d.hdr.data + r.start;\n            hdr.capacity = hdr.size = r.size();\n        }\n    }\n\n    Vector<_Tp>& operator = (const Vector& d)\n    {\n        if( this != &d )\n        {\n            if( d.hdr.refcount )\n                CV_XADD(d.hdr.refcount, 1);\n            release();\n            hdr = d.hdr;\n        }\n        return *this;\n    }\n\n    ~Vector()  { release(); }\n\n    Vector<_Tp> clone() const\n    { return hdr.data ? Vector<_Tp>(hdr.data, hdr.size, true) : Vector<_Tp>(); }\n\n    void copyTo(Vector<_Tp>& vec) const\n    {\n        size_t i, sz = size();\n        vec.resize(sz);\n        const _Tp* src = hdr.data;\n        _Tp* dst = vec.hdr.data;\n        for( i = 0; i < sz; i++ )\n            dst[i] = src[i];\n    }\n\n    void copyTo(std::vector<_Tp>& vec) const\n    {\n        size_t i, sz = size();\n        vec.resize(sz);\n        const _Tp* src = hdr.data;\n        _Tp* dst = sz ? &vec[0] : 0;\n        for( i = 0; i < sz; i++ )\n            dst[i] = src[i];\n    }\n\n    operator CvMat() const\n    { return cvMat((int)size(), 1, type(), (void*)hdr.data); }\n\n    _Tp& operator [] (size_t i) { CV_DbgAssert( i < size() ); return hdr.data[i]; }\n    const _Tp& operator [] (size_t i) const { CV_DbgAssert( i < size() ); return hdr.data[i]; }\n    Vector operator() (const Range& r) const { return Vector(*this, r); }\n    _Tp& back() { CV_DbgAssert(!empty()); return hdr.data[hdr.size-1]; }\n    const _Tp& back() const { CV_DbgAssert(!empty()); return hdr.data[hdr.size-1]; }\n    _Tp& front() { CV_DbgAssert(!empty()); return hdr.data[0]; }\n    const _Tp& front() const { CV_DbgAssert(!empty()); return hdr.data[0]; }\n\n    _Tp* begin() { return hdr.data; }\n    _Tp* end() { return hdr.data + hdr.size; }\n    const _Tp* begin() const { return hdr.data; }\n    const _Tp* end() const { return hdr.data + hdr.size; }\n\n    void addref() { if( hdr.refcount ) CV_XADD(hdr.refcount, 1); }\n    void release()\n    {\n        if( hdr.refcount && CV_XADD(hdr.refcount, -1) == 1 )\n        {\n            delete[] hdr.datastart;\n            delete hdr.refcount;\n        }\n        hdr = Hdr();\n    }\n\n    void set(_Tp* _data, size_t _size, bool _copyData=false)\n    {\n        if( !_copyData )\n        {\n            release();\n            hdr.data = hdr.datastart = _data;\n            hdr.size = hdr.capacity = _size;\n            hdr.refcount = 0;\n        }\n        else\n        {\n            reserve(_size);\n            for( size_t i = 0; i < _size; i++ )\n                hdr.data[i] = _data[i];\n            hdr.size = _size;\n        }\n    }\n\n    void reserve(size_t newCapacity)\n    {\n        _Tp* newData;\n        int* newRefcount;\n        size_t i, oldSize = hdr.size;\n        if( (!hdr.refcount || *hdr.refcount == 1) && hdr.capacity >= newCapacity )\n            return;\n        newCapacity = std::max(newCapacity, oldSize);\n        newData = new _Tp[newCapacity];\n        newRefcount = new int(1);\n        for( i = 0; i < oldSize; i++ )\n            newData[i] = hdr.data[i];\n        release();\n        hdr.data = hdr.datastart = newData;\n        hdr.capacity = newCapacity;\n        hdr.size = oldSize;\n        hdr.refcount = newRefcount;\n    }\n\n    void resize(size_t newSize)\n    {\n        size_t i;\n        newSize = std::max(newSize, (size_t)0);\n        if( (!hdr.refcount || *hdr.refcount == 1) && hdr.size == newSize )\n            return;\n        if( newSize > hdr.capacity )\n            reserve(std::max(newSize, std::max((size_t)4, hdr.capacity*2)));\n        for( i = hdr.size; i < newSize; i++ )\n            hdr.data[i] = _Tp();\n        hdr.size = newSize;\n    }\n\n    Vector<_Tp>& push_back(const _Tp& elem)\n    {\n        if( hdr.size == hdr.capacity )\n            reserve( std::max((size_t)4, hdr.capacity*2) );\n        hdr.data[hdr.size++] = elem;\n        return *this;\n    }\n\n    Vector<_Tp>& pop_back()\n    {\n        if( hdr.size > 0 )\n            --hdr.size;\n        return *this;\n    }\n\n    size_t size() const { return hdr.size; }\n    size_t capacity() const { return hdr.capacity; }\n    bool empty() const { return hdr.size == 0; }\n    void clear() { resize(0); }\n    int type() const { return DataType<_Tp>::type; }\n\nprotected:\n    Hdr hdr;\n};\n\n\ntemplate<typename _Tp> inline typename DataType<_Tp>::work_type\ndot(const Vector<_Tp>& v1, const Vector<_Tp>& v2)\n{\n    typedef typename DataType<_Tp>::work_type _Tw;\n    size_t i = 0, n = v1.size();\n    assert(v1.size() == v2.size());\n\n    _Tw s = 0;\n    const _Tp *ptr1 = &v1[0], *ptr2 = &v2[0];\n    for( ; i < n; i++ )\n        s += (_Tw)ptr1[i]*ptr2[i];\n\n    return s;\n}\n\n// Multiply-with-Carry RNG\ninline RNG::RNG() { state = 0xffffffff; }\ninline RNG::RNG(uint64 _state) { state = _state ? _state : 0xffffffff; }\ninline unsigned RNG::next()\n{\n    state = (uint64)(unsigned)state*CV_RNG_COEFF + (unsigned)(state >> 32);\n    return (unsigned)state;\n}\n\ninline RNG::operator uchar() { return (uchar)next(); }\ninline RNG::operator schar() { return (schar)next(); }\ninline RNG::operator ushort() { return (ushort)next(); }\ninline RNG::operator short() { return (short)next(); }\ninline RNG::operator unsigned() { return next(); }\ninline unsigned RNG::operator ()(unsigned N) {return (unsigned)uniform(0,N);}\ninline unsigned RNG::operator ()() {return next();}\ninline RNG::operator int() { return (int)next(); }\n// * (2^32-1)^-1\ninline RNG::operator float() { return next()*2.3283064365386962890625e-10f; }\ninline RNG::operator double()\n{\n    unsigned t = next();\n    return (((uint64)t << 32) | next())*5.4210108624275221700372640043497e-20;\n}\ninline int RNG::uniform(int a, int b) { return a == b ? a : (int)(next()%(b - a) + a); }\ninline float RNG::uniform(float a, float b) { return ((float)*this)*(b - a) + a; }\ninline double RNG::uniform(double a, double b) { return ((double)*this)*(b - a) + a; }\n\ninline TermCriteria::TermCriteria() : type(0), maxCount(0), epsilon(0) {}\ninline TermCriteria::TermCriteria(int _type, int _maxCount, double _epsilon)\n    : type(_type), maxCount(_maxCount), epsilon(_epsilon) {}\ninline TermCriteria::TermCriteria(const CvTermCriteria& criteria)\n    : type(criteria.type), maxCount(criteria.max_iter), epsilon(criteria.epsilon) {}\ninline TermCriteria::operator CvTermCriteria() const\n{ return cvTermCriteria(type, maxCount, epsilon); }\n\ninline uchar* LineIterator::operator *() { return ptr; }\ninline LineIterator& LineIterator::operator ++()\n{\n    int mask = err < 0 ? -1 : 0;\n    err += minusDelta + (plusDelta & mask);\n    ptr += minusStep + (plusStep & mask);\n    return *this;\n}\ninline LineIterator LineIterator::operator ++(int)\n{\n    LineIterator it = *this;\n    ++(*this);\n    return it;\n}\ninline Point LineIterator::pos() const\n{\n    Point p;\n    p.y = (int)((ptr - ptr0)/step);\n    p.x = (int)(((ptr - ptr0) - p.y*step)/elemSize);\n    return p;\n}\n\n/////////////////////////////// AutoBuffer ////////////////////////////////////////\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::AutoBuffer()\n{\n    ptr = buf;\n    size = fixed_size;\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::AutoBuffer(size_t _size)\n{\n    ptr = buf;\n    size = fixed_size;\n    allocate(_size);\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::~AutoBuffer()\n{ deallocate(); }\n\ntemplate<typename _Tp, size_t fixed_size> inline void AutoBuffer<_Tp, fixed_size>::allocate(size_t _size)\n{\n    if(_size <= size)\n        return;\n    deallocate();\n    if(_size > fixed_size)\n    {\n        ptr = cv::allocate<_Tp>(_size);\n        size = _size;\n    }\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline void AutoBuffer<_Tp, fixed_size>::deallocate()\n{\n    if( ptr != buf )\n    {\n        cv::deallocate<_Tp>(ptr, size);\n        ptr = buf;\n        size = fixed_size;\n    }\n}\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::operator _Tp* ()\n{ return ptr; }\n\ntemplate<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::operator const _Tp* () const\n{ return ptr; }\n\n\n/////////////////////////////////// Ptr ////////////////////////////////////////\n\ntemplate<typename _Tp> inline Ptr<_Tp>::Ptr() : obj(0), refcount(0) {}\ntemplate<typename _Tp> inline Ptr<_Tp>::Ptr(_Tp* _obj) : obj(_obj)\n{\n    if(obj)\n    {\n        refcount = (int*)fastMalloc(sizeof(*refcount));\n        *refcount = 1;\n    }\n    else\n        refcount = 0;\n}\n\ntemplate<typename _Tp> inline void Ptr<_Tp>::addref()\n{ if( refcount ) CV_XADD(refcount, 1); }\n\ntemplate<typename _Tp> inline void Ptr<_Tp>::release()\n{\n    if( refcount && CV_XADD(refcount, -1) == 1 )\n    {\n        delete_obj();\n        fastFree(refcount);\n    }\n    refcount = 0;\n    obj = 0;\n}\n\ntemplate<typename _Tp> inline void Ptr<_Tp>::delete_obj()\n{\n    if( obj ) delete obj;\n}\n\ntemplate<typename _Tp> inline Ptr<_Tp>::~Ptr() { release(); }\n\ntemplate<typename _Tp> inline Ptr<_Tp>::Ptr(const Ptr<_Tp>& _ptr)\n{\n    obj = _ptr.obj;\n    refcount = _ptr.refcount;\n    addref();\n}\n\ntemplate<typename _Tp> inline Ptr<_Tp>& Ptr<_Tp>::operator = (const Ptr<_Tp>& _ptr)\n{\n    int* _refcount = _ptr.refcount;\n    if( _refcount )\n        CV_XADD(_refcount, 1);\n    release();\n    obj = _ptr.obj;\n    refcount = _refcount;\n    return *this;\n}\n\ntemplate<typename _Tp> inline _Tp* Ptr<_Tp>::operator -> () { return obj; }\ntemplate<typename _Tp> inline const _Tp* Ptr<_Tp>::operator -> () const { return obj; }\n\ntemplate<typename _Tp> inline Ptr<_Tp>::operator _Tp* () { return obj; }\ntemplate<typename _Tp> inline Ptr<_Tp>::operator const _Tp*() const { return obj; }\n\ntemplate<typename _Tp> inline bool Ptr<_Tp>::empty() const { return obj == 0; }\n\ntemplate<typename _Tp> template<typename _Tp2> Ptr<_Tp>::Ptr(const Ptr<_Tp2>& p)\n    : obj(0), refcount(0)\n{\n    if (p.empty())\n        return;\n\n    _Tp* p_casted = dynamic_cast<_Tp*>(p.obj);\n    if (!p_casted)\n        return;\n\n    obj = p_casted;\n    refcount = p.refcount;\n    addref();\n}\n\ntemplate<typename _Tp> template<typename _Tp2> inline Ptr<_Tp2> Ptr<_Tp>::ptr()\n{\n    Ptr<_Tp2> p;\n    if( !obj )\n        return p;\n\n    _Tp2* obj_casted = dynamic_cast<_Tp2*>(obj);\n    if (!obj_casted)\n        return p;\n\n    if( refcount )\n        CV_XADD(refcount, 1);\n\n    p.obj = obj_casted;\n    p.refcount = refcount;\n    return p;\n}\n\ntemplate<typename _Tp> template<typename _Tp2> inline const Ptr<_Tp2> Ptr<_Tp>::ptr() const\n{\n    Ptr<_Tp2> p;\n    if( !obj )\n        return p;\n\n    _Tp2* obj_casted = dynamic_cast<_Tp2*>(obj);\n    if (!obj_casted)\n        return p;\n\n    if( refcount )\n        CV_XADD(refcount, 1);\n\n    p.obj = obj_casted;\n    p.refcount = refcount;\n    return p;\n}\n\n//// specializied implementations of Ptr::delete_obj() for classic OpenCV types\n\ntemplate<> CV_EXPORTS void Ptr<CvMat>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<IplImage>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<CvMatND>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<CvSparseMat>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<CvMemStorage>::delete_obj();\ntemplate<> CV_EXPORTS void Ptr<CvFileStorage>::delete_obj();\n\n//////////////////////////////////////// XML & YAML I/O ////////////////////////////////////\n\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, int value );\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, float value );\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, double value );\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, const string& value );\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const _Tp& value)\n{ write(fs, string(), value); }\n\nCV_EXPORTS void writeScalar( FileStorage& fs, int value );\nCV_EXPORTS void writeScalar( FileStorage& fs, float value );\nCV_EXPORTS void writeScalar( FileStorage& fs, double value );\nCV_EXPORTS void writeScalar( FileStorage& fs, const string& value );\n\ntemplate<> inline void write( FileStorage& fs, const int& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline void write( FileStorage& fs, const float& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline void write( FileStorage& fs, const double& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<> inline void write( FileStorage& fs, const string& value )\n{\n    writeScalar(fs, value);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Point_<_Tp>& pt )\n{\n    write(fs, pt.x);\n    write(fs, pt.y);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Point3_<_Tp>& pt )\n{\n    write(fs, pt.x);\n    write(fs, pt.y);\n    write(fs, pt.z);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Size_<_Tp>& sz )\n{\n    write(fs, sz.width);\n    write(fs, sz.height);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Complex<_Tp>& c )\n{\n    write(fs, c.re);\n    write(fs, c.im);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Rect_<_Tp>& r )\n{\n    write(fs, r.x);\n    write(fs, r.y);\n    write(fs, r.width);\n    write(fs, r.height);\n}\n\ntemplate<typename _Tp, int cn> inline void write(FileStorage& fs, const Vec<_Tp, cn>& v )\n{\n    for(int i = 0; i < cn; i++)\n        write(fs, v.val[i]);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const Scalar_<_Tp>& s )\n{\n    write(fs, s.val[0]);\n    write(fs, s.val[1]);\n    write(fs, s.val[2]);\n    write(fs, s.val[3]);\n}\n\ninline void write(FileStorage& fs, const Range& r )\n{\n    write(fs, r.start);\n    write(fs, r.end);\n}\n\nclass CV_EXPORTS WriteStructContext\n{\npublic:\n    WriteStructContext(FileStorage& _fs, const string& name,\n        int flags, const string& typeName=string());\n    ~WriteStructContext();\n    FileStorage* fs;\n};\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Point_<_Tp>& pt )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, pt.x);\n    write(fs, pt.y);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Point3_<_Tp>& pt )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, pt.x);\n    write(fs, pt.y);\n    write(fs, pt.z);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Size_<_Tp>& sz )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, sz.width);\n    write(fs, sz.height);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Complex<_Tp>& c )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, c.re);\n    write(fs, c.im);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Rect_<_Tp>& r )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, r.x);\n    write(fs, r.y);\n    write(fs, r.width);\n    write(fs, r.height);\n}\n\ntemplate<typename _Tp, int cn> inline void write(FileStorage& fs, const string& name, const Vec<_Tp, cn>& v )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    for(int i = 0; i < cn; i++)\n        write(fs, v.val[i]);\n}\n\ntemplate<typename _Tp> inline void write(FileStorage& fs, const string& name, const Scalar_<_Tp>& s )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, s.val[0]);\n    write(fs, s.val[1]);\n    write(fs, s.val[2]);\n    write(fs, s.val[3]);\n}\n\ninline void write(FileStorage& fs, const string& name, const Range& r )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW);\n    write(fs, r.start);\n    write(fs, r.end);\n}\n\ntemplate<typename _Tp, int numflag> class VecWriterProxy\n{\npublic:\n    VecWriterProxy( FileStorage* _fs ) : fs(_fs) {}\n    void operator()(const vector<_Tp>& vec) const\n    {\n        size_t i, count = vec.size();\n        for( i = 0; i < count; i++ )\n            write( *fs, vec[i] );\n    }\n    FileStorage* fs;\n};\n\ntemplate<typename _Tp> class VecWriterProxy<_Tp,1>\n{\npublic:\n    VecWriterProxy( FileStorage* _fs ) : fs(_fs) {}\n    void operator()(const vector<_Tp>& vec) const\n    {\n        int _fmt = DataType<_Tp>::fmt;\n        char fmt[] = { (char)((_fmt>>8)+'1'), (char)_fmt, '\\0' };\n        fs->writeRaw( string(fmt), !vec.empty() ? (uchar*)&vec[0] : 0, vec.size()*sizeof(_Tp) );\n    }\n    FileStorage* fs;\n};\n\ntemplate<typename _Tp> static inline void write( FileStorage& fs, const vector<_Tp>& vec )\n{\n    VecWriterProxy<_Tp, DataType<_Tp>::fmt != 0> w(&fs);\n    w(vec);\n}\n\ntemplate<typename _Tp> static inline void write( FileStorage& fs, const string& name,\n                                                const vector<_Tp>& vec )\n{\n    WriteStructContext ws(fs, name, CV_NODE_SEQ+(DataType<_Tp>::fmt != 0 ? CV_NODE_FLOW : 0));\n    write(fs, vec);\n}\n\nCV_EXPORTS_W void write( FileStorage& fs, const string& name, const Mat& value );\nCV_EXPORTS void write( FileStorage& fs, const string& name, const SparseMat& value );\n\ntemplate<typename _Tp> static inline FileStorage& operator << (FileStorage& fs, const _Tp& value)\n{\n    if( !fs.isOpened() )\n        return fs;\n    if( fs.state == FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP )\n        CV_Error( CV_StsError, \"No element name has been given\" );\n    write( fs, fs.elname, value );\n    if( fs.state & FileStorage::INSIDE_MAP )\n        fs.state = FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP;\n    return fs;\n}\n\nCV_EXPORTS FileStorage& operator << (FileStorage& fs, const string& str);\n\nstatic inline FileStorage& operator << (FileStorage& fs, const char* str)\n{ return (fs << string(str)); }\n\nstatic inline FileStorage& operator << (FileStorage& fs, char* value)\n{ return (fs << string(value)); }\n\ninline FileNode::FileNode() : fs(0), node(0) {}\ninline FileNode::FileNode(const CvFileStorage* _fs, const CvFileNode* _node)\n    : fs(_fs), node(_node) {}\n\ninline FileNode::FileNode(const FileNode& _node) : fs(_node.fs), node(_node.node) {}\n\ninline int FileNode::type() const { return !node ? NONE : (node->tag & TYPE_MASK); }\ninline bool FileNode::empty() const { return node == 0; }\ninline bool FileNode::isNone() const { return type() == NONE; }\ninline bool FileNode::isSeq() const { return type() == SEQ; }\ninline bool FileNode::isMap() const { return type() == MAP; }\ninline bool FileNode::isInt() const { return type() == INT; }\ninline bool FileNode::isReal() const { return type() == REAL; }\ninline bool FileNode::isString() const { return type() == STR; }\ninline bool FileNode::isNamed() const { return !node ? false : (node->tag & NAMED) != 0; }\ninline size_t FileNode::size() const\n{\n    int t = type();\n    return t == MAP ? (size_t)((CvSet*)node->data.map)->active_count :\n        t == SEQ ? (size_t)node->data.seq->total : (size_t)!isNone();\n}\n\ninline CvFileNode* FileNode::operator *() { return (CvFileNode*)node; }\ninline const CvFileNode* FileNode::operator* () const { return node; }\n\nstatic inline void read(const FileNode& node, int& value, int default_value)\n{\n    value = !node.node ? default_value :\n    CV_NODE_IS_INT(node.node->tag) ? node.node->data.i :\n    CV_NODE_IS_REAL(node.node->tag) ? cvRound(node.node->data.f) : 0x7fffffff;\n}\n\nstatic inline void read(const FileNode& node, bool& value, bool default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = temp != 0;\n}\n\nstatic inline void read(const FileNode& node, uchar& value, uchar default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = saturate_cast<uchar>(temp);\n}\n\nstatic inline void read(const FileNode& node, schar& value, schar default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = saturate_cast<schar>(temp);\n}\n\nstatic inline void read(const FileNode& node, ushort& value, ushort default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = saturate_cast<ushort>(temp);\n}\n\nstatic inline void read(const FileNode& node, short& value, short default_value)\n{\n    int temp; read(node, temp, (int)default_value);\n    value = saturate_cast<short>(temp);\n}\n\nstatic inline void read(const FileNode& node, float& value, float default_value)\n{\n    value = !node.node ? default_value :\n        CV_NODE_IS_INT(node.node->tag) ? (float)node.node->data.i :\n        CV_NODE_IS_REAL(node.node->tag) ? (float)node.node->data.f : 1e30f;\n}\n\nstatic inline void read(const FileNode& node, double& value, double default_value)\n{\n    value = !node.node ? default_value :\n        CV_NODE_IS_INT(node.node->tag) ? (double)node.node->data.i :\n        CV_NODE_IS_REAL(node.node->tag) ? node.node->data.f : 1e300;\n}\n\nstatic inline void read(const FileNode& node, string& value, const string& default_value)\n{\n    value = !node.node ? default_value : CV_NODE_IS_STRING(node.node->tag) ? string(node.node->data.str.ptr) : string(\"\");\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Point_<_Tp>& value, const Point_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Point_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Point3_<_Tp>& value, const Point3_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 3 ? default_value : Point3_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                            saturate_cast<_Tp>(temp[2]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Size_<_Tp>& value, const Size_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Size_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Complex<_Tp>& value, const Complex<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 2 ? default_value : Complex<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]));\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Rect_<_Tp>& value, const Rect_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 4 ? default_value : Rect_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                          saturate_cast<_Tp>(temp[2]), saturate_cast<_Tp>(temp[3]));\n}\n\ntemplate<typename _Tp, int cn> static inline void read(const FileNode& node, Vec<_Tp, cn>& value, const Vec<_Tp, cn>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != cn ? default_value : Vec<_Tp, cn>(&temp[0]);\n}\n\ntemplate<typename _Tp> static inline void read(const FileNode& node, Scalar_<_Tp>& value, const Scalar_<_Tp>& default_value)\n{\n    vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp;\n    value = temp.size() != 4 ? default_value : Scalar_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]),\n                                                            saturate_cast<_Tp>(temp[2]), saturate_cast<_Tp>(temp[3]));\n}\n\nstatic inline void read(const FileNode& node, Range& value, const Range& default_value)\n{\n    Point2i temp(value.start, value.end); const Point2i default_temp = Point2i(default_value.start, default_value.end);\n    read(node, temp, default_temp);\n    value.start = temp.x; value.end = temp.y;\n}\n\nCV_EXPORTS_W void read(const FileNode& node, Mat& mat, const Mat& default_mat=Mat() );\nCV_EXPORTS void read(const FileNode& node, SparseMat& mat, const SparseMat& default_mat=SparseMat() );\n\ninline FileNode::operator int() const\n{\n    int value;\n    read(*this, value, 0);\n    return value;\n}\ninline FileNode::operator float() const\n{\n    float value;\n    read(*this, value, 0.f);\n    return value;\n}\ninline FileNode::operator double() const\n{\n    double value;\n    read(*this, value, 0.);\n    return value;\n}\ninline FileNode::operator string() const\n{\n    string value;\n    read(*this, value, value);\n    return value;\n}\n\ninline void FileNode::readRaw( const string& fmt, uchar* vec, size_t len ) const\n{\n    begin().readRaw( fmt, vec, len );\n}\n\ntemplate<typename _Tp, int numflag> class VecReaderProxy\n{\npublic:\n    VecReaderProxy( FileNodeIterator* _it ) : it(_it) {}\n    void operator()(vector<_Tp>& vec, size_t count) const\n    {\n        count = std::min(count, it->remaining);\n        vec.resize(count);\n        for( size_t i = 0; i < count; i++, ++(*it) )\n            read(**it, vec[i], _Tp());\n    }\n    FileNodeIterator* it;\n};\n\ntemplate<typename _Tp> class VecReaderProxy<_Tp,1>\n{\npublic:\n    VecReaderProxy( FileNodeIterator* _it ) : it(_it) {}\n    void operator()(vector<_Tp>& vec, size_t count) const\n    {\n        size_t remaining = it->remaining, cn = DataType<_Tp>::channels;\n        int _fmt = DataType<_Tp>::fmt;\n        char fmt[] = { (char)((_fmt>>8)+'1'), (char)_fmt, '\\0' };\n        size_t remaining1 = remaining/cn;\n        count = count < remaining1 ? count : remaining1;\n        vec.resize(count);\n        it->readRaw( string(fmt), !vec.empty() ? (uchar*)&vec[0] : 0, count*sizeof(_Tp) );\n    }\n    FileNodeIterator* it;\n};\n\ntemplate<typename _Tp> static inline void\nread( FileNodeIterator& it, vector<_Tp>& vec, size_t maxCount=(size_t)INT_MAX )\n{\n    VecReaderProxy<_Tp, DataType<_Tp>::fmt != 0> r(&it);\n    r(vec, maxCount);\n}\n\ntemplate<typename _Tp> static inline void\nread( const FileNode& node, vector<_Tp>& vec, const vector<_Tp>& default_value=vector<_Tp>() )\n{\n    if(!node.node)\n        vec = default_value;\n    else\n    {\n        FileNodeIterator it = node.begin();\n        read( it, vec );\n    }\n}\n\ninline FileNodeIterator FileNode::begin() const\n{\n    return FileNodeIterator(fs, node);\n}\n\ninline FileNodeIterator FileNode::end() const\n{\n    return FileNodeIterator(fs, node, size());\n}\n\ninline FileNode FileNodeIterator::operator *() const\n{ return FileNode(fs, (const CvFileNode*)(void*)reader.ptr); }\n\ninline FileNode FileNodeIterator::operator ->() const\n{ return FileNode(fs, (const CvFileNode*)(void*)reader.ptr); }\n\ntemplate<typename _Tp> static inline FileNodeIterator& operator >> (FileNodeIterator& it, _Tp& value)\n{ read( *it, value, _Tp()); return ++it; }\n\ntemplate<typename _Tp> static inline\nFileNodeIterator& operator >> (FileNodeIterator& it, vector<_Tp>& vec)\n{\n    VecReaderProxy<_Tp, DataType<_Tp>::fmt != 0> r(&it);\n    r(vec, (size_t)INT_MAX);\n    return it;\n}\n\ntemplate<typename _Tp> static inline void operator >> (const FileNode& n, _Tp& value)\n{ read( n, value, _Tp()); }\n\ntemplate<typename _Tp> static inline void operator >> (const FileNode& n, vector<_Tp>& vec)\n{ FileNodeIterator it = n.begin(); it >> vec; }\n\nstatic inline bool operator == (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it1.fs == it2.fs && it1.container == it2.container &&\n        it1.reader.ptr == it2.reader.ptr && it1.remaining == it2.remaining;\n}\n\nstatic inline bool operator != (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return !(it1 == it2);\n}\n\nstatic inline ptrdiff_t operator - (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it2.remaining - it1.remaining;\n}\n\nstatic inline bool operator < (const FileNodeIterator& it1, const FileNodeIterator& it2)\n{\n    return it1.remaining > it2.remaining;\n}\n\ninline FileNode FileStorage::getFirstTopLevelNode() const\n{\n    FileNode r = root();\n    FileNodeIterator it = r.begin();\n    return it != r.end() ? *it : FileNode();\n}\n\n//////////////////////////////////////// Various algorithms ////////////////////////////////////\n\ntemplate<typename _Tp> static inline _Tp gcd(_Tp a, _Tp b)\n{\n    if( a < b )\n        std::swap(a, b);\n    while( b > 0 )\n    {\n        _Tp r = a % b;\n        a = b;\n        b = r;\n    }\n    return a;\n}\n\n/****************************************************************************************\\\n\n  Generic implementation of QuickSort algorithm\n  Use it as: vector<_Tp> a; ... sort(a,<less_than_predictor>);\n\n  The current implementation was derived from *BSD system qsort():\n\n    * Copyright (c) 1992, 1993\n    *  The Regents of the University of California.  All rights reserved.\n    *\n    * Redistribution and use in source and binary forms, with or without\n    * modification, are permitted provided that the following conditions\n    * are met:\n    * 1. Redistributions of source code must retain the above copyright\n    *    notice, this list of conditions and the following disclaimer.\n    * 2. Redistributions in binary form must reproduce the above copyright\n    *    notice, this list of conditions and the following disclaimer in the\n    *    documentation and/or other materials provided with the distribution.\n    * 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 University of\n    *  California, Berkeley and its contributors.\n    * 4. Neither the name of the University nor the names of its contributors\n    *    may be used to endorse or promote products derived from this software\n    *    without specific prior written permission.\n    *\n    * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n    * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n    * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n    * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n    * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n    * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n    * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n    * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    * SUCH DAMAGE.\n\n\\****************************************************************************************/\n\ntemplate<typename _Tp, class _LT> void sort( vector<_Tp>& vec, _LT LT=_LT() )\n{\n    int isort_thresh = 7;\n    int sp = 0;\n\n    struct\n    {\n        _Tp *lb;\n        _Tp *ub;\n    } stack[48];\n\n    size_t total = vec.size();\n\n    if( total <= 1 )\n        return;\n\n    _Tp* arr = &vec[0];\n    stack[0].lb = arr;\n    stack[0].ub = arr + (total - 1);\n\n    while( sp >= 0 )\n    {\n        _Tp* left = stack[sp].lb;\n        _Tp* right = stack[sp--].ub;\n\n        for(;;)\n        {\n            int i, n = (int)(right - left) + 1, m;\n            _Tp* ptr;\n            _Tp* ptr2;\n\n            if( n <= isort_thresh )\n            {\n            insert_sort:\n                for( ptr = left + 1; ptr <= right; ptr++ )\n                {\n                    for( ptr2 = ptr; ptr2 > left && LT(ptr2[0],ptr2[-1]); ptr2--)\n                        std::swap( ptr2[0], ptr2[-1] );\n                }\n                break;\n            }\n            else\n            {\n                _Tp* left0;\n                _Tp* left1;\n                _Tp* right0;\n                _Tp* right1;\n                _Tp* pivot;\n                _Tp* a;\n                _Tp* b;\n                _Tp* c;\n                int swap_cnt = 0;\n\n                left0 = left;\n                right0 = right;\n                pivot = left + (n/2);\n\n                if( n > 40 )\n                {\n                    int d = n / 8;\n                    a = left, b = left + d, c = left + 2*d;\n                    left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));\n\n                    a = pivot - d, b = pivot, c = pivot + d;\n                    pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));\n\n                    a = right - 2*d, b = right - d, c = right;\n                    right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))\n                                      : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));\n                }\n\n                a = left, b = pivot, c = right;\n                pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))\n                                   : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));\n                if( pivot != left0 )\n                {\n                    std::swap( *pivot, *left0 );\n                    pivot = left0;\n                }\n                left = left1 = left0 + 1;\n                right = right1 = right0;\n\n                for(;;)\n                {\n                    while( left <= right && !LT(*pivot, *left) )\n                    {\n                        if( !LT(*left, *pivot) )\n                        {\n                            if( left > left1 )\n                                std::swap( *left1, *left );\n                            swap_cnt = 1;\n                            left1++;\n                        }\n                        left++;\n                    }\n\n                    while( left <= right && !LT(*right, *pivot) )\n                    {\n                        if( !LT(*pivot, *right) )\n                        {\n                            if( right < right1 )\n                                std::swap( *right1, *right );\n                            swap_cnt = 1;\n                            right1--;\n                        }\n                        right--;\n                    }\n\n                    if( left > right )\n                        break;\n                    std::swap( *left, *right );\n                    swap_cnt = 1;\n                    left++;\n                    right--;\n                }\n\n                if( swap_cnt == 0 )\n                {\n                    left = left0, right = right0;\n                    goto insert_sort;\n                }\n\n                n = std::min( (int)(left1 - left0), (int)(left - left1) );\n                for( i = 0; i < n; i++ )\n                    std::swap( left0[i], left[i-n] );\n\n                n = std::min( (int)(right0 - right1), (int)(right1 - right) );\n                for( i = 0; i < n; i++ )\n                    std::swap( left[i], right0[i-n+1] );\n                n = (int)(left - left1);\n                m = (int)(right1 - right);\n                if( n > 1 )\n                {\n                    if( m > 1 )\n                    {\n                        if( n > m )\n                        {\n                            stack[++sp].lb = left0;\n                            stack[sp].ub = left0 + n - 1;\n                            left = right0 - m + 1, right = right0;\n                        }\n                        else\n                        {\n                            stack[++sp].lb = right0 - m + 1;\n                            stack[sp].ub = right0;\n                            left = left0, right = left0 + n - 1;\n                        }\n                    }\n                    else\n                        left = left0, right = left0 + n - 1;\n                }\n                else if( m > 1 )\n                    left = right0 - m + 1, right = right0;\n                else\n                    break;\n            }\n        }\n    }\n}\n\ntemplate<typename _Tp> class LessThan\n{\npublic:\n    bool operator()(const _Tp& a, const _Tp& b) const { return a < b; }\n};\n\ntemplate<typename _Tp> class GreaterEq\n{\npublic:\n    bool operator()(const _Tp& a, const _Tp& b) const { return a >= b; }\n};\n\ntemplate<typename _Tp> class LessThanIdx\n{\npublic:\n    LessThanIdx( const _Tp* _arr ) : arr(_arr) {}\n    bool operator()(int a, int b) const { return arr[a] < arr[b]; }\n    const _Tp* arr;\n};\n\ntemplate<typename _Tp> class GreaterEqIdx\n{\npublic:\n    GreaterEqIdx( const _Tp* _arr ) : arr(_arr) {}\n    bool operator()(int a, int b) const { return arr[a] >= arr[b]; }\n    const _Tp* arr;\n};\n\n\n// This function splits the input sequence or set into one or more equivalence classes and\n// returns the vector of labels - 0-based class indexes for each element.\n// predicate(a,b) returns true if the two sequence elements certainly belong to the same class.\n//\n// The algorithm is described in \"Introduction to Algorithms\"\n// by Cormen, Leiserson and Rivest, the chapter \"Data structures for disjoint sets\"\ntemplate<typename _Tp, class _EqPredicate> int\npartition( const vector<_Tp>& _vec, vector<int>& labels,\n           _EqPredicate predicate=_EqPredicate())\n{\n    int i, j, N = (int)_vec.size();\n    const _Tp* vec = &_vec[0];\n\n    const int PARENT=0;\n    const int RANK=1;\n\n    vector<int> _nodes(N*2);\n    int (*nodes)[2] = (int(*)[2])&_nodes[0];\n\n    // The first O(N) pass: create N single-vertex trees\n    for(i = 0; i < N; i++)\n    {\n        nodes[i][PARENT]=-1;\n        nodes[i][RANK] = 0;\n    }\n\n    // The main O(N^2) pass: merge connected components\n    for( i = 0; i < N; i++ )\n    {\n        int root = i;\n\n        // find root\n        while( nodes[root][PARENT] >= 0 )\n            root = nodes[root][PARENT];\n\n        for( j = 0; j < N; j++ )\n        {\n            if( i == j || !predicate(vec[i], vec[j]))\n                continue;\n            int root2 = j;\n\n            while( nodes[root2][PARENT] >= 0 )\n                root2 = nodes[root2][PARENT];\n\n            if( root2 != root )\n            {\n                // unite both trees\n                int rank = nodes[root][RANK], rank2 = nodes[root2][RANK];\n                if( rank > rank2 )\n                    nodes[root2][PARENT] = root;\n                else\n                {\n                    nodes[root][PARENT] = root2;\n                    nodes[root2][RANK] += rank == rank2;\n                    root = root2;\n                }\n                assert( nodes[root][PARENT] < 0 );\n\n                int k = j, parent;\n\n                // compress the path from node2 to root\n                while( (parent = nodes[k][PARENT]) >= 0 )\n                {\n                    nodes[k][PARENT] = root;\n                    k = parent;\n                }\n\n                // compress the path from node to root\n                k = i;\n                while( (parent = nodes[k][PARENT]) >= 0 )\n                {\n                    nodes[k][PARENT] = root;\n                    k = parent;\n                }\n            }\n        }\n    }\n\n    // Final O(N) pass: enumerate classes\n    labels.resize(N);\n    int nclasses = 0;\n\n    for( i = 0; i < N; i++ )\n    {\n        int root = i;\n        while( nodes[root][PARENT] >= 0 )\n            root = nodes[root][PARENT];\n        // re-use the rank as the class label\n        if( nodes[root][RANK] >= 0 )\n            nodes[root][RANK] = ~nclasses++;\n        labels[i] = ~nodes[root][RANK];\n    }\n\n    return nclasses;\n}\n\n\n//////////////////////////////////////////////////////////////////////////////\n\n// bridge C++ => C Seq API\nCV_EXPORTS schar*  seqPush( CvSeq* seq, const void* element=0);\nCV_EXPORTS schar*  seqPushFront( CvSeq* seq, const void* element=0);\nCV_EXPORTS void  seqPop( CvSeq* seq, void* element=0);\nCV_EXPORTS void  seqPopFront( CvSeq* seq, void* element=0);\nCV_EXPORTS void  seqPopMulti( CvSeq* seq, void* elements,\n                              int count, int in_front=0 );\nCV_EXPORTS void  seqRemove( CvSeq* seq, int index );\nCV_EXPORTS void  clearSeq( CvSeq* seq );\nCV_EXPORTS schar*  getSeqElem( const CvSeq* seq, int index );\nCV_EXPORTS void  seqRemoveSlice( CvSeq* seq, CvSlice slice );\nCV_EXPORTS void  seqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr );\n\ntemplate<typename _Tp> inline Seq<_Tp>::Seq() : seq(0) {}\ntemplate<typename _Tp> inline Seq<_Tp>::Seq( const CvSeq* _seq ) : seq((CvSeq*)_seq)\n{\n    CV_Assert(!_seq || _seq->elem_size == sizeof(_Tp));\n}\n\ntemplate<typename _Tp> inline Seq<_Tp>::Seq( MemStorage& storage,\n                                             int headerSize )\n{\n    CV_Assert(headerSize >= (int)sizeof(CvSeq));\n    seq = cvCreateSeq(DataType<_Tp>::type, headerSize, sizeof(_Tp), storage);\n}\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::operator [](int idx)\n{ return *(_Tp*)getSeqElem(seq, idx); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::operator [](int idx) const\n{ return *(_Tp*)getSeqElem(seq, idx); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> Seq<_Tp>::begin() const\n{ return SeqIterator<_Tp>(*this); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> Seq<_Tp>::end() const\n{ return SeqIterator<_Tp>(*this, true); }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::size() const\n{ return seq ? seq->total : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::type() const\n{ return seq ? CV_MAT_TYPE(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::depth() const\n{ return seq ? CV_MAT_DEPTH(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline int Seq<_Tp>::channels() const\n{ return seq ? CV_MAT_CN(seq->flags) : 0; }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::elemSize() const\n{ return seq ? seq->elem_size : 0; }\n\ntemplate<typename _Tp> inline size_t Seq<_Tp>::index(const _Tp& elem) const\n{ return cvSeqElemIdx(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_back(const _Tp& elem)\n{ cvSeqPush(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_front(const _Tp& elem)\n{ cvSeqPushFront(seq, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_back(const _Tp* elem, size_t count)\n{ cvSeqPushMulti(seq, elem, (int)count, 0); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::push_front(const _Tp* elem, size_t count)\n{ cvSeqPushMulti(seq, elem, (int)count, 1); }\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::back()\n{ return *(_Tp*)getSeqElem(seq, -1); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::back() const\n{ return *(const _Tp*)getSeqElem(seq, -1); }\n\ntemplate<typename _Tp> inline _Tp& Seq<_Tp>::front()\n{ return *(_Tp*)getSeqElem(seq, 0); }\n\ntemplate<typename _Tp> inline const _Tp& Seq<_Tp>::front() const\n{ return *(const _Tp*)getSeqElem(seq, 0); }\n\ntemplate<typename _Tp> inline bool Seq<_Tp>::empty() const\n{ return !seq || seq->total == 0; }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::clear()\n{ if(seq) clearSeq(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_back()\n{ seqPop(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_front()\n{ seqPopFront(seq); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_back(_Tp* elem, size_t count)\n{ seqPopMulti(seq, elem, (int)count, 0); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::pop_front(_Tp* elem, size_t count)\n{ seqPopMulti(seq, elem, (int)count, 1); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::insert(int idx, const _Tp& elem)\n{ seqInsert(seq, idx, &elem); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::insert(int idx, const _Tp* elems, size_t count)\n{\n    CvMat m = cvMat(1, count, DataType<_Tp>::type, elems);\n    seqInsertSlice(seq, idx, &m);\n}\n\ntemplate<typename _Tp> inline void Seq<_Tp>::remove(int idx)\n{ seqRemove(seq, idx); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::remove(const Range& r)\n{ seqRemoveSlice(seq, r); }\n\ntemplate<typename _Tp> inline void Seq<_Tp>::copyTo(vector<_Tp>& vec, const Range& range) const\n{\n    size_t len = !seq ? 0 : range == Range::all() ? seq->total : range.end - range.start;\n    vec.resize(len);\n    if( seq && len )\n        cvCvtSeqToArray(seq, &vec[0], range);\n}\n\ntemplate<typename _Tp> inline Seq<_Tp>::operator vector<_Tp>() const\n{\n    vector<_Tp> vec;\n    copyTo(vec);\n    return vec;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>::SeqIterator()\n{ memset(this, 0, sizeof(*this)); }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>::SeqIterator(const Seq<_Tp>& _seq, bool seekEnd)\n{\n    cvStartReadSeq(_seq.seq, this);\n    index = seekEnd ? _seq.seq->total : 0;\n}\n\ntemplate<typename _Tp> inline void SeqIterator<_Tp>::seek(size_t pos)\n{\n    cvSetSeqReaderPos(this, (int)pos, false);\n    index = pos;\n}\n\ntemplate<typename _Tp> inline size_t SeqIterator<_Tp>::tell() const\n{ return index; }\n\ntemplate<typename _Tp> inline _Tp& SeqIterator<_Tp>::operator *()\n{ return *(_Tp*)ptr; }\n\ntemplate<typename _Tp> inline const _Tp& SeqIterator<_Tp>::operator *() const\n{ return *(const _Tp*)ptr; }\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator ++()\n{\n    CV_NEXT_SEQ_ELEM(sizeof(_Tp), *this);\n    if( ++index >= seq->total*2 )\n        index = 0;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> SeqIterator<_Tp>::operator ++(int) const\n{\n    SeqIterator<_Tp> it = *this;\n    ++*this;\n    return it;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator --()\n{\n    CV_PREV_SEQ_ELEM(sizeof(_Tp), *this);\n    if( --index < 0 )\n        index = seq->total*2-1;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp> SeqIterator<_Tp>::operator --(int) const\n{\n    SeqIterator<_Tp> it = *this;\n    --*this;\n    return it;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator +=(int delta)\n{\n    cvSetSeqReaderPos(this, delta, 1);\n    index += delta;\n    int n = seq->total*2;\n    if( index < 0 )\n        index += n;\n    if( index >= n )\n        index -= n;\n    return *this;\n}\n\ntemplate<typename _Tp> inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator -=(int delta)\n{\n    return (*this += -delta);\n}\n\ntemplate<typename _Tp> inline ptrdiff_t operator - (const SeqIterator<_Tp>& a,\n                                                    const SeqIterator<_Tp>& b)\n{\n    ptrdiff_t delta = a.index - b.index, n = a.seq->total;\n    if( std::abs(static_cast<long>(delta)) > n )\n        delta += delta < 0 ? n : -n;\n    return delta;\n}\n\ntemplate<typename _Tp> inline bool operator == (const SeqIterator<_Tp>& a,\n                                                const SeqIterator<_Tp>& b)\n{\n    return a.seq == b.seq && a.index == b.index;\n}\n\ntemplate<typename _Tp> inline bool operator != (const SeqIterator<_Tp>& a,\n                                                const SeqIterator<_Tp>& b)\n{\n    return !(a == b);\n}\n\n\ntemplate<typename _ClsName> struct RTTIImpl\n{\npublic:\n    static int isInstance(const void* ptr)\n    {\n        static _ClsName dummy;\n        static void* dummyp = &dummy;\n        union\n        {\n            const void* p;\n            const void** pp;\n        } a, b;\n        a.p = dummyp;\n        b.p = ptr;\n        return *a.pp == *b.pp;\n    }\n    static void release(void** dbptr)\n    {\n        if(dbptr && *dbptr)\n        {\n            delete (_ClsName*)*dbptr;\n            *dbptr = 0;\n        }\n    }\n    static void* read(CvFileStorage* fs, CvFileNode* n)\n    {\n        FileNode fn(fs, n);\n        _ClsName* obj = new _ClsName;\n        if(obj->read(fn))\n            return obj;\n        delete obj;\n        return 0;\n    }\n\n    static void write(CvFileStorage* _fs, const char* name, const void* ptr, CvAttrList)\n    {\n        if(ptr && _fs)\n        {\n            FileStorage fs(_fs);\n            fs.fs.addref();\n            ((const _ClsName*)ptr)->write(fs, string(name));\n        }\n    }\n\n    static void* clone(const void* ptr)\n    {\n        if(!ptr)\n            return 0;\n        return new _ClsName(*(const _ClsName*)ptr);\n    }\n};\n\n\nclass CV_EXPORTS Formatter\n{\npublic:\n    virtual ~Formatter() {}\n    virtual void write(std::ostream& out, const Mat& m, const int* params=0, int nparams=0) const = 0;\n    virtual void write(std::ostream& out, const void* data, int nelems, int type,\n                       const int* params=0, int nparams=0) const = 0;\n    static const Formatter* get(const char* fmt=\"\");\n    static const Formatter* setDefault(const Formatter* fmt);\n};\n\n\nstruct CV_EXPORTS Formatted\n{\n    Formatted(const Mat& m, const Formatter* fmt,\n              const vector<int>& params);\n    Formatted(const Mat& m, const Formatter* fmt,\n              const int* params=0);\n    Mat mtx;\n    const Formatter* fmt;\n    vector<int> params;\n};\n\nstatic inline Formatted format(const Mat& mtx, const char* fmt,\n                               const vector<int>& params=vector<int>())\n{\n    return Formatted(mtx, Formatter::get(fmt), params);\n}\n\ntemplate<typename _Tp> static inline Formatted format(const vector<Point_<_Tp> >& vec,\n                                                      const char* fmt, const vector<int>& params=vector<int>())\n{\n    return Formatted(Mat(vec), Formatter::get(fmt), params);\n}\n\ntemplate<typename _Tp> static inline Formatted format(const vector<Point3_<_Tp> >& vec,\n                                                      const char* fmt, const vector<int>& params=vector<int>())\n{\n    return Formatted(Mat(vec), Formatter::get(fmt), params);\n}\n\n/** \\brief prints Mat to the output stream in Matlab notation\n * use like\n @verbatim\n Mat my_mat = Mat::eye(3,3,CV_32F);\n std::cout << my_mat;\n @endverbatim\n */\nstatic inline std::ostream& operator << (std::ostream& out, const Mat& mtx)\n{\n    Formatter::get()->write(out, mtx);\n    return out;\n}\n\n/** \\brief prints Mat to the output stream allows in the specified notation (see format)\n * use like\n @verbatim\n Mat my_mat = Mat::eye(3,3,CV_32F);\n std::cout << my_mat;\n @endverbatim\n */\nstatic inline std::ostream& operator << (std::ostream& out, const Formatted& fmtd)\n{\n    fmtd.fmt->write(out, fmtd.mtx);\n    return out;\n}\n\n\ntemplate<typename _Tp> static inline std::ostream& operator << (std::ostream& out,\n                                                                const vector<Point_<_Tp> >& vec)\n{\n    Formatter::get()->write(out, Mat(vec));\n    return out;\n}\n\n\ntemplate<typename _Tp> static inline std::ostream& operator << (std::ostream& out,\n                                                                const vector<Point3_<_Tp> >& vec)\n{\n    Formatter::get()->write(out, Mat(vec));\n    return out;\n}\n\n\n/** Writes a Matx to an output stream.\n */\ntemplate<typename _Tp, int m, int n> inline std::ostream& operator<<(std::ostream& out, const Matx<_Tp, m, n>& matx)\n{\n    out << cv::Mat(matx);\n    return out;\n}\n\n/** Writes a point to an output stream in Matlab notation\n */\ntemplate<typename _Tp> inline std::ostream& operator<<(std::ostream& out, const Point_<_Tp>& p)\n{\n    out << \"[\" << p.x << \", \" << p.y << \"]\";\n    return out;\n}\n\n/** Writes a point to an output stream in Matlab notation\n */\ntemplate<typename _Tp> inline std::ostream& operator<<(std::ostream& out, const Point3_<_Tp>& p)\n{\n    out << \"[\" << p.x << \", \" << p.y << \", \" << p.z << \"]\";\n    return out;\n}\n\n/** Writes a Vec to an output stream. Format example : [10, 20, 30]\n */\ntemplate<typename _Tp, int n> inline std::ostream& operator<<(std::ostream& out, const Vec<_Tp, n>& vec)\n{\n    out << \"[\";\n\n    if(Vec<_Tp, n>::depth < CV_32F)\n    {\n        for (int i = 0; i < n - 1; ++i) {\n            out << (int)vec[i] << \", \";\n        }\n        out << (int)vec[n-1] << \"]\";\n    }\n    else\n    {\n        for (int i = 0; i < n - 1; ++i) {\n            out << vec[i] << \", \";\n        }\n        out << vec[n-1] << \"]\";\n    }\n\n    return out;\n}\n\n/** Writes a Size_ to an output stream. Format example : [640 x 480]\n */\ntemplate<typename _Tp> inline std::ostream& operator<<(std::ostream& out, const Size_<_Tp>& size)\n{\n    out << \"[\" << size.width << \" x \" << size.height << \"]\";\n    return out;\n}\n\n/** Writes a Rect_ to an output stream. Format example : [640 x 480 from (10, 20)]\n */\ntemplate<typename _Tp> inline std::ostream& operator<<(std::ostream& out, const Rect_<_Tp>& rect)\n{\n    out << \"[\" << rect.width << \" x \" << rect.height << \" from (\" << rect.x << \", \" << rect.y << \")]\";\n    return out;\n}\n\n\ntemplate<typename _Tp> inline Ptr<_Tp> Algorithm::create(const string& name)\n{\n    return _create(name).ptr<_Tp>();\n}\n\ntemplate<typename _Tp>\ninline void Algorithm::set(const char* _name, const Ptr<_Tp>& value)\n{\n    Ptr<Algorithm> algo_ptr = value. template ptr<cv::Algorithm>();\n    if (algo_ptr.empty()) {\n        CV_Error( CV_StsUnsupportedFormat, \"unknown/unsupported Ptr type of the second parameter of the method Algorithm::set\");\n    }\n    info()->set(this, _name, ParamType<Algorithm>::type, &algo_ptr);\n}\n\ntemplate<typename _Tp>\ninline void Algorithm::set(const string& _name, const Ptr<_Tp>& value)\n{\n    this->set<_Tp>(_name.c_str(), value);\n}\n\ntemplate<typename _Tp>\ninline void Algorithm::setAlgorithm(const char* _name, const Ptr<_Tp>& value)\n{\n    Ptr<Algorithm> algo_ptr = value. template ptr<cv::Algorithm>();\n    if (algo_ptr.empty()) {\n        CV_Error( CV_StsUnsupportedFormat, \"unknown/unsupported Ptr type of the second parameter of the method Algorithm::set\");\n    }\n    info()->set(this, _name, ParamType<Algorithm>::type, &algo_ptr);\n}\n\ntemplate<typename _Tp>\ninline void Algorithm::setAlgorithm(const string& _name, const Ptr<_Tp>& value)\n{\n    this->set<_Tp>(_name.c_str(), value);\n}\n\ntemplate<typename _Tp> inline typename ParamType<_Tp>::member_type Algorithm::get(const string& _name) const\n{\n    typename ParamType<_Tp>::member_type value;\n    info()->get(this, _name.c_str(), ParamType<_Tp>::type, &value);\n    return value;\n}\n\ntemplate<typename _Tp> inline typename ParamType<_Tp>::member_type Algorithm::get(const char* _name) const\n{\n    typename ParamType<_Tp>::member_type value;\n    info()->get(this, _name, ParamType<_Tp>::type, &value);\n    return value;\n}\n\ntemplate<typename _Tp, typename _Base> inline void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter,\n                  Ptr<_Tp>& value, bool readOnly, Ptr<_Tp> (Algorithm::*getter)(), void (Algorithm::*setter)(const Ptr<_Tp>&),\n                  const string& help)\n{\n    //TODO: static assert: _Tp inherits from _Base\n    addParam_(algo, parameter, ParamType<_Base>::type, &value, readOnly,\n              (Algorithm::Getter)getter, (Algorithm::Setter)setter, help);\n}\n\ntemplate<typename _Tp> inline void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter,\n                  Ptr<_Tp>& value, bool readOnly, Ptr<_Tp> (Algorithm::*getter)(), void (Algorithm::*setter)(const Ptr<_Tp>&),\n                  const string& help)\n{\n    //TODO: static assert: _Tp inherits from Algorithm\n    addParam_(algo, parameter, ParamType<Algorithm>::type, &value, readOnly,\n              (Algorithm::Getter)getter, (Algorithm::Setter)setter, help);\n}\n\n}\n\n#ifdef _MSC_VER\n# pragma warning(pop)\n#endif\n\n#endif // __cplusplus\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/types_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CORE_TYPES_H__\n#define __OPENCV_CORE_TYPES_H__\n\n#if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER\n#  if _MSC_VER > 1300\n#    define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio 2005 warnings */\n#  endif\n#endif\n\n\n#ifndef SKIP_INCLUDES\n\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n#include <float.h>\n\n#if !defined _MSC_VER && !defined __BORLANDC__\n#  include <stdint.h>\n#endif\n\n#if defined __ICL\n#  define CV_ICC   __ICL\n#elif defined __ICC\n#  define CV_ICC   __ICC\n#elif defined __ECL\n#  define CV_ICC   __ECL\n#elif defined __ECC\n#  define CV_ICC   __ECC\n#elif defined __INTEL_COMPILER\n#  define CV_ICC   __INTEL_COMPILER\n#endif\n\n#if defined CV_ICC && !defined CV_ENABLE_UNROLLED\n#  define CV_ENABLE_UNROLLED 0\n#else\n#  define CV_ENABLE_UNROLLED 1\n#endif\n\n#if (defined _M_X64 && defined _MSC_VER && _MSC_VER >= 1400) || (__GNUC__ >= 4 && defined __x86_64__)\n#  if defined WIN32\n#    include <intrin.h>\n#  endif\n#  if defined __SSE2__ || !defined __GNUC__\n#    include <emmintrin.h>\n#  endif\n#endif\n\n#if defined __BORLANDC__\n#  include <fastmath.h>\n#else\n#  include <math.h>\n#endif\n\n#ifdef HAVE_IPL\n#  ifndef __IPL_H__\n#    if defined WIN32 || defined _WIN32\n#      include <ipl.h>\n#    else\n#      include <ipl/ipl.h>\n#    endif\n#  endif\n#elif defined __IPL_H__\n#  define HAVE_IPL\n#endif\n\n#endif // SKIP_INCLUDES\n\n#if defined WIN32 || defined _WIN32\n#  define CV_CDECL __cdecl\n#  define CV_STDCALL __stdcall\n#else\n#  define CV_CDECL\n#  define CV_STDCALL\n#endif\n\n#ifndef CV_EXTERN_C\n#  ifdef __cplusplus\n#    define CV_EXTERN_C extern \"C\"\n#    define CV_DEFAULT(val) = val\n#  else\n#    define CV_EXTERN_C\n#    define CV_DEFAULT(val)\n#  endif\n#endif\n\n#ifndef CV_EXTERN_C_FUNCPTR\n#  ifdef __cplusplus\n#    define CV_EXTERN_C_FUNCPTR(x) extern \"C\" { typedef x; }\n#  else\n#    define CV_EXTERN_C_FUNCPTR(x) typedef x\n#  endif\n#endif\n\n#ifndef CV_INLINE\n#  if defined __cplusplus\n#    define CV_INLINE inline\n#  elif defined _MSC_VER\n#    define CV_INLINE __inline\n#  else\n#    define CV_INLINE static\n#  endif\n#endif /* CV_INLINE */\n\n#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS\n#  define CV_EXPORTS __declspec(dllexport)\n#else\n#  define CV_EXPORTS\n#endif\n\n#ifndef CVAPI\n#  define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL\n#endif\n\n#if defined _MSC_VER || defined __BORLANDC__\n   typedef __int64 int64;\n   typedef unsigned __int64 uint64;\n#  define CV_BIG_INT(n)   n##I64\n#  define CV_BIG_UINT(n)  n##UI64\n#else\n   typedef int64_t int64;\n   typedef uint64_t uint64;\n#  define CV_BIG_INT(n)   n##LL\n#  define CV_BIG_UINT(n)  n##ULL\n#endif\n\n#ifndef HAVE_IPL\n   typedef unsigned char uchar;\n   typedef unsigned short ushort;\n#endif\n\ntypedef signed char schar;\n\n/* special informative macros for wrapper generators */\n#define CV_CARRAY(counter)\n#define CV_CUSTOM_CARRAY(args)\n#define CV_EXPORTS_W CV_EXPORTS\n#define CV_EXPORTS_W_SIMPLE CV_EXPORTS\n#define CV_EXPORTS_AS(synonym) CV_EXPORTS\n#define CV_EXPORTS_W_MAP CV_EXPORTS\n#define CV_IN_OUT\n#define CV_OUT\n#define CV_PROP\n#define CV_PROP_RW\n#define CV_WRAP\n#define CV_WRAP_AS(synonym)\n#define CV_WRAP_DEFAULT(value)\n\n/* CvArr* is used to pass arbitrary\n * array-like data structures\n * into functions where the particular\n * array type is recognized at runtime:\n */\ntypedef void CvArr;\n\ntypedef union Cv32suf\n{\n    int i;\n    unsigned u;\n    float f;\n}\nCv32suf;\n\ntypedef union Cv64suf\n{\n    int64 i;\n    uint64 u;\n    double f;\n}\nCv64suf;\n\ntypedef int CVStatus;\n\nenum {\n CV_StsOk=                       0,  /* everithing is ok                */\n CV_StsBackTrace=               -1,  /* pseudo error for back trace     */\n CV_StsError=                   -2,  /* unknown /unspecified error      */\n CV_StsInternal=                -3,  /* internal error (bad state)      */\n CV_StsNoMem=                   -4,  /* insufficient memory             */\n CV_StsBadArg=                  -5,  /* function arg/param is bad       */\n CV_StsBadFunc=                 -6,  /* unsupported function            */\n CV_StsNoConv=                  -7,  /* iter. didn't converge           */\n CV_StsAutoTrace=               -8,  /* tracing                         */\n CV_HeaderIsNull=               -9,  /* image header is NULL            */\n CV_BadImageSize=              -10, /* image size is invalid           */\n CV_BadOffset=                 -11, /* offset is invalid               */\n CV_BadDataPtr=                -12, /**/\n CV_BadStep=                   -13, /**/\n CV_BadModelOrChSeq=           -14, /**/\n CV_BadNumChannels=            -15, /**/\n CV_BadNumChannel1U=           -16, /**/\n CV_BadDepth=                  -17, /**/\n CV_BadAlphaChannel=           -18, /**/\n CV_BadOrder=                  -19, /**/\n CV_BadOrigin=                 -20, /**/\n CV_BadAlign=                  -21, /**/\n CV_BadCallBack=               -22, /**/\n CV_BadTileSize=               -23, /**/\n CV_BadCOI=                    -24, /**/\n CV_BadROISize=                -25, /**/\n CV_MaskIsTiled=               -26, /**/\n CV_StsNullPtr=                -27, /* null pointer */\n CV_StsVecLengthErr=           -28, /* incorrect vector length */\n CV_StsFilterStructContentErr= -29, /* incorr. filter structure content */\n CV_StsKernelStructContentErr= -30, /* incorr. transform kernel content */\n CV_StsFilterOffsetErr=        -31, /* incorrect filter offset value */\n CV_StsBadSize=                -201, /* the input/output structure size is incorrect  */\n CV_StsDivByZero=              -202, /* division by zero */\n CV_StsInplaceNotSupported=    -203, /* in-place operation is not supported */\n CV_StsObjectNotFound=         -204, /* request can't be completed */\n CV_StsUnmatchedFormats=       -205, /* formats of input/output arrays differ */\n CV_StsBadFlag=                -206, /* flag is wrong or not supported */\n CV_StsBadPoint=               -207, /* bad CvPoint */\n CV_StsBadMask=                -208, /* bad format of mask (neither 8uC1 nor 8sC1)*/\n CV_StsUnmatchedSizes=         -209, /* sizes of input/output structures do not match */\n CV_StsUnsupportedFormat=      -210, /* the data format/type is not supported by the function*/\n CV_StsOutOfRange=             -211, /* some of parameters are out of range */\n CV_StsParseError=             -212, /* invalid syntax/structure of the parsed file */\n CV_StsNotImplemented=         -213, /* the requested function/feature is not implemented */\n CV_StsBadMemBlock=            -214, /* an allocated block has been corrupted */\n CV_StsAssert=                 -215, /* assertion failed */\n CV_GpuNotSupported=           -216,\n CV_GpuApiCallError=           -217,\n CV_OpenGlNotSupported=        -218,\n CV_OpenGlApiCallError=        -219,\n CV_OpenCLDoubleNotSupported=  -220,\n CV_OpenCLInitError=           -221,\n CV_OpenCLNoAMDBlasFft=        -222\n};\n\n/****************************************************************************************\\\n*                             Common macros and inline functions                         *\n\\****************************************************************************************/\n\n#ifdef HAVE_TEGRA_OPTIMIZATION\n#  include \"tegra_round.hpp\"\n#endif\n\n#define CV_PI   3.1415926535897932384626433832795\n#define CV_LOG2 0.69314718055994530941723212145818\n\n#define CV_SWAP(a,b,t) ((t) = (a), (a) = (b), (b) = (t))\n\n#ifndef MIN\n#  define MIN(a,b)  ((a) > (b) ? (b) : (a))\n#endif\n\n#ifndef MAX\n#  define MAX(a,b)  ((a) < (b) ? (b) : (a))\n#endif\n\n/* min & max without jumps */\n#define  CV_IMIN(a, b)  ((a) ^ (((a)^(b)) & (((a) < (b)) - 1)))\n\n#define  CV_IMAX(a, b)  ((a) ^ (((a)^(b)) & (((a) > (b)) - 1)))\n\n/* absolute value without jumps */\n#ifndef __cplusplus\n#  define  CV_IABS(a)     (((a) ^ ((a) < 0 ? -1 : 0)) - ((a) < 0 ? -1 : 0))\n#else\n#  define  CV_IABS(a)     abs(a)\n#endif\n#define  CV_CMP(a,b)    (((a) > (b)) - ((a) < (b)))\n#define  CV_SIGN(a)     CV_CMP((a),0)\n\nCV_INLINE  int  cvRound( double value )\n{\n#if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__ && defined __SSE2__ && !defined __APPLE__)\n    __m128d t = _mm_set_sd( value );\n    return _mm_cvtsd_si32(t);\n#elif defined _MSC_VER && defined _M_IX86\n    int t;\n    __asm\n    {\n        fld value;\n        fistp t;\n    }\n    return t;\n#elif defined _MSC_VER && defined _M_ARM && defined HAVE_TEGRA_OPTIMIZATION\n    TEGRA_ROUND(value);\n#elif defined CV_ICC || defined __GNUC__\n#  ifdef HAVE_TEGRA_OPTIMIZATION\n    TEGRA_ROUND(value);\n#  else\n    return (int)lrint(value);\n#  endif\n#else\n    double intpart, fractpart;\n    fractpart = modf(value, &intpart);\n    if ((fabs(fractpart) != 0.5) || ((((int)intpart) % 2) != 0))\n        return (int)(value + (value >= 0 ? 0.5 : -0.5));\n    else\n        return (int)intpart;\n#endif\n}\n\n#if defined __SSE2__ || (defined _M_IX86_FP && 2 == _M_IX86_FP)\n#  include \"emmintrin.h\"\n#endif\n\nCV_INLINE  int  cvFloor( double value )\n{\n#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__ && !defined __APPLE__)\n    __m128d t = _mm_set_sd( value );\n    int i = _mm_cvtsd_si32(t);\n    return i - _mm_movemask_pd(_mm_cmplt_sd(t, _mm_cvtsi32_sd(t,i)));\n#elif defined __GNUC__\n    int i = (int)value;\n    return i - (i > value);\n#else\n    int i = cvRound(value);\n    float diff = (float)(value - i);\n    return i - (diff < 0);\n#endif\n}\n\n\nCV_INLINE  int  cvCeil( double value )\n{\n#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__&& !defined __APPLE__)\n    __m128d t = _mm_set_sd( value );\n    int i = _mm_cvtsd_si32(t);\n    return i + _mm_movemask_pd(_mm_cmplt_sd(_mm_cvtsi32_sd(t,i), t));\n#elif defined __GNUC__\n    int i = (int)value;\n    return i + (i < value);\n#else\n    int i = cvRound(value);\n    float diff = (float)(i - value);\n    return i + (diff < 0);\n#endif\n}\n\n#define cvInvSqrt(value) ((float)(1./sqrt(value)))\n#define cvSqrt(value)  ((float)sqrt(value))\n\nCV_INLINE int cvIsNaN( double value )\n{\n    Cv64suf ieee754;\n    ieee754.f = value;\n    return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) +\n           ((unsigned)ieee754.u != 0) > 0x7ff00000;\n}\n\n\nCV_INLINE int cvIsInf( double value )\n{\n    Cv64suf ieee754;\n    ieee754.f = value;\n    return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 &&\n           (unsigned)ieee754.u == 0;\n}\n\n\n/*************** Random number generation *******************/\n\ntypedef uint64 CvRNG;\n\n#define CV_RNG_COEFF 4164903690U\n\nCV_INLINE CvRNG cvRNG( int64 seed CV_DEFAULT(-1))\n{\n    CvRNG rng = seed ? (uint64)seed : (uint64)(int64)-1;\n    return rng;\n}\n\n/* Return random 32-bit unsigned integer: */\nCV_INLINE unsigned cvRandInt( CvRNG* rng )\n{\n    uint64 temp = *rng;\n    temp = (uint64)(unsigned)temp*CV_RNG_COEFF + (temp >> 32);\n    *rng = temp;\n    return (unsigned)temp;\n}\n\n/* Returns random floating-point number between 0 and 1: */\nCV_INLINE double cvRandReal( CvRNG* rng )\n{\n    return cvRandInt(rng)*2.3283064365386962890625e-10 /* 2^-32 */;\n}\n\n/****************************************************************************************\\\n*                                  Image type (IplImage)                                 *\n\\****************************************************************************************/\n\n#ifndef HAVE_IPL\n\n/*\n * The following definitions (until #endif)\n * is an extract from IPL headers.\n * Copyright (c) 1995 Intel Corporation.\n */\n#define IPL_DEPTH_SIGN 0x80000000\n\n#define IPL_DEPTH_1U     1\n#define IPL_DEPTH_8U     8\n#define IPL_DEPTH_16U   16\n#define IPL_DEPTH_32F   32\n\n#define IPL_DEPTH_8S  (IPL_DEPTH_SIGN| 8)\n#define IPL_DEPTH_16S (IPL_DEPTH_SIGN|16)\n#define IPL_DEPTH_32S (IPL_DEPTH_SIGN|32)\n\n#define IPL_DATA_ORDER_PIXEL  0\n#define IPL_DATA_ORDER_PLANE  1\n\n#define IPL_ORIGIN_TL 0\n#define IPL_ORIGIN_BL 1\n\n#define IPL_ALIGN_4BYTES   4\n#define IPL_ALIGN_8BYTES   8\n#define IPL_ALIGN_16BYTES 16\n#define IPL_ALIGN_32BYTES 32\n\n#define IPL_ALIGN_DWORD   IPL_ALIGN_4BYTES\n#define IPL_ALIGN_QWORD   IPL_ALIGN_8BYTES\n\n#define IPL_BORDER_CONSTANT   0\n#define IPL_BORDER_REPLICATE  1\n#define IPL_BORDER_REFLECT    2\n#define IPL_BORDER_WRAP       3\n\ntypedef struct _IplImage\n{\n    int  nSize;             /* sizeof(IplImage) */\n    int  ID;                /* version (=0)*/\n    int  nChannels;         /* Most of OpenCV functions support 1,2,3 or 4 channels */\n    int  alphaChannel;      /* Ignored by OpenCV */\n    int  depth;             /* Pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,\n                               IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported.  */\n    char colorModel[4];     /* Ignored by OpenCV */\n    char channelSeq[4];     /* ditto */\n    int  dataOrder;         /* 0 - interleaved color channels, 1 - separate color channels.\n                               cvCreateImage can only create interleaved images */\n    int  origin;            /* 0 - top-left origin,\n                               1 - bottom-left origin (Windows bitmaps style).  */\n    int  align;             /* Alignment of image rows (4 or 8).\n                               OpenCV ignores it and uses widthStep instead.    */\n    int  width;             /* Image width in pixels.                           */\n    int  height;            /* Image height in pixels.                          */\n    struct _IplROI *roi;    /* Image ROI. If NULL, the whole image is selected. */\n    struct _IplImage *maskROI;      /* Must be NULL. */\n    void  *imageId;                 /* \"           \" */\n    struct _IplTileInfo *tileInfo;  /* \"           \" */\n    int  imageSize;         /* Image data size in bytes\n                               (==image->height*image->widthStep\n                               in case of interleaved data)*/\n    char *imageData;        /* Pointer to aligned image data.         */\n    int  widthStep;         /* Size of aligned image row in bytes.    */\n    int  BorderMode[4];     /* Ignored by OpenCV.                     */\n    int  BorderConst[4];    /* Ditto.                                 */\n    char *imageDataOrigin;  /* Pointer to very origin of image data\n                               (not necessarily aligned) -\n                               needed for correct deallocation */\n}\nIplImage;\n\ntypedef struct _IplTileInfo IplTileInfo;\n\ntypedef struct _IplROI\n{\n    int  coi; /* 0 - no COI (all channels are selected), 1 - 0th channel is selected ...*/\n    int  xOffset;\n    int  yOffset;\n    int  width;\n    int  height;\n}\nIplROI;\n\ntypedef struct _IplConvKernel\n{\n    int  nCols;\n    int  nRows;\n    int  anchorX;\n    int  anchorY;\n    int *values;\n    int  nShiftR;\n}\nIplConvKernel;\n\ntypedef struct _IplConvKernelFP\n{\n    int  nCols;\n    int  nRows;\n    int  anchorX;\n    int  anchorY;\n    float *values;\n}\nIplConvKernelFP;\n\n#define IPL_IMAGE_HEADER 1\n#define IPL_IMAGE_DATA   2\n#define IPL_IMAGE_ROI    4\n\n#endif/*HAVE_IPL*/\n\n/* extra border mode */\n#define IPL_BORDER_REFLECT_101    4\n#define IPL_BORDER_TRANSPARENT    5\n\n#define IPL_IMAGE_MAGIC_VAL  ((int)sizeof(IplImage))\n#define CV_TYPE_NAME_IMAGE \"opencv-image\"\n\n#define CV_IS_IMAGE_HDR(img) \\\n    ((img) != NULL && ((const IplImage*)(img))->nSize == sizeof(IplImage))\n\n#define CV_IS_IMAGE(img) \\\n    (CV_IS_IMAGE_HDR(img) && ((IplImage*)img)->imageData != NULL)\n\n/* for storing double-precision\n   floating point data in IplImage's */\n#define IPL_DEPTH_64F  64\n\n/* get reference to pixel at (col,row),\n   for multi-channel images (col) should be multiplied by number of channels */\n#define CV_IMAGE_ELEM( image, elemtype, row, col )       \\\n    (((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])\n\n/****************************************************************************************\\\n*                                  Matrix type (CvMat)                                   *\n\\****************************************************************************************/\n\n#define CV_CN_MAX     512\n#define CV_CN_SHIFT   3\n#define CV_DEPTH_MAX  (1 << CV_CN_SHIFT)\n\n#define CV_8U   0\n#define CV_8S   1\n#define CV_16U  2\n#define CV_16S  3\n#define CV_32S  4\n#define CV_32F  5\n#define CV_64F  6\n#define CV_USRTYPE1 7\n\n#define CV_MAT_DEPTH_MASK       (CV_DEPTH_MAX - 1)\n#define CV_MAT_DEPTH(flags)     ((flags) & CV_MAT_DEPTH_MASK)\n\n#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))\n#define CV_MAKE_TYPE CV_MAKETYPE\n\n#define CV_8UC1 CV_MAKETYPE(CV_8U,1)\n#define CV_8UC2 CV_MAKETYPE(CV_8U,2)\n#define CV_8UC3 CV_MAKETYPE(CV_8U,3)\n#define CV_8UC4 CV_MAKETYPE(CV_8U,4)\n#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))\n\n#define CV_8SC1 CV_MAKETYPE(CV_8S,1)\n#define CV_8SC2 CV_MAKETYPE(CV_8S,2)\n#define CV_8SC3 CV_MAKETYPE(CV_8S,3)\n#define CV_8SC4 CV_MAKETYPE(CV_8S,4)\n#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))\n\n#define CV_16UC1 CV_MAKETYPE(CV_16U,1)\n#define CV_16UC2 CV_MAKETYPE(CV_16U,2)\n#define CV_16UC3 CV_MAKETYPE(CV_16U,3)\n#define CV_16UC4 CV_MAKETYPE(CV_16U,4)\n#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))\n\n#define CV_16SC1 CV_MAKETYPE(CV_16S,1)\n#define CV_16SC2 CV_MAKETYPE(CV_16S,2)\n#define CV_16SC3 CV_MAKETYPE(CV_16S,3)\n#define CV_16SC4 CV_MAKETYPE(CV_16S,4)\n#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))\n\n#define CV_32SC1 CV_MAKETYPE(CV_32S,1)\n#define CV_32SC2 CV_MAKETYPE(CV_32S,2)\n#define CV_32SC3 CV_MAKETYPE(CV_32S,3)\n#define CV_32SC4 CV_MAKETYPE(CV_32S,4)\n#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))\n\n#define CV_32FC1 CV_MAKETYPE(CV_32F,1)\n#define CV_32FC2 CV_MAKETYPE(CV_32F,2)\n#define CV_32FC3 CV_MAKETYPE(CV_32F,3)\n#define CV_32FC4 CV_MAKETYPE(CV_32F,4)\n#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))\n\n#define CV_64FC1 CV_MAKETYPE(CV_64F,1)\n#define CV_64FC2 CV_MAKETYPE(CV_64F,2)\n#define CV_64FC3 CV_MAKETYPE(CV_64F,3)\n#define CV_64FC4 CV_MAKETYPE(CV_64F,4)\n#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))\n\n#define CV_AUTO_STEP  0x7fffffff\n#define CV_WHOLE_ARR  cvSlice( 0, 0x3fffffff )\n\n#define CV_MAT_CN_MASK          ((CV_CN_MAX - 1) << CV_CN_SHIFT)\n#define CV_MAT_CN(flags)        ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1)\n#define CV_MAT_TYPE_MASK        (CV_DEPTH_MAX*CV_CN_MAX - 1)\n#define CV_MAT_TYPE(flags)      ((flags) & CV_MAT_TYPE_MASK)\n#define CV_MAT_CONT_FLAG_SHIFT  14\n#define CV_MAT_CONT_FLAG        (1 << CV_MAT_CONT_FLAG_SHIFT)\n#define CV_IS_MAT_CONT(flags)   ((flags) & CV_MAT_CONT_FLAG)\n#define CV_IS_CONT_MAT          CV_IS_MAT_CONT\n#define CV_SUBMAT_FLAG_SHIFT    15\n#define CV_SUBMAT_FLAG          (1 << CV_SUBMAT_FLAG_SHIFT)\n#define CV_IS_SUBMAT(flags)     ((flags) & CV_MAT_SUBMAT_FLAG)\n\n#define CV_MAGIC_MASK       0xFFFF0000\n#define CV_MAT_MAGIC_VAL    0x42420000\n#define CV_TYPE_NAME_MAT    \"opencv-matrix\"\n\ntypedef struct CvMat\n{\n    int type;\n    int step;\n\n    /* for internal use only */\n    int* refcount;\n    int hdr_refcount;\n\n    union\n    {\n        uchar* ptr;\n        short* s;\n        int* i;\n        float* fl;\n        double* db;\n    } data;\n\n#ifdef __cplusplus\n    union\n    {\n        int rows;\n        int height;\n    };\n\n    union\n    {\n        int cols;\n        int width;\n    };\n#else\n    int rows;\n    int cols;\n#endif\n\n}\nCvMat;\n\n\n#define CV_IS_MAT_HDR(mat) \\\n    ((mat) != NULL && \\\n    (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \\\n    ((const CvMat*)(mat))->cols > 0 && ((const CvMat*)(mat))->rows > 0)\n\n#define CV_IS_MAT_HDR_Z(mat) \\\n    ((mat) != NULL && \\\n    (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \\\n    ((const CvMat*)(mat))->cols >= 0 && ((const CvMat*)(mat))->rows >= 0)\n\n#define CV_IS_MAT(mat) \\\n    (CV_IS_MAT_HDR(mat) && ((const CvMat*)(mat))->data.ptr != NULL)\n\n#define CV_IS_MASK_ARR(mat) \\\n    (((mat)->type & (CV_MAT_TYPE_MASK & ~CV_8SC1)) == 0)\n\n#define CV_ARE_TYPES_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_TYPE_MASK) == 0)\n\n#define CV_ARE_CNS_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_CN_MASK) == 0)\n\n#define CV_ARE_DEPTHS_EQ(mat1, mat2) \\\n    ((((mat1)->type ^ (mat2)->type) & CV_MAT_DEPTH_MASK) == 0)\n\n#define CV_ARE_SIZES_EQ(mat1, mat2) \\\n    ((mat1)->rows == (mat2)->rows && (mat1)->cols == (mat2)->cols)\n\n#define CV_IS_MAT_CONST(mat)  \\\n    (((mat)->rows|(mat)->cols) == 1)\n\n/* Size of each channel item,\n   0x124489 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */\n#define CV_ELEM_SIZE1(type) \\\n    ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15)\n\n/* 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */\n#define CV_ELEM_SIZE(type) \\\n    (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3))\n\n#define IPL2CV_DEPTH(depth) \\\n    ((((CV_8U)+(CV_16U<<4)+(CV_32F<<8)+(CV_64F<<16)+(CV_8S<<20)+ \\\n    (CV_16S<<24)+(CV_32S<<28)) >> ((((depth) & 0xF0) >> 2) + \\\n    (((depth) & IPL_DEPTH_SIGN) ? 20 : 0))) & 15)\n\n/* Inline constructor. No data is allocated internally!!!\n * (Use together with cvCreateData, or use cvCreateMat instead to\n * get a matrix with allocated data):\n */\nCV_INLINE CvMat cvMat( int rows, int cols, int type, void* data CV_DEFAULT(NULL))\n{\n    CvMat m;\n\n    assert( (unsigned)CV_MAT_DEPTH(type) <= CV_64F );\n    type = CV_MAT_TYPE(type);\n    m.type = CV_MAT_MAGIC_VAL | CV_MAT_CONT_FLAG | type;\n    m.cols = cols;\n    m.rows = rows;\n    m.step = m.cols*CV_ELEM_SIZE(type);\n    m.data.ptr = (uchar*)data;\n    m.refcount = NULL;\n    m.hdr_refcount = 0;\n\n    return m;\n}\n\n\n#define CV_MAT_ELEM_PTR_FAST( mat, row, col, pix_size )  \\\n    (assert( (unsigned)(row) < (unsigned)(mat).rows &&   \\\n             (unsigned)(col) < (unsigned)(mat).cols ),   \\\n     (mat).data.ptr + (size_t)(mat).step*(row) + (pix_size)*(col))\n\n#define CV_MAT_ELEM_PTR( mat, row, col )                 \\\n    CV_MAT_ELEM_PTR_FAST( mat, row, col, CV_ELEM_SIZE((mat).type) )\n\n#define CV_MAT_ELEM( mat, elemtype, row, col )           \\\n    (*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype)))\n\n\nCV_INLINE  double  cvmGet( const CvMat* mat, int row, int col )\n{\n    int type;\n\n    type = CV_MAT_TYPE(mat->type);\n    assert( (unsigned)row < (unsigned)mat->rows &&\n            (unsigned)col < (unsigned)mat->cols );\n\n    if( type == CV_32FC1 )\n        return ((float*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col];\n    else\n    {\n        assert( type == CV_64FC1 );\n        return ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col];\n    }\n}\n\n\nCV_INLINE  void  cvmSet( CvMat* mat, int row, int col, double value )\n{\n    int type;\n    type = CV_MAT_TYPE(mat->type);\n    assert( (unsigned)row < (unsigned)mat->rows &&\n            (unsigned)col < (unsigned)mat->cols );\n\n    if( type == CV_32FC1 )\n        ((float*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (float)value;\n    else\n    {\n        assert( type == CV_64FC1 );\n        ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (double)value;\n    }\n}\n\n\nCV_INLINE int cvIplDepth( int type )\n{\n    int depth = CV_MAT_DEPTH(type);\n    return CV_ELEM_SIZE1(depth)*8 | (depth == CV_8S || depth == CV_16S ||\n           depth == CV_32S ? IPL_DEPTH_SIGN : 0);\n}\n\n\n/****************************************************************************************\\\n*                       Multi-dimensional dense array (CvMatND)                          *\n\\****************************************************************************************/\n\n#define CV_MATND_MAGIC_VAL    0x42430000\n#define CV_TYPE_NAME_MATND    \"opencv-nd-matrix\"\n\n#define CV_MAX_DIM            32\n#define CV_MAX_DIM_HEAP       1024\n\ntypedef struct CvMatND\n{\n    int type;\n    int dims;\n\n    int* refcount;\n    int hdr_refcount;\n\n    union\n    {\n        uchar* ptr;\n        float* fl;\n        double* db;\n        int* i;\n        short* s;\n    } data;\n\n    struct\n    {\n        int size;\n        int step;\n    }\n    dim[CV_MAX_DIM];\n}\nCvMatND;\n\n#define CV_IS_MATND_HDR(mat) \\\n    ((mat) != NULL && (((const CvMatND*)(mat))->type & CV_MAGIC_MASK) == CV_MATND_MAGIC_VAL)\n\n#define CV_IS_MATND(mat) \\\n    (CV_IS_MATND_HDR(mat) && ((const CvMatND*)(mat))->data.ptr != NULL)\n\n\n/****************************************************************************************\\\n*                      Multi-dimensional sparse array (CvSparseMat)                      *\n\\****************************************************************************************/\n\n#define CV_SPARSE_MAT_MAGIC_VAL    0x42440000\n#define CV_TYPE_NAME_SPARSE_MAT    \"opencv-sparse-matrix\"\n\nstruct CvSet;\n\ntypedef struct CvSparseMat\n{\n    int type;\n    int dims;\n    int* refcount;\n    int hdr_refcount;\n\n    struct CvSet* heap;\n    void** hashtable;\n    int hashsize;\n    int valoffset;\n    int idxoffset;\n    int size[CV_MAX_DIM];\n}\nCvSparseMat;\n\n#define CV_IS_SPARSE_MAT_HDR(mat) \\\n    ((mat) != NULL && \\\n    (((const CvSparseMat*)(mat))->type & CV_MAGIC_MASK) == CV_SPARSE_MAT_MAGIC_VAL)\n\n#define CV_IS_SPARSE_MAT(mat) \\\n    CV_IS_SPARSE_MAT_HDR(mat)\n\n/**************** iteration through a sparse array *****************/\n\ntypedef struct CvSparseNode\n{\n    unsigned hashval;\n    struct CvSparseNode* next;\n}\nCvSparseNode;\n\ntypedef struct CvSparseMatIterator\n{\n    CvSparseMat* mat;\n    CvSparseNode* node;\n    int curidx;\n}\nCvSparseMatIterator;\n\n#define CV_NODE_VAL(mat,node)   ((void*)((uchar*)(node) + (mat)->valoffset))\n#define CV_NODE_IDX(mat,node)   ((int*)((uchar*)(node) + (mat)->idxoffset))\n\n/****************************************************************************************\\\n*                                         Histogram                                      *\n\\****************************************************************************************/\n\ntypedef int CvHistType;\n\n#define CV_HIST_MAGIC_VAL     0x42450000\n#define CV_HIST_UNIFORM_FLAG  (1 << 10)\n\n/* indicates whether bin ranges are set already or not */\n#define CV_HIST_RANGES_FLAG   (1 << 11)\n\n#define CV_HIST_ARRAY         0\n#define CV_HIST_SPARSE        1\n#define CV_HIST_TREE          CV_HIST_SPARSE\n\n/* should be used as a parameter only,\n   it turns to CV_HIST_UNIFORM_FLAG of hist->type */\n#define CV_HIST_UNIFORM       1\n\ntypedef struct CvHistogram\n{\n    int     type;\n    CvArr*  bins;\n    float   thresh[CV_MAX_DIM][2];  /* For uniform histograms.                      */\n    float** thresh2;                /* For non-uniform histograms.                  */\n    CvMatND mat;                    /* Embedded matrix header for array histograms. */\n}\nCvHistogram;\n\n#define CV_IS_HIST( hist ) \\\n    ((hist) != NULL  && \\\n     (((CvHistogram*)(hist))->type & CV_MAGIC_MASK) == CV_HIST_MAGIC_VAL && \\\n     (hist)->bins != NULL)\n\n#define CV_IS_UNIFORM_HIST( hist ) \\\n    (((hist)->type & CV_HIST_UNIFORM_FLAG) != 0)\n\n#define CV_IS_SPARSE_HIST( hist ) \\\n    CV_IS_SPARSE_MAT((hist)->bins)\n\n#define CV_HIST_HAS_RANGES( hist ) \\\n    (((hist)->type & CV_HIST_RANGES_FLAG) != 0)\n\n/****************************************************************************************\\\n*                      Other supplementary data type definitions                         *\n\\****************************************************************************************/\n\n/*************************************** CvRect *****************************************/\n\ntypedef struct CvRect\n{\n    int x;\n    int y;\n    int width;\n    int height;\n}\nCvRect;\n\nCV_INLINE  CvRect  cvRect( int x, int y, int width, int height )\n{\n    CvRect r;\n\n    r.x = x;\n    r.y = y;\n    r.width = width;\n    r.height = height;\n\n    return r;\n}\n\n\nCV_INLINE  IplROI  cvRectToROI( CvRect rect, int coi )\n{\n    IplROI roi;\n    roi.xOffset = rect.x;\n    roi.yOffset = rect.y;\n    roi.width = rect.width;\n    roi.height = rect.height;\n    roi.coi = coi;\n\n    return roi;\n}\n\n\nCV_INLINE  CvRect  cvROIToRect( IplROI roi )\n{\n    return cvRect( roi.xOffset, roi.yOffset, roi.width, roi.height );\n}\n\n/*********************************** CvTermCriteria *************************************/\n\n#define CV_TERMCRIT_ITER    1\n#define CV_TERMCRIT_NUMBER  CV_TERMCRIT_ITER\n#define CV_TERMCRIT_EPS     2\n\ntypedef struct CvTermCriteria\n{\n    int    type;  /* may be combination of\n                     CV_TERMCRIT_ITER\n                     CV_TERMCRIT_EPS */\n    int    max_iter;\n    double epsilon;\n}\nCvTermCriteria;\n\nCV_INLINE  CvTermCriteria  cvTermCriteria( int type, int max_iter, double epsilon )\n{\n    CvTermCriteria t;\n\n    t.type = type;\n    t.max_iter = max_iter;\n    t.epsilon = (float)epsilon;\n\n    return t;\n}\n\n\n/******************************* CvPoint and variants ***********************************/\n\ntypedef struct CvPoint\n{\n    int x;\n    int y;\n}\nCvPoint;\n\n\nCV_INLINE  CvPoint  cvPoint( int x, int y )\n{\n    CvPoint p;\n\n    p.x = x;\n    p.y = y;\n\n    return p;\n}\n\n\ntypedef struct CvPoint2D32f\n{\n    float x;\n    float y;\n}\nCvPoint2D32f;\n\n\nCV_INLINE  CvPoint2D32f  cvPoint2D32f( double x, double y )\n{\n    CvPoint2D32f p;\n\n    p.x = (float)x;\n    p.y = (float)y;\n\n    return p;\n}\n\n\nCV_INLINE  CvPoint2D32f  cvPointTo32f( CvPoint point )\n{\n    return cvPoint2D32f( (float)point.x, (float)point.y );\n}\n\n\nCV_INLINE  CvPoint  cvPointFrom32f( CvPoint2D32f point )\n{\n    CvPoint ipt;\n    ipt.x = cvRound(point.x);\n    ipt.y = cvRound(point.y);\n\n    return ipt;\n}\n\n\ntypedef struct CvPoint3D32f\n{\n    float x;\n    float y;\n    float z;\n}\nCvPoint3D32f;\n\n\nCV_INLINE  CvPoint3D32f  cvPoint3D32f( double x, double y, double z )\n{\n    CvPoint3D32f p;\n\n    p.x = (float)x;\n    p.y = (float)y;\n    p.z = (float)z;\n\n    return p;\n}\n\n\ntypedef struct CvPoint2D64f\n{\n    double x;\n    double y;\n}\nCvPoint2D64f;\n\n\nCV_INLINE  CvPoint2D64f  cvPoint2D64f( double x, double y )\n{\n    CvPoint2D64f p;\n\n    p.x = x;\n    p.y = y;\n\n    return p;\n}\n\n\ntypedef struct CvPoint3D64f\n{\n    double x;\n    double y;\n    double z;\n}\nCvPoint3D64f;\n\n\nCV_INLINE  CvPoint3D64f  cvPoint3D64f( double x, double y, double z )\n{\n    CvPoint3D64f p;\n\n    p.x = x;\n    p.y = y;\n    p.z = z;\n\n    return p;\n}\n\n\n/******************************** CvSize's & CvBox **************************************/\n\ntypedef struct CvSize\n{\n    int width;\n    int height;\n}\nCvSize;\n\nCV_INLINE  CvSize  cvSize( int width, int height )\n{\n    CvSize s;\n\n    s.width = width;\n    s.height = height;\n\n    return s;\n}\n\ntypedef struct CvSize2D32f\n{\n    float width;\n    float height;\n}\nCvSize2D32f;\n\n\nCV_INLINE  CvSize2D32f  cvSize2D32f( double width, double height )\n{\n    CvSize2D32f s;\n\n    s.width = (float)width;\n    s.height = (float)height;\n\n    return s;\n}\n\ntypedef struct CvBox2D\n{\n    CvPoint2D32f center;  /* Center of the box.                          */\n    CvSize2D32f  size;    /* Box width and length.                       */\n    float angle;          /* Angle between the horizontal axis           */\n                          /* and the first side (i.e. length) in degrees */\n}\nCvBox2D;\n\n\n/* Line iterator state: */\ntypedef struct CvLineIterator\n{\n    /* Pointer to the current point: */\n    uchar* ptr;\n\n    /* Bresenham algorithm state: */\n    int  err;\n    int  plus_delta;\n    int  minus_delta;\n    int  plus_step;\n    int  minus_step;\n}\nCvLineIterator;\n\n\n\n/************************************* CvSlice ******************************************/\n\ntypedef struct CvSlice\n{\n    int  start_index, end_index;\n}\nCvSlice;\n\nCV_INLINE  CvSlice  cvSlice( int start, int end )\n{\n    CvSlice slice;\n    slice.start_index = start;\n    slice.end_index = end;\n\n    return slice;\n}\n\n#define CV_WHOLE_SEQ_END_INDEX 0x3fffffff\n#define CV_WHOLE_SEQ  cvSlice(0, CV_WHOLE_SEQ_END_INDEX)\n\n\n/************************************* CvScalar *****************************************/\n\ntypedef struct CvScalar\n{\n    double val[4];\n}\nCvScalar;\n\nCV_INLINE  CvScalar  cvScalar( double val0, double val1 CV_DEFAULT(0),\n                               double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0))\n{\n    CvScalar scalar;\n    scalar.val[0] = val0; scalar.val[1] = val1;\n    scalar.val[2] = val2; scalar.val[3] = val3;\n    return scalar;\n}\n\n\nCV_INLINE  CvScalar  cvRealScalar( double val0 )\n{\n    CvScalar scalar;\n    scalar.val[0] = val0;\n    scalar.val[1] = scalar.val[2] = scalar.val[3] = 0;\n    return scalar;\n}\n\nCV_INLINE  CvScalar  cvScalarAll( double val0123 )\n{\n    CvScalar scalar;\n    scalar.val[0] = val0123;\n    scalar.val[1] = val0123;\n    scalar.val[2] = val0123;\n    scalar.val[3] = val0123;\n    return scalar;\n}\n\n/****************************************************************************************\\\n*                                   Dynamic Data structures                              *\n\\****************************************************************************************/\n\n/******************************** Memory storage ****************************************/\n\ntypedef struct CvMemBlock\n{\n    struct CvMemBlock*  prev;\n    struct CvMemBlock*  next;\n}\nCvMemBlock;\n\n#define CV_STORAGE_MAGIC_VAL    0x42890000\n\ntypedef struct CvMemStorage\n{\n    int signature;\n    CvMemBlock* bottom;           /* First allocated block.                   */\n    CvMemBlock* top;              /* Current memory block - top of the stack. */\n    struct  CvMemStorage* parent; /* We get new blocks from parent as needed. */\n    int block_size;               /* Block size.                              */\n    int free_space;               /* Remaining free space in current block.   */\n}\nCvMemStorage;\n\n#define CV_IS_STORAGE(storage)  \\\n    ((storage) != NULL &&       \\\n    (((CvMemStorage*)(storage))->signature & CV_MAGIC_MASK) == CV_STORAGE_MAGIC_VAL)\n\n\ntypedef struct CvMemStoragePos\n{\n    CvMemBlock* top;\n    int free_space;\n}\nCvMemStoragePos;\n\n\n/*********************************** Sequence *******************************************/\n\ntypedef struct CvSeqBlock\n{\n    struct CvSeqBlock*  prev; /* Previous sequence block.                   */\n    struct CvSeqBlock*  next; /* Next sequence block.                       */\n  int    start_index;         /* Index of the first element in the block +  */\n                              /* sequence->first->start_index.              */\n    int    count;             /* Number of elements in the block.           */\n    schar* data;              /* Pointer to the first element of the block. */\n}\nCvSeqBlock;\n\n\n#define CV_TREE_NODE_FIELDS(node_type)                               \\\n    int       flags;             /* Miscellaneous flags.     */      \\\n    int       header_size;       /* Size of sequence header. */      \\\n    struct    node_type* h_prev; /* Previous sequence.       */      \\\n    struct    node_type* h_next; /* Next sequence.           */      \\\n    struct    node_type* v_prev; /* 2nd previous sequence.   */      \\\n    struct    node_type* v_next  /* 2nd next sequence.       */\n\n/*\n   Read/Write sequence.\n   Elements can be dynamically inserted to or deleted from the sequence.\n*/\n#define CV_SEQUENCE_FIELDS()                                              \\\n    CV_TREE_NODE_FIELDS(CvSeq);                                           \\\n    int       total;          /* Total number of elements.            */  \\\n    int       elem_size;      /* Size of sequence element in bytes.   */  \\\n    schar*    block_max;      /* Maximal bound of the last block.     */  \\\n    schar*    ptr;            /* Current write pointer.               */  \\\n    int       delta_elems;    /* Grow seq this many at a time.        */  \\\n    CvMemStorage* storage;    /* Where the seq is stored.             */  \\\n    CvSeqBlock* free_blocks;  /* Free blocks list.                    */  \\\n    CvSeqBlock* first;        /* Pointer to the first sequence block. */\n\ntypedef struct CvSeq\n{\n    CV_SEQUENCE_FIELDS()\n}\nCvSeq;\n\n#define CV_TYPE_NAME_SEQ             \"opencv-sequence\"\n#define CV_TYPE_NAME_SEQ_TREE        \"opencv-sequence-tree\"\n\n/*************************************** Set ********************************************/\n/*\n  Set.\n  Order is not preserved. There can be gaps between sequence elements.\n  After the element has been inserted it stays in the same place all the time.\n  The MSB(most-significant or sign bit) of the first field (flags) is 0 iff the element exists.\n*/\n#define CV_SET_ELEM_FIELDS(elem_type)   \\\n    int  flags;                         \\\n    struct elem_type* next_free;\n\ntypedef struct CvSetElem\n{\n    CV_SET_ELEM_FIELDS(CvSetElem)\n}\nCvSetElem;\n\n#define CV_SET_FIELDS()      \\\n    CV_SEQUENCE_FIELDS()     \\\n    CvSetElem* free_elems;   \\\n    int active_count;\n\ntypedef struct CvSet\n{\n    CV_SET_FIELDS()\n}\nCvSet;\n\n\n#define CV_SET_ELEM_IDX_MASK   ((1 << 26) - 1)\n#define CV_SET_ELEM_FREE_FLAG  (1 << (sizeof(int)*8-1))\n\n/* Checks whether the element pointed by ptr belongs to a set or not */\n#define CV_IS_SET_ELEM( ptr )  (((CvSetElem*)(ptr))->flags >= 0)\n\n/************************************* Graph ********************************************/\n\n/*\n  We represent a graph as a set of vertices.\n  Vertices contain their adjacency lists (more exactly, pointers to first incoming or\n  outcoming edge (or 0 if isolated vertex)). Edges are stored in another set.\n  There is a singly-linked list of incoming/outcoming edges for each vertex.\n\n  Each edge consists of\n\n     o   Two pointers to the starting and ending vertices\n         (vtx[0] and vtx[1] respectively).\n\n   A graph may be oriented or not. In the latter case, edges between\n   vertex i to vertex j are not distinguished during search operations.\n\n     o   Two pointers to next edges for the starting and ending vertices, where\n         next[0] points to the next edge in the vtx[0] adjacency list and\n         next[1] points to the next edge in the vtx[1] adjacency list.\n*/\n#define CV_GRAPH_EDGE_FIELDS()      \\\n    int flags;                      \\\n    float weight;                   \\\n    struct CvGraphEdge* next[2];    \\\n    struct CvGraphVtx* vtx[2];\n\n\n#define CV_GRAPH_VERTEX_FIELDS()    \\\n    int flags;                      \\\n    struct CvGraphEdge* first;\n\n\ntypedef struct CvGraphEdge\n{\n    CV_GRAPH_EDGE_FIELDS()\n}\nCvGraphEdge;\n\ntypedef struct CvGraphVtx\n{\n    CV_GRAPH_VERTEX_FIELDS()\n}\nCvGraphVtx;\n\ntypedef struct CvGraphVtx2D\n{\n    CV_GRAPH_VERTEX_FIELDS()\n    CvPoint2D32f* ptr;\n}\nCvGraphVtx2D;\n\n/*\n   Graph is \"derived\" from the set (this is set a of vertices)\n   and includes another set (edges)\n*/\n#define  CV_GRAPH_FIELDS()   \\\n    CV_SET_FIELDS()          \\\n    CvSet* edges;\n\ntypedef struct CvGraph\n{\n    CV_GRAPH_FIELDS()\n}\nCvGraph;\n\n#define CV_TYPE_NAME_GRAPH \"opencv-graph\"\n\n/*********************************** Chain/Countour *************************************/\n\ntypedef struct CvChain\n{\n    CV_SEQUENCE_FIELDS()\n    CvPoint  origin;\n}\nCvChain;\n\n#define CV_CONTOUR_FIELDS()  \\\n    CV_SEQUENCE_FIELDS()     \\\n    CvRect rect;             \\\n    int color;               \\\n    int reserved[3];\n\ntypedef struct CvContour\n{\n    CV_CONTOUR_FIELDS()\n}\nCvContour;\n\ntypedef CvContour CvPoint2DSeq;\n\n/****************************************************************************************\\\n*                                    Sequence types                                      *\n\\****************************************************************************************/\n\n#define CV_SEQ_MAGIC_VAL             0x42990000\n\n#define CV_IS_SEQ(seq) \\\n    ((seq) != NULL && (((CvSeq*)(seq))->flags & CV_MAGIC_MASK) == CV_SEQ_MAGIC_VAL)\n\n#define CV_SET_MAGIC_VAL             0x42980000\n#define CV_IS_SET(set) \\\n    ((set) != NULL && (((CvSeq*)(set))->flags & CV_MAGIC_MASK) == CV_SET_MAGIC_VAL)\n\n#define CV_SEQ_ELTYPE_BITS           12\n#define CV_SEQ_ELTYPE_MASK           ((1 << CV_SEQ_ELTYPE_BITS) - 1)\n\n#define CV_SEQ_ELTYPE_POINT          CV_32SC2  /* (x,y) */\n#define CV_SEQ_ELTYPE_CODE           CV_8UC1   /* freeman code: 0..7 */\n#define CV_SEQ_ELTYPE_GENERIC        0\n#define CV_SEQ_ELTYPE_PTR            CV_USRTYPE1\n#define CV_SEQ_ELTYPE_PPOINT         CV_SEQ_ELTYPE_PTR  /* &(x,y) */\n#define CV_SEQ_ELTYPE_INDEX          CV_32SC1  /* #(x,y) */\n#define CV_SEQ_ELTYPE_GRAPH_EDGE     0  /* &next_o, &next_d, &vtx_o, &vtx_d */\n#define CV_SEQ_ELTYPE_GRAPH_VERTEX   0  /* first_edge, &(x,y) */\n#define CV_SEQ_ELTYPE_TRIAN_ATR      0  /* vertex of the binary tree   */\n#define CV_SEQ_ELTYPE_CONNECTED_COMP 0  /* connected component  */\n#define CV_SEQ_ELTYPE_POINT3D        CV_32FC3  /* (x,y,z)  */\n\n#define CV_SEQ_KIND_BITS        2\n#define CV_SEQ_KIND_MASK        (((1 << CV_SEQ_KIND_BITS) - 1)<<CV_SEQ_ELTYPE_BITS)\n\n/* types of sequences */\n#define CV_SEQ_KIND_GENERIC     (0 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_CURVE       (1 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_BIN_TREE    (2 << CV_SEQ_ELTYPE_BITS)\n\n/* types of sparse sequences (sets) */\n#define CV_SEQ_KIND_GRAPH       (1 << CV_SEQ_ELTYPE_BITS)\n#define CV_SEQ_KIND_SUBDIV2D    (2 << CV_SEQ_ELTYPE_BITS)\n\n#define CV_SEQ_FLAG_SHIFT       (CV_SEQ_KIND_BITS + CV_SEQ_ELTYPE_BITS)\n\n/* flags for curves */\n#define CV_SEQ_FLAG_CLOSED     (1 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_SIMPLE     (0 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_CONVEX     (0 << CV_SEQ_FLAG_SHIFT)\n#define CV_SEQ_FLAG_HOLE       (2 << CV_SEQ_FLAG_SHIFT)\n\n/* flags for graphs */\n#define CV_GRAPH_FLAG_ORIENTED (1 << CV_SEQ_FLAG_SHIFT)\n\n#define CV_GRAPH               CV_SEQ_KIND_GRAPH\n#define CV_ORIENTED_GRAPH      (CV_SEQ_KIND_GRAPH|CV_GRAPH_FLAG_ORIENTED)\n\n/* point sets */\n#define CV_SEQ_POINT_SET       (CV_SEQ_KIND_GENERIC| CV_SEQ_ELTYPE_POINT)\n#define CV_SEQ_POINT3D_SET     (CV_SEQ_KIND_GENERIC| CV_SEQ_ELTYPE_POINT3D)\n#define CV_SEQ_POLYLINE        (CV_SEQ_KIND_CURVE  | CV_SEQ_ELTYPE_POINT)\n#define CV_SEQ_POLYGON         (CV_SEQ_FLAG_CLOSED | CV_SEQ_POLYLINE )\n#define CV_SEQ_CONTOUR         CV_SEQ_POLYGON\n#define CV_SEQ_SIMPLE_POLYGON  (CV_SEQ_FLAG_SIMPLE | CV_SEQ_POLYGON  )\n\n/* chain-coded curves */\n#define CV_SEQ_CHAIN           (CV_SEQ_KIND_CURVE  | CV_SEQ_ELTYPE_CODE)\n#define CV_SEQ_CHAIN_CONTOUR   (CV_SEQ_FLAG_CLOSED | CV_SEQ_CHAIN)\n\n/* binary tree for the contour */\n#define CV_SEQ_POLYGON_TREE    (CV_SEQ_KIND_BIN_TREE  | CV_SEQ_ELTYPE_TRIAN_ATR)\n\n/* sequence of the connected components */\n#define CV_SEQ_CONNECTED_COMP  (CV_SEQ_KIND_GENERIC  | CV_SEQ_ELTYPE_CONNECTED_COMP)\n\n/* sequence of the integer numbers */\n#define CV_SEQ_INDEX           (CV_SEQ_KIND_GENERIC  | CV_SEQ_ELTYPE_INDEX)\n\n#define CV_SEQ_ELTYPE( seq )   ((seq)->flags & CV_SEQ_ELTYPE_MASK)\n#define CV_SEQ_KIND( seq )     ((seq)->flags & CV_SEQ_KIND_MASK )\n\n/* flag checking */\n#define CV_IS_SEQ_INDEX( seq )      ((CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_INDEX) && \\\n                                     (CV_SEQ_KIND(seq) == CV_SEQ_KIND_GENERIC))\n\n#define CV_IS_SEQ_CURVE( seq )      (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE)\n#define CV_IS_SEQ_CLOSED( seq )     (((seq)->flags & CV_SEQ_FLAG_CLOSED) != 0)\n#define CV_IS_SEQ_CONVEX( seq )     0\n#define CV_IS_SEQ_HOLE( seq )       (((seq)->flags & CV_SEQ_FLAG_HOLE) != 0)\n#define CV_IS_SEQ_SIMPLE( seq )     1\n\n/* type checking macros */\n#define CV_IS_SEQ_POINT_SET( seq ) \\\n    ((CV_SEQ_ELTYPE(seq) == CV_32SC2 || CV_SEQ_ELTYPE(seq) == CV_32FC2))\n\n#define CV_IS_SEQ_POINT_SUBSET( seq ) \\\n    (CV_IS_SEQ_INDEX( seq ) || CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_PPOINT)\n\n#define CV_IS_SEQ_POLYLINE( seq )   \\\n    (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && CV_IS_SEQ_POINT_SET(seq))\n\n#define CV_IS_SEQ_POLYGON( seq )   \\\n    (CV_IS_SEQ_POLYLINE(seq) && CV_IS_SEQ_CLOSED(seq))\n\n#define CV_IS_SEQ_CHAIN( seq )   \\\n    (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && (seq)->elem_size == 1)\n\n#define CV_IS_SEQ_CONTOUR( seq )   \\\n    (CV_IS_SEQ_CLOSED(seq) && (CV_IS_SEQ_POLYLINE(seq) || CV_IS_SEQ_CHAIN(seq)))\n\n#define CV_IS_SEQ_CHAIN_CONTOUR( seq ) \\\n    (CV_IS_SEQ_CHAIN( seq ) && CV_IS_SEQ_CLOSED( seq ))\n\n#define CV_IS_SEQ_POLYGON_TREE( seq ) \\\n    (CV_SEQ_ELTYPE (seq) ==  CV_SEQ_ELTYPE_TRIAN_ATR &&    \\\n    CV_SEQ_KIND( seq ) ==  CV_SEQ_KIND_BIN_TREE )\n\n#define CV_IS_GRAPH( seq )    \\\n    (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_GRAPH)\n\n#define CV_IS_GRAPH_ORIENTED( seq )   \\\n    (((seq)->flags & CV_GRAPH_FLAG_ORIENTED) != 0)\n\n#define CV_IS_SUBDIV2D( seq )  \\\n    (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_SUBDIV2D)\n\n/****************************************************************************************/\n/*                            Sequence writer & reader                                  */\n/****************************************************************************************/\n\n#define CV_SEQ_WRITER_FIELDS()                                     \\\n    int          header_size;                                      \\\n    CvSeq*       seq;        /* the sequence written */            \\\n    CvSeqBlock*  block;      /* current block */                   \\\n    schar*       ptr;        /* pointer to free space */           \\\n    schar*       block_min;  /* pointer to the beginning of block*/\\\n    schar*       block_max;  /* pointer to the end of block */\n\ntypedef struct CvSeqWriter\n{\n    CV_SEQ_WRITER_FIELDS()\n}\nCvSeqWriter;\n\n\n#define CV_SEQ_READER_FIELDS()                                      \\\n    int          header_size;                                       \\\n    CvSeq*       seq;        /* sequence, beign read */             \\\n    CvSeqBlock*  block;      /* current block */                    \\\n    schar*       ptr;        /* pointer to element be read next */  \\\n    schar*       block_min;  /* pointer to the beginning of block */\\\n    schar*       block_max;  /* pointer to the end of block */      \\\n    int          delta_index;/* = seq->first->start_index   */      \\\n    schar*       prev_elem;  /* pointer to previous element */\n\n\ntypedef struct CvSeqReader\n{\n    CV_SEQ_READER_FIELDS()\n}\nCvSeqReader;\n\n/****************************************************************************************/\n/*                                Operations on sequences                               */\n/****************************************************************************************/\n\n#define  CV_SEQ_ELEM( seq, elem_type, index )                    \\\n/* assert gives some guarantee that <seq> parameter is valid */  \\\n(   assert(sizeof((seq)->first[0]) == sizeof(CvSeqBlock) &&      \\\n    (seq)->elem_size == sizeof(elem_type)),                      \\\n    (elem_type*)((seq)->first && (unsigned)index <               \\\n    (unsigned)((seq)->first->count) ?                            \\\n    (seq)->first->data + (index) * sizeof(elem_type) :           \\\n    cvGetSeqElem( (CvSeq*)(seq), (index) )))\n#define CV_GET_SEQ_ELEM( elem_type, seq, index ) CV_SEQ_ELEM( (seq), elem_type, (index) )\n\n/* Add element to sequence: */\n#define CV_WRITE_SEQ_ELEM_VAR( elem_ptr, writer )     \\\n{                                                     \\\n    if( (writer).ptr >= (writer).block_max )          \\\n    {                                                 \\\n        cvCreateSeqBlock( &writer);                   \\\n    }                                                 \\\n    memcpy((writer).ptr, elem_ptr, (writer).seq->elem_size);\\\n    (writer).ptr += (writer).seq->elem_size;          \\\n}\n\n#define CV_WRITE_SEQ_ELEM( elem, writer )             \\\n{                                                     \\\n    assert( (writer).seq->elem_size == sizeof(elem)); \\\n    if( (writer).ptr >= (writer).block_max )          \\\n    {                                                 \\\n        cvCreateSeqBlock( &writer);                   \\\n    }                                                 \\\n    assert( (writer).ptr <= (writer).block_max - sizeof(elem));\\\n    memcpy((writer).ptr, &(elem), sizeof(elem));      \\\n    (writer).ptr += sizeof(elem);                     \\\n}\n\n\n/* Move reader position forward: */\n#define CV_NEXT_SEQ_ELEM( elem_size, reader )                 \\\n{                                                             \\\n    if( ((reader).ptr += (elem_size)) >= (reader).block_max ) \\\n    {                                                         \\\n        cvChangeSeqBlock( &(reader), 1 );                     \\\n    }                                                         \\\n}\n\n\n/* Move reader position backward: */\n#define CV_PREV_SEQ_ELEM( elem_size, reader )                \\\n{                                                            \\\n    if( ((reader).ptr -= (elem_size)) < (reader).block_min ) \\\n    {                                                        \\\n        cvChangeSeqBlock( &(reader), -1 );                   \\\n    }                                                        \\\n}\n\n/* Read element and move read position forward: */\n#define CV_READ_SEQ_ELEM( elem, reader )                       \\\n{                                                              \\\n    assert( (reader).seq->elem_size == sizeof(elem));          \\\n    memcpy( &(elem), (reader).ptr, sizeof((elem)));            \\\n    CV_NEXT_SEQ_ELEM( sizeof(elem), reader )                   \\\n}\n\n/* Read element and move read position backward: */\n#define CV_REV_READ_SEQ_ELEM( elem, reader )                     \\\n{                                                                \\\n    assert( (reader).seq->elem_size == sizeof(elem));            \\\n    memcpy(&(elem), (reader).ptr, sizeof((elem)));               \\\n    CV_PREV_SEQ_ELEM( sizeof(elem), reader )                     \\\n}\n\n\n#define CV_READ_CHAIN_POINT( _pt, reader )                              \\\n{                                                                       \\\n    (_pt) = (reader).pt;                                                \\\n    if( (reader).ptr )                                                  \\\n    {                                                                   \\\n        CV_READ_SEQ_ELEM( (reader).code, (reader));                     \\\n        assert( ((reader).code & ~7) == 0 );                            \\\n        (reader).pt.x += (reader).deltas[(int)(reader).code][0];        \\\n        (reader).pt.y += (reader).deltas[(int)(reader).code][1];        \\\n    }                                                                   \\\n}\n\n#define CV_CURRENT_POINT( reader )  (*((CvPoint*)((reader).ptr)))\n#define CV_PREV_POINT( reader )     (*((CvPoint*)((reader).prev_elem)))\n\n#define CV_READ_EDGE( pt1, pt2, reader )               \\\n{                                                      \\\n    assert( sizeof(pt1) == sizeof(CvPoint) &&          \\\n            sizeof(pt2) == sizeof(CvPoint) &&          \\\n            reader.seq->elem_size == sizeof(CvPoint)); \\\n    (pt1) = CV_PREV_POINT( reader );                   \\\n    (pt2) = CV_CURRENT_POINT( reader );                \\\n    (reader).prev_elem = (reader).ptr;                 \\\n    CV_NEXT_SEQ_ELEM( sizeof(CvPoint), (reader));      \\\n}\n\n/************ Graph macros ************/\n\n/* Return next graph edge for given vertex: */\n#define  CV_NEXT_GRAPH_EDGE( edge, vertex )                              \\\n     (assert((edge)->vtx[0] == (vertex) || (edge)->vtx[1] == (vertex)),  \\\n      (edge)->next[(edge)->vtx[1] == (vertex)])\n\n\n\n/****************************************************************************************\\\n*             Data structures for persistence (a.k.a serialization) functionality        *\n\\****************************************************************************************/\n\n/* \"black box\" file storage */\ntypedef struct CvFileStorage CvFileStorage;\n\n/* Storage flags: */\n#define CV_STORAGE_READ          0\n#define CV_STORAGE_WRITE         1\n#define CV_STORAGE_WRITE_TEXT    CV_STORAGE_WRITE\n#define CV_STORAGE_WRITE_BINARY  CV_STORAGE_WRITE\n#define CV_STORAGE_APPEND        2\n#define CV_STORAGE_MEMORY        4\n#define CV_STORAGE_FORMAT_MASK   (7<<3)\n#define CV_STORAGE_FORMAT_AUTO   0\n#define CV_STORAGE_FORMAT_XML    8\n#define CV_STORAGE_FORMAT_YAML  16\n\n/* List of attributes: */\ntypedef struct CvAttrList\n{\n    const char** attr;         /* NULL-terminated array of (attribute_name,attribute_value) pairs. */\n    struct CvAttrList* next;   /* Pointer to next chunk of the attributes list.                    */\n}\nCvAttrList;\n\nCV_INLINE CvAttrList cvAttrList( const char** attr CV_DEFAULT(NULL),\n                                 CvAttrList* next CV_DEFAULT(NULL) )\n{\n    CvAttrList l;\n    l.attr = attr;\n    l.next = next;\n\n    return l;\n}\n\nstruct CvTypeInfo;\n\n#define CV_NODE_NONE        0\n#define CV_NODE_INT         1\n#define CV_NODE_INTEGER     CV_NODE_INT\n#define CV_NODE_REAL        2\n#define CV_NODE_FLOAT       CV_NODE_REAL\n#define CV_NODE_STR         3\n#define CV_NODE_STRING      CV_NODE_STR\n#define CV_NODE_REF         4 /* not used */\n#define CV_NODE_SEQ         5\n#define CV_NODE_MAP         6\n#define CV_NODE_TYPE_MASK   7\n\n#define CV_NODE_TYPE(flags)  ((flags) & CV_NODE_TYPE_MASK)\n\n/* file node flags */\n#define CV_NODE_FLOW        8 /* Used only for writing structures in YAML format. */\n#define CV_NODE_USER        16\n#define CV_NODE_EMPTY       32\n#define CV_NODE_NAMED       64\n\n#define CV_NODE_IS_INT(flags)        (CV_NODE_TYPE(flags) == CV_NODE_INT)\n#define CV_NODE_IS_REAL(flags)       (CV_NODE_TYPE(flags) == CV_NODE_REAL)\n#define CV_NODE_IS_STRING(flags)     (CV_NODE_TYPE(flags) == CV_NODE_STRING)\n#define CV_NODE_IS_SEQ(flags)        (CV_NODE_TYPE(flags) == CV_NODE_SEQ)\n#define CV_NODE_IS_MAP(flags)        (CV_NODE_TYPE(flags) == CV_NODE_MAP)\n#define CV_NODE_IS_COLLECTION(flags) (CV_NODE_TYPE(flags) >= CV_NODE_SEQ)\n#define CV_NODE_IS_FLOW(flags)       (((flags) & CV_NODE_FLOW) != 0)\n#define CV_NODE_IS_EMPTY(flags)      (((flags) & CV_NODE_EMPTY) != 0)\n#define CV_NODE_IS_USER(flags)       (((flags) & CV_NODE_USER) != 0)\n#define CV_NODE_HAS_NAME(flags)      (((flags) & CV_NODE_NAMED) != 0)\n\n#define CV_NODE_SEQ_SIMPLE 256\n#define CV_NODE_SEQ_IS_SIMPLE(seq) (((seq)->flags & CV_NODE_SEQ_SIMPLE) != 0)\n\ntypedef struct CvString\n{\n    int len;\n    char* ptr;\n}\nCvString;\n\n/* All the keys (names) of elements in the readed file storage\n   are stored in the hash to speed up the lookup operations: */\ntypedef struct CvStringHashNode\n{\n    unsigned hashval;\n    CvString str;\n    struct CvStringHashNode* next;\n}\nCvStringHashNode;\n\ntypedef struct CvGenericHash CvFileNodeHash;\n\n/* Basic element of the file storage - scalar or collection: */\ntypedef struct CvFileNode\n{\n    int tag;\n    struct CvTypeInfo* info; /* type information\n            (only for user-defined object, for others it is 0) */\n    union\n    {\n        double f; /* scalar floating-point number */\n        int i;    /* scalar integer number */\n        CvString str; /* text string */\n        CvSeq* seq; /* sequence (ordered collection of file nodes) */\n        CvFileNodeHash* map; /* map (collection of named file nodes) */\n    } data;\n}\nCvFileNode;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\ntypedef int (CV_CDECL *CvIsInstanceFunc)( const void* struct_ptr );\ntypedef void (CV_CDECL *CvReleaseFunc)( void** struct_dblptr );\ntypedef void* (CV_CDECL *CvReadFunc)( CvFileStorage* storage, CvFileNode* node );\ntypedef void (CV_CDECL *CvWriteFunc)( CvFileStorage* storage, const char* name,\n                                      const void* struct_ptr, CvAttrList attributes );\ntypedef void* (CV_CDECL *CvCloneFunc)( const void* struct_ptr );\n#ifdef __cplusplus\n}\n#endif\n\ntypedef struct CvTypeInfo\n{\n    int flags;\n    int header_size;\n    struct CvTypeInfo* prev;\n    struct CvTypeInfo* next;\n    const char* type_name;\n    CvIsInstanceFunc is_instance;\n    CvReleaseFunc release;\n    CvReadFunc read;\n    CvWriteFunc write;\n    CvCloneFunc clone;\n}\nCvTypeInfo;\n\n\n/**** System data types ******/\n\ntypedef struct CvPluginFuncInfo\n{\n    void** func_addr;\n    void* default_func_addr;\n    const char* func_names;\n    int search_modules;\n    int loaded_from;\n}\nCvPluginFuncInfo;\n\ntypedef struct CvModuleInfo\n{\n    struct CvModuleInfo* next;\n    const char* name;\n    const char* version;\n    CvPluginFuncInfo* func_tab;\n}\nCvModuleInfo;\n\n#endif /*__OPENCV_CORE_TYPES_H__*/\n\n/* End of file. */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/version.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright( C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort(including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n/*\n  definition of the current version of OpenCV\n  Usefull to test in user programs\n*/\n\n#ifndef __OPENCV_VERSION_HPP__\n#define __OPENCV_VERSION_HPP__\n\n#define CV_VERSION_EPOCH    2\n#define CV_VERSION_MAJOR    4\n#define CV_VERSION_MINOR    9\n#define CV_VERSION_REVISION 0\n\n#define CVAUX_STR_EXP(__A)  #__A\n#define CVAUX_STR(__A)      CVAUX_STR_EXP(__A)\n\n#define CVAUX_STRW_EXP(__A)  L#__A\n#define CVAUX_STRW(__A)      CVAUX_STRW_EXP(__A)\n\n#if CV_VERSION_REVISION\n#  define CV_VERSION        CVAUX_STR(CV_VERSION_EPOCH) \".\" CVAUX_STR(CV_VERSION_MAJOR) \".\" CVAUX_STR(CV_VERSION_MINOR) \".\" CVAUX_STR(CV_VERSION_REVISION)\n#else\n#  define CV_VERSION        CVAUX_STR(CV_VERSION_EPOCH) \".\" CVAUX_STR(CV_VERSION_MAJOR) \".\" CVAUX_STR(CV_VERSION_MINOR)\n#endif\n\n/* old  style version constants*/\n#define CV_MAJOR_VERSION    CV_VERSION_EPOCH\n#define CV_MINOR_VERSION    CV_VERSION_MAJOR\n#define CV_SUBMINOR_VERSION CV_VERSION_MINOR\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/core/wimage.hpp",
    "content": "///////////////////////////////////////////////////////////////////////////////\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to\n//  this license.  If you do not agree to this license, do not download,\n//  install, copy or use the software.\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2008, Google, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//  * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//  * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//  * The name of Intel Corporation or contributors may not be used to endorse\n//     or promote products derived from this software without specific\n//     prior written permission.\n//\n// This software is provided by the copyright holders and contributors \"as is\"\n// and any express or implied warranties, including, but not limited to, the\n// implied warranties of merchantability and fitness for a particular purpose\n// are disclaimed. In no event shall the Intel Corporation or contributors be\n// liable for any direct, indirect, incidental, special, exemplary, or\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n\n\n/////////////////////////////////////////////////////////////////////////////////\n//\n// Image class which provides a thin layer around an IplImage.  The goals\n// of the class design are:\n//    1. All the data has explicit ownership to avoid memory leaks\n//    2. No hidden allocations or copies for performance.\n//    3. Easy access to OpenCV methods (which will access IPP if available)\n//    4. Can easily treat external data as an image\n//    5. Easy to create images which are subsets of other images\n//    6. Fast pixel access which can take advantage of number of channels\n//          if known at compile time.\n//\n// The WImage class is the image class which provides the data accessors.\n// The 'W' comes from the fact that it is also a wrapper around the popular\n// but inconvenient IplImage class. A WImage can be constructed either using a\n// WImageBuffer class which allocates and frees the data,\n// or using a WImageView class which constructs a subimage or a view into\n// external data.  The view class does no memory management.  Each class\n// actually has two versions, one when the number of channels is known at\n// compile time and one when it isn't.  Using the one with the number of\n// channels specified can provide some compile time optimizations by using the\n// fact that the number of channels is a constant.\n//\n// We use the convention (c,r) to refer to column c and row r with (0,0) being\n// the upper left corner.  This is similar to standard Euclidean coordinates\n// with the first coordinate varying in the horizontal direction and the second\n// coordinate varying in the vertical direction.\n// Thus (c,r) is usually in the domain [0, width) X [0, height)\n//\n// Example usage:\n// WImageBuffer3_b  im(5,7);  // Make a 5X7 3 channel image of type uchar\n// WImageView3_b  sub_im(im, 2,2, 3,3); // 3X3 submatrix\n// vector<float> vec(10, 3.0f);\n// WImageView1_f user_im(&vec[0], 2, 5);  // 2X5 image w/ supplied data\n//\n// im.SetZero();  // same as cvSetZero(im.Ipl())\n// *im(2, 3) = 15;  // Modify the element at column 2, row 3\n// MySetRand(&sub_im);\n//\n// // Copy the second row into the first.  This can be done with no memory\n// // allocation and will use SSE if IPP is available.\n// int w = im.Width();\n// im.View(0,0, w,1).CopyFrom(im.View(0,1, w,1));\n//\n// // Doesn't care about source of data since using WImage\n// void MySetRand(WImage_b* im) { // Works with any number of channels\n//   for (int r = 0; r < im->Height(); ++r) {\n//     float* row = im->Row(r);\n//     for (int c = 0; c < im->Width(); ++c) {\n//        for (int ch = 0; ch < im->Channels(); ++ch, ++row) {\n//          *row = uchar(rand() & 255);\n//        }\n//     }\n//   }\n// }\n//\n// Functions that are not part of the basic image allocation, viewing, and\n// access should come from OpenCV, except some useful functions that are not\n// part of OpenCV can be found in wimage_util.h\n#ifndef __OPENCV_CORE_WIMAGE_HPP__\n#define __OPENCV_CORE_WIMAGE_HPP__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\n\nnamespace cv {\n\ntemplate <typename T> class WImage;\ntemplate <typename T> class WImageBuffer;\ntemplate <typename T> class WImageView;\n\ntemplate<typename T, int C> class WImageC;\ntemplate<typename T, int C> class WImageBufferC;\ntemplate<typename T, int C> class WImageViewC;\n\n// Commonly used typedefs.\ntypedef WImage<uchar>            WImage_b;\ntypedef WImageView<uchar>        WImageView_b;\ntypedef WImageBuffer<uchar>      WImageBuffer_b;\n\ntypedef WImageC<uchar, 1>        WImage1_b;\ntypedef WImageViewC<uchar, 1>    WImageView1_b;\ntypedef WImageBufferC<uchar, 1>  WImageBuffer1_b;\n\ntypedef WImageC<uchar, 3>        WImage3_b;\ntypedef WImageViewC<uchar, 3>    WImageView3_b;\ntypedef WImageBufferC<uchar, 3>  WImageBuffer3_b;\n\ntypedef WImage<float>            WImage_f;\ntypedef WImageView<float>        WImageView_f;\ntypedef WImageBuffer<float>      WImageBuffer_f;\n\ntypedef WImageC<float, 1>        WImage1_f;\ntypedef WImageViewC<float, 1>    WImageView1_f;\ntypedef WImageBufferC<float, 1>  WImageBuffer1_f;\n\ntypedef WImageC<float, 3>        WImage3_f;\ntypedef WImageViewC<float, 3>    WImageView3_f;\ntypedef WImageBufferC<float, 3>  WImageBuffer3_f;\n\n// There isn't a standard for signed and unsigned short so be more\n// explicit in the typename for these cases.\ntypedef WImage<short>            WImage_16s;\ntypedef WImageView<short>        WImageView_16s;\ntypedef WImageBuffer<short>      WImageBuffer_16s;\n\ntypedef WImageC<short, 1>        WImage1_16s;\ntypedef WImageViewC<short, 1>    WImageView1_16s;\ntypedef WImageBufferC<short, 1>  WImageBuffer1_16s;\n\ntypedef WImageC<short, 3>        WImage3_16s;\ntypedef WImageViewC<short, 3>    WImageView3_16s;\ntypedef WImageBufferC<short, 3>  WImageBuffer3_16s;\n\ntypedef WImage<ushort>            WImage_16u;\ntypedef WImageView<ushort>        WImageView_16u;\ntypedef WImageBuffer<ushort>      WImageBuffer_16u;\n\ntypedef WImageC<ushort, 1>        WImage1_16u;\ntypedef WImageViewC<ushort, 1>    WImageView1_16u;\ntypedef WImageBufferC<ushort, 1>  WImageBuffer1_16u;\n\ntypedef WImageC<ushort, 3>        WImage3_16u;\ntypedef WImageViewC<ushort, 3>    WImageView3_16u;\ntypedef WImageBufferC<ushort, 3>  WImageBuffer3_16u;\n\n//\n// WImage definitions\n//\n// This WImage class gives access to the data it refers to.  It can be\n// constructed either by allocating the data with a WImageBuffer class or\n// using the WImageView class to refer to a subimage or outside data.\ntemplate<typename T>\nclass WImage\n{\npublic:\n    typedef T BaseType;\n\n    // WImage is an abstract class with no other virtual methods so make the\n    // destructor virtual.\n    virtual ~WImage() = 0;\n\n    // Accessors\n    IplImage* Ipl() {return image_; }\n    const IplImage* Ipl() const {return image_; }\n    T* ImageData() { return reinterpret_cast<T*>(image_->imageData); }\n    const T* ImageData() const {\n        return reinterpret_cast<const T*>(image_->imageData);\n    }\n\n    int Width() const {return image_->width; }\n    int Height() const {return image_->height; }\n\n    // WidthStep is the number of bytes to go to the pixel with the next y coord\n    int WidthStep() const {return image_->widthStep; }\n\n    int Channels() const {return image_->nChannels; }\n    int ChannelSize() const {return sizeof(T); }  // number of bytes per channel\n\n    // Number of bytes per pixel\n    int PixelSize() const {return Channels() * ChannelSize(); }\n\n    // Return depth type (e.g. IPL_DEPTH_8U, IPL_DEPTH_32F) which is the number\n    // of bits per channel and with the signed bit set.\n    // This is known at compile time using specializations.\n    int Depth() const;\n\n    inline const T* Row(int r) const {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep);\n    }\n\n    inline T* Row(int r) {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep);\n    }\n\n    // Pixel accessors which returns a pointer to the start of the channel\n    inline T* operator() (int c, int r)  {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep) +\n            c*Channels();\n    }\n\n    inline const T* operator() (int c, int r) const  {\n        return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep) +\n            c*Channels();\n    }\n\n    // Copy the contents from another image which is just a convenience to cvCopy\n    void CopyFrom(const WImage<T>& src) { cvCopy(src.Ipl(), image_); }\n\n    // Set contents to zero which is just a convenient to cvSetZero\n    void SetZero() { cvSetZero(image_); }\n\n    // Construct a view into a region of this image\n    WImageView<T> View(int c, int r, int width, int height);\n\nprotected:\n    // Disallow copy and assignment\n    WImage(const WImage&);\n    void operator=(const WImage&);\n\n    explicit WImage(IplImage* img) : image_(img) {\n        assert(!img || img->depth == Depth());\n    }\n\n    void SetIpl(IplImage* image) {\n        assert(!image || image->depth == Depth());\n        image_ = image;\n    }\n\n    IplImage* image_;\n};\n\n\n\n// Image class when both the pixel type and number of channels\n// are known at compile time.  This wrapper will speed up some of the operations\n// like accessing individual pixels using the () operator.\ntemplate<typename T, int C>\nclass WImageC : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    explicit WImageC(IplImage* img) : WImage<T>(img) {\n        assert(!img || img->nChannels == Channels());\n    }\n\n    // Construct a view into a region of this image\n    WImageViewC<T, C> View(int c, int r, int width, int height);\n\n    // Copy the contents from another image which is just a convenience to cvCopy\n    void CopyFrom(const WImageC<T, C>& src) {\n        cvCopy(src.Ipl(), WImage<T>::image_);\n    }\n\n    // WImageC is an abstract class with no other virtual methods so make the\n    // destructor virtual.\n    virtual ~WImageC() = 0;\n\n    int Channels() const {return C; }\n\nprotected:\n    // Disallow copy and assignment\n    WImageC(const WImageC&);\n    void operator=(const WImageC&);\n\n    void SetIpl(IplImage* image) {\n        assert(!image || image->depth == WImage<T>::Depth());\n        WImage<T>::SetIpl(image);\n    }\n};\n\n//\n// WImageBuffer definitions\n//\n// Image class which owns the data, so it can be allocated and is always\n// freed.  It cannot be copied but can be explicity cloned.\n//\ntemplate<typename T>\nclass WImageBuffer : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n\n    // Default constructor which creates an object that can be\n    WImageBuffer() : WImage<T>(0) {}\n\n    WImageBuffer(int width, int height, int nchannels) : WImage<T>(0) {\n        Allocate(width, height, nchannels);\n    }\n\n    // Constructor which takes ownership of a given IplImage so releases\n    // the image on destruction.\n    explicit WImageBuffer(IplImage* img) : WImage<T>(img) {}\n\n    // Allocate an image.  Does nothing if current size is the same as\n    // the new size.\n    void Allocate(int width, int height, int nchannels);\n\n    // Set the data to point to an image, releasing the old data\n    void SetIpl(IplImage* img) {\n        ReleaseImage();\n        WImage<T>::SetIpl(img);\n    }\n\n    // Clone an image which reallocates the image if of a different dimension.\n    void CloneFrom(const WImage<T>& src) {\n        Allocate(src.Width(), src.Height(), src.Channels());\n        CopyFrom(src);\n    }\n\n    ~WImageBuffer() {\n        ReleaseImage();\n    }\n\n    // Release the image if it isn't null.\n    void ReleaseImage() {\n        if (WImage<T>::image_) {\n            IplImage* image = WImage<T>::image_;\n            cvReleaseImage(&image);\n            WImage<T>::SetIpl(0);\n        }\n    }\n\n    bool IsNull() const {return WImage<T>::image_ == NULL; }\n\nprivate:\n    // Disallow copy and assignment\n    WImageBuffer(const WImageBuffer&);\n    void operator=(const WImageBuffer&);\n};\n\n// Like a WImageBuffer class but when the number of channels is known\n// at compile time.\ntemplate<typename T, int C>\nclass WImageBufferC : public WImageC<T, C>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    // Default constructor which creates an object that can be\n    WImageBufferC() : WImageC<T, C>(0) {}\n\n    WImageBufferC(int width, int height) : WImageC<T, C>(0) {\n        Allocate(width, height);\n    }\n\n    // Constructor which takes ownership of a given IplImage so releases\n    // the image on destruction.\n    explicit WImageBufferC(IplImage* img) : WImageC<T, C>(img) {}\n\n    // Allocate an image.  Does nothing if current size is the same as\n    // the new size.\n    void Allocate(int width, int height);\n\n    // Set the data to point to an image, releasing the old data\n    void SetIpl(IplImage* img) {\n        ReleaseImage();\n        WImageC<T, C>::SetIpl(img);\n    }\n\n    // Clone an image which reallocates the image if of a different dimension.\n    void CloneFrom(const WImageC<T, C>& src) {\n        Allocate(src.Width(), src.Height());\n        CopyFrom(src);\n    }\n\n    ~WImageBufferC() {\n        ReleaseImage();\n    }\n\n    // Release the image if it isn't null.\n    void ReleaseImage() {\n        if (WImage<T>::image_) {\n            IplImage* image = WImage<T>::image_;\n            cvReleaseImage(&image);\n            WImageC<T, C>::SetIpl(0);\n        }\n    }\n\n    bool IsNull() const {return WImage<T>::image_ == NULL; }\n\nprivate:\n    // Disallow copy and assignment\n    WImageBufferC(const WImageBufferC&);\n    void operator=(const WImageBufferC&);\n};\n\n//\n// WImageView definitions\n//\n// View into an image class which allows treating a subimage as an image\n// or treating external data as an image\n//\ntemplate<typename T>\nclass WImageView : public WImage<T>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n\n    // Construct a subimage.  No checks are done that the subimage lies\n    // completely inside the original image.\n    WImageView(WImage<T>* img, int c, int r, int width, int height);\n\n    // Refer to external data.\n    // If not given width_step assumed to be same as width.\n    WImageView(T* data, int width, int height, int channels, int width_step = -1);\n\n    // Refer to external data.  This does NOT take ownership\n    // of the supplied IplImage.\n    WImageView(IplImage* img) : WImage<T>(img) {}\n\n    // Copy constructor\n    WImageView(const WImage<T>& img) : WImage<T>(0) {\n        header_ = *(img.Ipl());\n        WImage<T>::SetIpl(&header_);\n    }\n\n    WImageView& operator=(const WImage<T>& img) {\n        header_ = *(img.Ipl());\n        WImage<T>::SetIpl(&header_);\n        return *this;\n    }\n\nprotected:\n    IplImage header_;\n};\n\n\ntemplate<typename T, int C>\nclass WImageViewC : public WImageC<T, C>\n{\npublic:\n    typedef typename WImage<T>::BaseType BaseType;\n    enum { kChannels = C };\n\n    // Default constructor needed for vectors of views.\n    WImageViewC();\n\n    virtual ~WImageViewC() {}\n\n    // Construct a subimage.  No checks are done that the subimage lies\n    // completely inside the original image.\n    WImageViewC(WImageC<T, C>* img,\n        int c, int r, int width, int height);\n\n    // Refer to external data\n    WImageViewC(T* data, int width, int height, int width_step = -1);\n\n    // Refer to external data.  This does NOT take ownership\n    // of the supplied IplImage.\n    WImageViewC(IplImage* img) : WImageC<T, C>(img) {}\n\n    // Copy constructor which does a shallow copy to allow multiple views\n    // of same data.  gcc-4.1.1 gets confused if both versions of\n    // the constructor and assignment operator are not provided.\n    WImageViewC(const WImageC<T, C>& img) : WImageC<T, C>(0) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n    }\n    WImageViewC(const WImageViewC<T, C>& img) : WImageC<T, C>(0) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n    }\n\n    WImageViewC& operator=(const WImageC<T, C>& img) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n        return *this;\n    }\n    WImageViewC& operator=(const WImageViewC<T, C>& img) {\n        header_ = *(img.Ipl());\n        WImageC<T, C>::SetIpl(&header_);\n        return *this;\n    }\n\nprotected:\n    IplImage header_;\n};\n\n\n// Specializations for depth\ntemplate<>\ninline int WImage<uchar>::Depth() const {return IPL_DEPTH_8U; }\ntemplate<>\ninline int WImage<signed char>::Depth() const {return IPL_DEPTH_8S; }\ntemplate<>\ninline int WImage<short>::Depth() const {return IPL_DEPTH_16S; }\ntemplate<>\ninline int WImage<ushort>::Depth() const {return IPL_DEPTH_16U; }\ntemplate<>\ninline int WImage<int>::Depth() const {return IPL_DEPTH_32S; }\ntemplate<>\ninline int WImage<float>::Depth() const {return IPL_DEPTH_32F; }\ntemplate<>\ninline int WImage<double>::Depth() const {return IPL_DEPTH_64F; }\n\n//\n// Pure virtual destructors still need to be defined.\n//\ntemplate<typename T> inline WImage<T>::~WImage() {}\ntemplate<typename T, int C> inline WImageC<T, C>::~WImageC() {}\n\n//\n// Allocate ImageData\n//\ntemplate<typename T>\ninline void WImageBuffer<T>::Allocate(int width, int height, int nchannels)\n{\n    if (IsNull() || WImage<T>::Width() != width ||\n        WImage<T>::Height() != height || WImage<T>::Channels() != nchannels) {\n        ReleaseImage();\n        WImage<T>::image_ = cvCreateImage(cvSize(width, height),\n            WImage<T>::Depth(), nchannels);\n    }\n}\n\ntemplate<typename T, int C>\ninline void WImageBufferC<T, C>::Allocate(int width, int height)\n{\n    if (IsNull() || WImage<T>::Width() != width || WImage<T>::Height() != height) {\n        ReleaseImage();\n        WImageC<T, C>::SetIpl(cvCreateImage(cvSize(width, height),WImage<T>::Depth(), C));\n    }\n}\n\n//\n// ImageView methods\n//\ntemplate<typename T>\nWImageView<T>::WImageView(WImage<T>* img, int c, int r, int width, int height)\n        : WImage<T>(0)\n{\n    header_ = *(img->Ipl());\n    header_.imageData = reinterpret_cast<char*>((*img)(c, r));\n    header_.width = width;\n    header_.height = height;\n    WImage<T>::SetIpl(&header_);\n}\n\ntemplate<typename T>\nWImageView<T>::WImageView(T* data, int width, int height, int nchannels, int width_step)\n          : WImage<T>(0)\n{\n    cvInitImageHeader(&header_, cvSize(width, height), WImage<T>::Depth(), nchannels);\n    header_.imageData = reinterpret_cast<char*>(data);\n    if (width_step > 0) {\n        header_.widthStep = width_step;\n    }\n    WImage<T>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC(WImageC<T, C>* img, int c, int r, int width, int height)\n        : WImageC<T, C>(0)\n{\n    header_ = *(img->Ipl());\n    header_.imageData = reinterpret_cast<char*>((*img)(c, r));\n    header_.width = width;\n    header_.height = height;\n    WImageC<T, C>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC() : WImageC<T, C>(0) {\n    cvInitImageHeader(&header_, cvSize(0, 0), WImage<T>::Depth(), C);\n    header_.imageData = reinterpret_cast<char*>(0);\n    WImageC<T, C>::SetIpl(&header_);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C>::WImageViewC(T* data, int width, int height, int width_step)\n    : WImageC<T, C>(0)\n{\n    cvInitImageHeader(&header_, cvSize(width, height), WImage<T>::Depth(), C);\n    header_.imageData = reinterpret_cast<char*>(data);\n    if (width_step > 0) {\n        header_.widthStep = width_step;\n    }\n    WImageC<T, C>::SetIpl(&header_);\n}\n\n// Construct a view into a region of an image\ntemplate<typename T>\nWImageView<T> WImage<T>::View(int c, int r, int width, int height) {\n    return WImageView<T>(this, c, r, width, height);\n}\n\ntemplate<typename T, int C>\nWImageViewC<T, C> WImageC<T, C>::View(int c, int r, int width, int height) {\n    return WImageViewC<T, C>(this, c, r, width, height);\n}\n\n}  // end of namespace\n\n#endif // __cplusplus\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/features2d/features2d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_FEATURES_2D_HPP__\n#define __OPENCV_FEATURES_2D_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/flann/miniflann.hpp\"\n\n#ifdef __cplusplus\n#include <limits>\n\nnamespace cv\n{\n\nCV_EXPORTS bool initModule_features2d();\n\n/*!\n The Keypoint Class\n\n The class instance stores a keypoint, i.e. a point feature found by one of many available keypoint detectors, such as\n Harris corner detector, cv::FAST, cv::StarDetector, cv::SURF, cv::SIFT, cv::LDetector etc.\n\n The keypoint is characterized by the 2D position, scale\n (proportional to the diameter of the neighborhood that needs to be taken into account),\n orientation and some other parameters. The keypoint neighborhood is then analyzed by another algorithm that builds a descriptor\n (usually represented as a feature vector). The keypoints representing the same object in different images can then be matched using\n cv::KDTree or another method.\n*/\nclass CV_EXPORTS_W_SIMPLE KeyPoint\n{\npublic:\n    //! the default constructor\n    CV_WRAP KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {}\n    //! the full constructor\n    KeyPoint(Point2f _pt, float _size, float _angle=-1,\n            float _response=0, int _octave=0, int _class_id=-1)\n            : pt(_pt), size(_size), angle(_angle),\n            response(_response), octave(_octave), class_id(_class_id) {}\n    //! another form of the full constructor\n    CV_WRAP KeyPoint(float x, float y, float _size, float _angle=-1,\n            float _response=0, int _octave=0, int _class_id=-1)\n            : pt(x, y), size(_size), angle(_angle),\n            response(_response), octave(_octave), class_id(_class_id) {}\n\n    size_t hash() const;\n\n    //! converts vector of keypoints to vector of points\n    static void convert(const vector<KeyPoint>& keypoints,\n                        CV_OUT vector<Point2f>& points2f,\n                        const vector<int>& keypointIndexes=vector<int>());\n    //! converts vector of points to the vector of keypoints, where each keypoint is assigned the same size and the same orientation\n    static void convert(const vector<Point2f>& points2f,\n                        CV_OUT vector<KeyPoint>& keypoints,\n                        float size=1, float response=1, int octave=0, int class_id=-1);\n\n    //! computes overlap for pair of keypoints;\n    //! overlap is a ratio between area of keypoint regions intersection and\n    //! area of keypoint regions union (now keypoint region is circle)\n    static float overlap(const KeyPoint& kp1, const KeyPoint& kp2);\n\n    CV_PROP_RW Point2f pt; //!< coordinates of the keypoints\n    CV_PROP_RW float size; //!< diameter of the meaningful keypoint neighborhood\n    CV_PROP_RW float angle; //!< computed orientation of the keypoint (-1 if not applicable);\n                            //!< it's in [0,360) degrees and measured relative to\n                            //!< image coordinate system, ie in clockwise.\n    CV_PROP_RW float response; //!< the response by which the most strong keypoints have been selected. Can be used for the further sorting or subsampling\n    CV_PROP_RW int octave; //!< octave (pyramid layer) from which the keypoint has been extracted\n    CV_PROP_RW int class_id; //!< object class (if the keypoints need to be clustered by an object they belong to)\n};\n\n//! writes vector of keypoints to the file storage\nCV_EXPORTS void write(FileStorage& fs, const string& name, const vector<KeyPoint>& keypoints);\n//! reads vector of keypoints from the specified file storage node\nCV_EXPORTS void read(const FileNode& node, CV_OUT vector<KeyPoint>& keypoints);\n\n/*\n * A class filters a vector of keypoints.\n * Because now it is difficult to provide a convenient interface for all usage scenarios of the keypoints filter class,\n * it has only several needed by now static methods.\n */\nclass CV_EXPORTS KeyPointsFilter\n{\npublic:\n    KeyPointsFilter(){}\n\n    /*\n     * Remove keypoints within borderPixels of an image edge.\n     */\n    static void runByImageBorder( vector<KeyPoint>& keypoints, Size imageSize, int borderSize );\n    /*\n     * Remove keypoints of sizes out of range.\n     */\n    static void runByKeypointSize( vector<KeyPoint>& keypoints, float minSize,\n                                   float maxSize=FLT_MAX );\n    /*\n     * Remove keypoints from some image by mask for pixels of this image.\n     */\n    static void runByPixelsMask( vector<KeyPoint>& keypoints, const Mat& mask );\n    /*\n     * Remove duplicated keypoints.\n     */\n    static void removeDuplicated( vector<KeyPoint>& keypoints );\n\n    /*\n     * Retain the specified number of the best keypoints (according to the response)\n     */\n    static void retainBest( vector<KeyPoint>& keypoints, int npoints );\n};\n\n\n/************************************ Base Classes ************************************/\n\n/*\n * Abstract base class for 2D image feature detectors.\n */\nclass CV_EXPORTS_W FeatureDetector : public virtual Algorithm\n{\npublic:\n    virtual ~FeatureDetector();\n\n    /*\n     * Detect keypoints in an image.\n     * image        The image.\n     * keypoints    The detected keypoints.\n     * mask         Mask specifying where to look for keypoints (optional). Must be a char\n     *              matrix with non-zero values in the region of interest.\n     */\n    CV_WRAP void detect( const Mat& image, CV_OUT vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    /*\n     * Detect keypoints in an image set.\n     * images       Image collection.\n     * keypoints    Collection of keypoints detected in an input images. keypoints[i] is a set of keypoints detected in an images[i].\n     * masks        Masks for image set. masks[i] is a mask for images[i].\n     */\n    void detect( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints, const vector<Mat>& masks=vector<Mat>() ) const;\n\n    // Return true if detector object is empty\n    CV_WRAP virtual bool empty() const;\n\n    // Create feature detector by detector name.\n    CV_WRAP static Ptr<FeatureDetector> create( const string& detectorType );\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const = 0;\n\n    /*\n     * Remove keypoints that are not in the mask.\n     * Helper function, useful when wrapping a library call for keypoint detection that\n     * does not support a mask argument.\n     */\n    static void removeInvalidPoints( const Mat& mask, vector<KeyPoint>& keypoints );\n};\n\n\n/*\n * Abstract base class for computing descriptors for image keypoints.\n *\n * In this interface we assume a keypoint descriptor can be represented as a\n * dense, fixed-dimensional vector of some basic type. Most descriptors used\n * in practice follow this pattern, as it makes it very easy to compute\n * distances between descriptors. Therefore we represent a collection of\n * descriptors as a Mat, where each row is one keypoint descriptor.\n */\nclass CV_EXPORTS_W DescriptorExtractor : public virtual Algorithm\n{\npublic:\n    virtual ~DescriptorExtractor();\n\n    /*\n     * Compute the descriptors for a set of keypoints in an image.\n     * image        The image.\n     * keypoints    The input keypoints. Keypoints for which a descriptor cannot be computed are removed.\n     * descriptors  Copmputed descriptors. Row i is the descriptor for keypoint i.\n     */\n    CV_WRAP void compute( const Mat& image, CV_OUT CV_IN_OUT vector<KeyPoint>& keypoints, CV_OUT Mat& descriptors ) const;\n\n    /*\n     * Compute the descriptors for a keypoints collection detected in image collection.\n     * images       Image collection.\n     * keypoints    Input keypoints collection. keypoints[i] is keypoints detected in images[i].\n     *              Keypoints for which a descriptor cannot be computed are removed.\n     * descriptors  Descriptor collection. descriptors[i] are descriptors computed for set keypoints[i].\n     */\n    void compute( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints, vector<Mat>& descriptors ) const;\n\n    CV_WRAP virtual int descriptorSize() const = 0;\n    CV_WRAP virtual int descriptorType() const = 0;\n\n    CV_WRAP virtual bool empty() const;\n\n    CV_WRAP static Ptr<DescriptorExtractor> create( const string& descriptorExtractorType );\n\nprotected:\n    virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const = 0;\n\n    /*\n     * Remove keypoints within borderPixels of an image edge.\n     */\n    static void removeBorderKeypoints( vector<KeyPoint>& keypoints,\n                                      Size imageSize, int borderSize );\n};\n\n\n\n/*\n * Abstract base class for simultaneous 2D feature detection descriptor extraction.\n */\nclass CV_EXPORTS_W Feature2D : public FeatureDetector, public DescriptorExtractor\n{\npublic:\n    /*\n     * Detect keypoints in an image.\n     * image        The image.\n     * keypoints    The detected keypoints.\n     * mask         Mask specifying where to look for keypoints (optional). Must be a char\n     *              matrix with non-zero values in the region of interest.\n     * useProvidedKeypoints If true, the method will skip the detection phase and will compute\n     *                      descriptors for the provided keypoints\n     */\n    CV_WRAP_AS(detectAndCompute) virtual void operator()( InputArray image, InputArray mask,\n                                     CV_OUT vector<KeyPoint>& keypoints,\n                                     OutputArray descriptors,\n                                     bool useProvidedKeypoints=false ) const = 0;\n\n    CV_WRAP void compute( const Mat& image, CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints, CV_OUT Mat& descriptors ) const;\n\n    // Create feature detector and descriptor extractor by name.\n    CV_WRAP static Ptr<Feature2D> create( const string& name );\n};\n\n/*!\n  BRISK implementation\n*/\nclass CV_EXPORTS_W BRISK : public Feature2D\n{\npublic:\n    CV_WRAP explicit BRISK(int thresh=30, int octaves=3, float patternScale=1.0f);\n\n    virtual ~BRISK();\n\n    // returns the descriptor size in bytes\n    int descriptorSize() const;\n    // returns the descriptor type\n    int descriptorType() const;\n\n    // Compute the BRISK features on an image\n    void operator()(InputArray image, InputArray mask, vector<KeyPoint>& keypoints) const;\n\n    // Compute the BRISK features and descriptors on an image\n    void operator()( InputArray image, InputArray mask, vector<KeyPoint>& keypoints,\n                      OutputArray descriptors, bool useProvidedKeypoints=false ) const;\n\n    AlgorithmInfo* info() const;\n\n    // custom setup\n    CV_WRAP explicit BRISK(std::vector<float> &radiusList, std::vector<int> &numberList,\n        float dMax=5.85f, float dMin=8.2f, std::vector<int> indexChange=std::vector<int>());\n\n    // call this to generate the kernel:\n    // circle of radius r (pixels), with n points;\n    // short pairings with dMax, long pairings with dMin\n    CV_WRAP void generateKernel(std::vector<float> &radiusList,\n        std::vector<int> &numberList, float dMax=5.85f, float dMin=8.2f,\n        std::vector<int> indexChange=std::vector<int>());\n\nprotected:\n\n    void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    void computeKeypointsNoOrientation(InputArray image, InputArray mask, vector<KeyPoint>& keypoints) const;\n    void computeDescriptorsAndOrOrientation(InputArray image, InputArray mask, vector<KeyPoint>& keypoints,\n                                       OutputArray descriptors, bool doDescriptors, bool doOrientation,\n                                       bool useProvidedKeypoints) const;\n\n    // Feature parameters\n    CV_PROP_RW int threshold;\n    CV_PROP_RW int octaves;\n\n    // some helper structures for the Brisk pattern representation\n    struct BriskPatternPoint{\n        float x;         // x coordinate relative to center\n        float y;         // x coordinate relative to center\n        float sigma;     // Gaussian smoothing sigma\n    };\n    struct BriskShortPair{\n        unsigned int i;  // index of the first pattern point\n        unsigned int j;  // index of other pattern point\n    };\n    struct BriskLongPair{\n        unsigned int i;  // index of the first pattern point\n        unsigned int j;  // index of other pattern point\n        int weighted_dx; // 1024.0/dx\n        int weighted_dy; // 1024.0/dy\n    };\n    inline int smoothedIntensity(const cv::Mat& image,\n                const cv::Mat& integral,const float key_x,\n                const float key_y, const unsigned int scale,\n                const unsigned int rot, const unsigned int point) const;\n    // pattern properties\n    BriskPatternPoint* patternPoints_;     //[i][rotation][scale]\n    unsigned int points_;                 // total number of collocation points\n    float* scaleList_;                     // lists the scaling per scale index [scale]\n    unsigned int* sizeList_;             // lists the total pattern size per scale index [scale]\n    static const unsigned int scales_;    // scales discretization\n    static const float scalerange_;     // span of sizes 40->4 Octaves - else, this needs to be adjusted...\n    static const unsigned int n_rot_;    // discretization of the rotation look-up\n\n    // pairs\n    int strings_;                        // number of uchars the descriptor consists of\n    float dMax_;                         // short pair maximum distance\n    float dMin_;                         // long pair maximum distance\n    BriskShortPair* shortPairs_;         // d<_dMax\n    BriskLongPair* longPairs_;             // d>_dMin\n    unsigned int noShortPairs_;         // number of shortParis\n    unsigned int noLongPairs_;             // number of longParis\n\n    // general\n    static const float basicSize_;\n};\n\n\n/*!\n ORB implementation.\n*/\nclass CV_EXPORTS_W ORB : public Feature2D\n{\npublic:\n    // the size of the signature in bytes\n    enum { kBytes = 32, HARRIS_SCORE=0, FAST_SCORE=1 };\n\n    CV_WRAP explicit ORB(int nfeatures = 500, float scaleFactor = 1.2f, int nlevels = 8, int edgeThreshold = 31,\n        int firstLevel = 0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31 );\n\n    // returns the descriptor size in bytes\n    int descriptorSize() const;\n    // returns the descriptor type\n    int descriptorType() const;\n\n    // Compute the ORB features and descriptors on an image\n    void operator()(InputArray image, InputArray mask, vector<KeyPoint>& keypoints) const;\n\n    // Compute the ORB features and descriptors on an image\n    void operator()( InputArray image, InputArray mask, vector<KeyPoint>& keypoints,\n                     OutputArray descriptors, bool useProvidedKeypoints=false ) const;\n\n    AlgorithmInfo* info() const;\n\nprotected:\n\n    void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    CV_PROP_RW int nfeatures;\n    CV_PROP_RW double scaleFactor;\n    CV_PROP_RW int nlevels;\n    CV_PROP_RW int edgeThreshold;\n    CV_PROP_RW int firstLevel;\n    CV_PROP_RW int WTA_K;\n    CV_PROP_RW int scoreType;\n    CV_PROP_RW int patchSize;\n};\n\ntypedef ORB OrbFeatureDetector;\ntypedef ORB OrbDescriptorExtractor;\n\n/*!\n  FREAK implementation\n*/\nclass CV_EXPORTS FREAK : public DescriptorExtractor\n{\npublic:\n    /** Constructor\n         * @param orientationNormalized enable orientation normalization\n         * @param scaleNormalized enable scale normalization\n         * @param patternScale scaling of the description pattern\n         * @param nbOctave number of octaves covered by the detected keypoints\n         * @param selectedPairs (optional) user defined selected pairs\n    */\n    explicit FREAK( bool orientationNormalized = true,\n           bool scaleNormalized = true,\n           float patternScale = 22.0f,\n           int nOctaves = 4,\n           const vector<int>& selectedPairs = vector<int>());\n    FREAK( const FREAK& rhs );\n    FREAK& operator=( const FREAK& );\n\n    virtual ~FREAK();\n\n    /** returns the descriptor length in bytes */\n    virtual int descriptorSize() const;\n\n    /** returns the descriptor type */\n    virtual int descriptorType() const;\n\n    /** select the 512 \"best description pairs\"\n         * @param images grayscale images set\n         * @param keypoints set of detected keypoints\n         * @param corrThresh correlation threshold\n         * @param verbose print construction information\n         * @return list of best pair indexes\n    */\n    vector<int> selectPairs( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints,\n                      const double corrThresh = 0.7, bool verbose = true );\n\n    AlgorithmInfo* info() const;\n\n    enum\n    {\n        NB_SCALES = 64, NB_PAIRS = 512, NB_ORIENPAIRS = 45\n    };\n\nprotected:\n    virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n    void buildPattern();\n    uchar meanIntensity( const Mat& image, const Mat& integral, const float kp_x, const float kp_y,\n                         const unsigned int scale, const unsigned int rot, const unsigned int point ) const;\n\n    bool orientationNormalized; //true if the orientation is normalized, false otherwise\n    bool scaleNormalized; //true if the scale is normalized, false otherwise\n    double patternScale; //scaling of the pattern\n    int nOctaves; //number of octaves\n    bool extAll; // true if all pairs need to be extracted for pairs selection\n\n    double patternScale0;\n    int nOctaves0;\n    vector<int> selectedPairs0;\n\n    struct PatternPoint\n    {\n        float x; // x coordinate relative to center\n        float y; // x coordinate relative to center\n        float sigma; // Gaussian smoothing sigma\n    };\n\n    struct DescriptionPair\n    {\n        uchar i; // index of the first point\n        uchar j; // index of the second point\n    };\n\n    struct OrientationPair\n    {\n        uchar i; // index of the first point\n        uchar j; // index of the second point\n        int weight_dx; // dx/(norm_sq))*4096\n        int weight_dy; // dy/(norm_sq))*4096\n    };\n\n    vector<PatternPoint> patternLookup; // look-up table for the pattern points (position+sigma of all points at all scales and orientation)\n    int patternSizes[NB_SCALES]; // size of the pattern at a specific scale (used to check if a point is within image boundaries)\n    DescriptionPair descriptionPairs[NB_PAIRS];\n    OrientationPair orientationPairs[NB_ORIENPAIRS];\n};\n\n\n/*!\n Maximal Stable Extremal Regions class.\n\n The class implements MSER algorithm introduced by J. Matas.\n Unlike SIFT, SURF and many other detectors in OpenCV, this is salient region detector,\n not the salient point detector.\n\n It returns the regions, each of those is encoded as a contour.\n*/\nclass CV_EXPORTS_W MSER : public FeatureDetector\n{\npublic:\n    //! the full constructor\n    CV_WRAP explicit MSER( int _delta=5, int _min_area=60, int _max_area=14400,\n          double _max_variation=0.25, double _min_diversity=.2,\n          int _max_evolution=200, double _area_threshold=1.01,\n          double _min_margin=0.003, int _edge_blur_size=5 );\n\n    //! the operator that extracts the MSERs from the image or the specific part of it\n    CV_WRAP_AS(detect) void operator()( const Mat& image, CV_OUT vector<vector<Point> >& msers,\n                                        const Mat& mask=Mat() ) const;\n    AlgorithmInfo* info() const;\n\nprotected:\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int delta;\n    int minArea;\n    int maxArea;\n    double maxVariation;\n    double minDiversity;\n    int maxEvolution;\n    double areaThreshold;\n    double minMargin;\n    int edgeBlurSize;\n};\n\ntypedef MSER MserFeatureDetector;\n\n/*!\n The \"Star\" Detector.\n\n The class implements the keypoint detector introduced by K. Konolige.\n*/\nclass CV_EXPORTS_W StarDetector : public FeatureDetector\n{\npublic:\n    //! the full constructor\n    CV_WRAP StarDetector(int _maxSize=45, int _responseThreshold=30,\n                 int _lineThresholdProjected=10,\n                 int _lineThresholdBinarized=8,\n                 int _suppressNonmaxSize=5);\n\n    //! finds the keypoints in the image\n    CV_WRAP_AS(detect) void operator()(const Mat& image,\n                CV_OUT vector<KeyPoint>& keypoints) const;\n\n    AlgorithmInfo* info() const;\n\nprotected:\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int maxSize;\n    int responseThreshold;\n    int lineThresholdProjected;\n    int lineThresholdBinarized;\n    int suppressNonmaxSize;\n};\n\n//! detects corners using FAST algorithm by E. Rosten\nCV_EXPORTS void FAST( InputArray image, CV_OUT vector<KeyPoint>& keypoints,\n                      int threshold, bool nonmaxSuppression=true );\n\nCV_EXPORTS void FASTX( InputArray image, CV_OUT vector<KeyPoint>& keypoints,\n                      int threshold, bool nonmaxSuppression, int type );\n\nclass CV_EXPORTS_W FastFeatureDetector : public FeatureDetector\n{\npublic:\n\n    enum\n    { // Define it in old class to simplify migration to 2.5\n      TYPE_5_8 = 0, TYPE_7_12 = 1, TYPE_9_16 = 2\n    };\n\n    CV_WRAP FastFeatureDetector( int threshold=10, bool nonmaxSuppression=true );\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int threshold;\n    bool nonmaxSuppression;\n};\n\n\nclass CV_EXPORTS_W GFTTDetector : public FeatureDetector\n{\npublic:\n    CV_WRAP GFTTDetector( int maxCorners=1000, double qualityLevel=0.01, double minDistance=1,\n                          int blockSize=3, bool useHarrisDetector=false, double k=0.04 );\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int nfeatures;\n    double qualityLevel;\n    double minDistance;\n    int blockSize;\n    bool useHarrisDetector;\n    double k;\n};\n\ntypedef GFTTDetector GoodFeaturesToTrackDetector;\ntypedef StarDetector StarFeatureDetector;\n\nclass CV_EXPORTS_W SimpleBlobDetector : public FeatureDetector\n{\npublic:\n  struct CV_EXPORTS_W_SIMPLE Params\n  {\n      CV_WRAP Params();\n      CV_PROP_RW float thresholdStep;\n      CV_PROP_RW float minThreshold;\n      CV_PROP_RW float maxThreshold;\n      CV_PROP_RW size_t minRepeatability;\n      CV_PROP_RW float minDistBetweenBlobs;\n\n      CV_PROP_RW bool filterByColor;\n      CV_PROP_RW uchar blobColor;\n\n      CV_PROP_RW bool filterByArea;\n      CV_PROP_RW float minArea, maxArea;\n\n      CV_PROP_RW bool filterByCircularity;\n      CV_PROP_RW float minCircularity, maxCircularity;\n\n      CV_PROP_RW bool filterByInertia;\n      CV_PROP_RW float minInertiaRatio, maxInertiaRatio;\n\n      CV_PROP_RW bool filterByConvexity;\n      CV_PROP_RW float minConvexity, maxConvexity;\n\n      void read( const FileNode& fn );\n      void write( FileStorage& fs ) const;\n  };\n\n  CV_WRAP SimpleBlobDetector(const SimpleBlobDetector::Params &parameters = SimpleBlobDetector::Params());\n\n  virtual void read( const FileNode& fn );\n  virtual void write( FileStorage& fs ) const;\n\nprotected:\n  struct CV_EXPORTS Center\n  {\n      Point2d location;\n      double radius;\n      double confidence;\n  };\n\n  virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n  virtual void findBlobs(const Mat &image, const Mat &binaryImage, vector<Center> &centers) const;\n\n  Params params;\n  AlgorithmInfo* info() const;\n};\n\n\nclass CV_EXPORTS DenseFeatureDetector : public FeatureDetector\n{\npublic:\n    explicit DenseFeatureDetector( float initFeatureScale=1.f, int featureScaleLevels=1,\n                                   float featureScaleMul=0.1f,\n                                   int initXyStep=6, int initImgBound=0,\n                                   bool varyXyStepWithScale=true,\n                                   bool varyImgBoundWithScale=false );\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    double initFeatureScale;\n    int featureScaleLevels;\n    double featureScaleMul;\n\n    int initXyStep;\n    int initImgBound;\n\n    bool varyXyStepWithScale;\n    bool varyImgBoundWithScale;\n};\n\n/*\n * Adapts a detector to partition the source image into a grid and detect\n * points in each cell.\n */\nclass CV_EXPORTS_W GridAdaptedFeatureDetector : public FeatureDetector\n{\npublic:\n    /*\n     * detector            Detector that will be adapted.\n     * maxTotalKeypoints   Maximum count of keypoints detected on the image. Only the strongest keypoints\n     *                      will be keeped.\n     * gridRows            Grid rows count.\n     * gridCols            Grid column count.\n     */\n    CV_WRAP GridAdaptedFeatureDetector( const Ptr<FeatureDetector>& detector=0,\n                                        int maxTotalKeypoints=1000,\n                                        int gridRows=4, int gridCols=4 );\n\n    // TODO implement read/write\n    virtual bool empty() const;\n\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    Ptr<FeatureDetector> detector;\n    int maxTotalKeypoints;\n    int gridRows;\n    int gridCols;\n};\n\n/*\n * Adapts a detector to detect points over multiple levels of a Gaussian\n * pyramid. Useful for detectors that are not inherently scaled.\n */\nclass CV_EXPORTS_W PyramidAdaptedFeatureDetector : public FeatureDetector\n{\npublic:\n    // maxLevel - The 0-based index of the last pyramid layer\n    CV_WRAP PyramidAdaptedFeatureDetector( const Ptr<FeatureDetector>& detector, int maxLevel=2 );\n\n    // TODO implement read/write\n    virtual bool empty() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    Ptr<FeatureDetector> detector;\n    int maxLevel;\n};\n\n/** \\brief A feature detector parameter adjuster, this is used by the DynamicAdaptedFeatureDetector\n *  and is a wrapper for FeatureDetector that allow them to be adjusted after a detection\n */\nclass CV_EXPORTS AdjusterAdapter: public FeatureDetector\n{\npublic:\n    /** pure virtual interface\n     */\n    virtual ~AdjusterAdapter() {}\n    /** too few features were detected so, adjust the detector params accordingly\n     * \\param min the minimum number of desired features\n     * \\param n_detected the number previously detected\n     */\n    virtual void tooFew(int min, int n_detected) = 0;\n    /** too many features were detected so, adjust the detector params accordingly\n     * \\param max the maximum number of desired features\n     * \\param n_detected the number previously detected\n     */\n    virtual void tooMany(int max, int n_detected) = 0;\n    /** are params maxed out or still valid?\n     * \\return false if the parameters can't be adjusted any more\n     */\n    virtual bool good() const = 0;\n\n    virtual Ptr<AdjusterAdapter> clone() const = 0;\n\n    static Ptr<AdjusterAdapter> create( const string& detectorType );\n};\n/** \\brief an adaptively adjusting detector that iteratively detects until the desired number\n * of features are detected.\n *  Beware that this is not thread safe - as the adjustment of parameters breaks the const\n *  of the detection routine...\n *  /TODO Make this const correct and thread safe\n *\n *  sample usage:\n //will create a detector that attempts to find 100 - 110 FAST Keypoints, and will at most run\n //FAST feature detection 10 times until that number of keypoints are found\n Ptr<FeatureDetector> detector(new DynamicAdaptedFeatureDetector(new FastAdjuster(20,true),100, 110, 10));\n\n */\nclass CV_EXPORTS DynamicAdaptedFeatureDetector: public FeatureDetector\n{\npublic:\n\n    /** \\param adjuster an AdjusterAdapter that will do the detection and parameter adjustment\n     *  \\param max_features the maximum desired number of features\n     *  \\param max_iters the maximum number of times to try to adjust the feature detector params\n     *          for the FastAdjuster this can be high, but with Star or Surf this can get time consuming\n     *  \\param min_features the minimum desired features\n     */\n    DynamicAdaptedFeatureDetector( const Ptr<AdjusterAdapter>& adjuster, int min_features=400, int max_features=500, int max_iters=5 );\n\n    virtual bool empty() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\nprivate:\n    DynamicAdaptedFeatureDetector& operator=(const DynamicAdaptedFeatureDetector&);\n    DynamicAdaptedFeatureDetector(const DynamicAdaptedFeatureDetector&);\n\n    int escape_iters_;\n    int min_features_, max_features_;\n    const Ptr<AdjusterAdapter> adjuster_;\n};\n\n/**\\brief an adjust for the FAST detector. This will basically decrement or increment the\n * threshold by 1\n */\nclass CV_EXPORTS FastAdjuster: public AdjusterAdapter\n{\npublic:\n    /**\\param init_thresh the initial threshold to start with, default = 20\n     * \\param nonmax whether to use non max or not for fast feature detection\n     */\n    FastAdjuster(int init_thresh=20, bool nonmax=true, int min_thresh=1, int max_thresh=200);\n\n    virtual void tooFew(int minv, int n_detected);\n    virtual void tooMany(int maxv, int n_detected);\n    virtual bool good() const;\n\n    virtual Ptr<AdjusterAdapter> clone() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    int thresh_;\n    bool nonmax_;\n    int init_thresh_, min_thresh_, max_thresh_;\n};\n\n\n/** An adjuster for StarFeatureDetector, this one adjusts the responseThreshold for now\n * TODO find a faster way to converge the parameters for Star - use CvStarDetectorParams\n */\nclass CV_EXPORTS StarAdjuster: public AdjusterAdapter\n{\npublic:\n    StarAdjuster(double initial_thresh=30.0, double min_thresh=2., double max_thresh=200.);\n\n    virtual void tooFew(int minv, int n_detected);\n    virtual void tooMany(int maxv, int n_detected);\n    virtual bool good() const;\n\n    virtual Ptr<AdjusterAdapter> clone() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    double thresh_, init_thresh_, min_thresh_, max_thresh_;\n};\n\nclass CV_EXPORTS SurfAdjuster: public AdjusterAdapter\n{\npublic:\n    SurfAdjuster( double initial_thresh=400.f, double min_thresh=2, double max_thresh=1000 );\n\n    virtual void tooFew(int minv, int n_detected);\n    virtual void tooMany(int maxv, int n_detected);\n    virtual bool good() const;\n\n    virtual Ptr<AdjusterAdapter> clone() const;\n\nprotected:\n    virtual void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n\n    double thresh_, init_thresh_, min_thresh_, max_thresh_;\n};\n\nCV_EXPORTS Mat windowedMatchingMask( const vector<KeyPoint>& keypoints1, const vector<KeyPoint>& keypoints2,\n                                     float maxDeltaX, float maxDeltaY );\n\n\n\n/*\n * OpponentColorDescriptorExtractor\n *\n * Adapts a descriptor extractor to compute descripors in Opponent Color Space\n * (refer to van de Sande et al., CGIV 2008 \"Color Descriptors for Object Category Recognition\").\n * Input RGB image is transformed in Opponent Color Space. Then unadapted descriptor extractor\n * (set in constructor) computes descriptors on each of the three channel and concatenate\n * them into a single color descriptor.\n */\nclass CV_EXPORTS OpponentColorDescriptorExtractor : public DescriptorExtractor\n{\npublic:\n    OpponentColorDescriptorExtractor( const Ptr<DescriptorExtractor>& descriptorExtractor );\n\n    virtual void read( const FileNode& );\n    virtual void write( FileStorage& ) const;\n\n    virtual int descriptorSize() const;\n    virtual int descriptorType() const;\n\n    virtual bool empty() const;\n\nprotected:\n    virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n\n    Ptr<DescriptorExtractor> descriptorExtractor;\n};\n\n/*\n * BRIEF Descriptor\n */\nclass CV_EXPORTS BriefDescriptorExtractor : public DescriptorExtractor\n{\npublic:\n    static const int PATCH_SIZE = 48;\n    static const int KERNEL_SIZE = 9;\n\n    // bytes is a length of descriptor in bytes. It can be equal 16, 32 or 64 bytes.\n    BriefDescriptorExtractor( int bytes = 32 );\n\n    virtual void read( const FileNode& );\n    virtual void write( FileStorage& ) const;\n\n    virtual int descriptorSize() const;\n    virtual int descriptorType() const;\n\n    /// @todo read and write for brief\n\n    AlgorithmInfo* info() const;\n\nprotected:\n    virtual void computeImpl(const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const;\n\n    typedef void(*PixelTestFn)(const Mat&, const vector<KeyPoint>&, Mat&);\n\n    int bytes_;\n    PixelTestFn test_fn_;\n};\n\n\n/****************************************************************************************\\\n*                                      Distance                                          *\n\\****************************************************************************************/\n\ntemplate<typename T>\nstruct CV_EXPORTS Accumulator\n{\n    typedef T Type;\n};\n\ntemplate<> struct Accumulator<unsigned char>  { typedef float Type; };\ntemplate<> struct Accumulator<unsigned short> { typedef float Type; };\ntemplate<> struct Accumulator<char>   { typedef float Type; };\ntemplate<> struct Accumulator<short>  { typedef float Type; };\n\n/*\n * Squared Euclidean distance functor\n */\ntemplate<class T>\nstruct CV_EXPORTS SL2\n{\n    enum { normType = NORM_L2SQR };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return normL2Sqr<ValueType, ResultType>(a, b, size);\n    }\n};\n\n/*\n * Euclidean distance functor\n */\ntemplate<class T>\nstruct CV_EXPORTS L2\n{\n    enum { normType = NORM_L2 };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return (ResultType)sqrt((double)normL2Sqr<ValueType, ResultType>(a, b, size));\n    }\n};\n\n/*\n * Manhattan distance (city block distance) functor\n */\ntemplate<class T>\nstruct CV_EXPORTS L1\n{\n    enum { normType = NORM_L1 };\n    typedef T ValueType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    ResultType operator()( const T* a, const T* b, int size ) const\n    {\n        return normL1<ValueType, ResultType>(a, b, size);\n    }\n};\n\n/*\n * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor\n * bit count of A exclusive XOR'ed with B\n */\nstruct CV_EXPORTS Hamming\n{\n    enum { normType = NORM_HAMMING };\n    typedef unsigned char ValueType;\n    typedef int ResultType;\n\n    /** this will count the bits in a ^ b\n     */\n    ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const\n    {\n        return normHamming(a, b, size);\n    }\n};\n\ntypedef Hamming HammingLUT;\n\ntemplate<int cellsize> struct HammingMultilevel\n{\n    enum { normType = NORM_HAMMING + (cellsize>1) };\n    typedef unsigned char ValueType;\n    typedef int ResultType;\n\n    ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const\n    {\n        return normHamming(a, b, size, cellsize);\n    }\n};\n\n/****************************************************************************************\\\n*                                      DMatch                                            *\n\\****************************************************************************************/\n/*\n * Struct for matching: query descriptor index, train descriptor index, train image index and distance between descriptors.\n */\nstruct CV_EXPORTS_W_SIMPLE DMatch\n{\n    CV_WRAP DMatch() : queryIdx(-1), trainIdx(-1), imgIdx(-1), distance(FLT_MAX) {}\n    CV_WRAP DMatch( int _queryIdx, int _trainIdx, float _distance ) :\n            queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(-1), distance(_distance) {}\n    CV_WRAP DMatch( int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) :\n            queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(_imgIdx), distance(_distance) {}\n\n    CV_PROP_RW int queryIdx; // query descriptor index\n    CV_PROP_RW int trainIdx; // train descriptor index\n    CV_PROP_RW int imgIdx;   // train image index\n\n    CV_PROP_RW float distance;\n\n    // less is better\n    bool operator<( const DMatch &m ) const\n    {\n        return distance < m.distance;\n    }\n};\n\n/****************************************************************************************\\\n*                                  DescriptorMatcher                                     *\n\\****************************************************************************************/\n/*\n * Abstract base class for matching two sets of descriptors.\n */\nclass CV_EXPORTS_W DescriptorMatcher : public Algorithm\n{\npublic:\n    virtual ~DescriptorMatcher();\n\n    /*\n     * Add descriptors to train descriptor collection.\n     * descriptors      Descriptors to add. Each descriptors[i] is a descriptors set from one image.\n     */\n    CV_WRAP virtual void add( const vector<Mat>& descriptors );\n    /*\n     * Get train descriptors collection.\n     */\n    CV_WRAP const vector<Mat>& getTrainDescriptors() const;\n    /*\n     * Clear train descriptors collection.\n     */\n    CV_WRAP virtual void clear();\n\n    /*\n     * Return true if there are not train descriptors in collection.\n     */\n    CV_WRAP virtual bool empty() const;\n    /*\n     * Return true if the matcher supports mask in match methods.\n     */\n    CV_WRAP virtual bool isMaskSupported() const = 0;\n\n    /*\n     * Train matcher (e.g. train flann index).\n     * In all methods to match the method train() is run every time before matching.\n     * Some descriptor matchers (e.g. BruteForceMatcher) have empty implementation\n     * of this method, other matchers really train their inner structures\n     * (e.g. FlannBasedMatcher trains flann::Index). So nonempty implementation\n     * of train() should check the class object state and do traing/retraining\n     * only if the state requires that (e.g. FlannBasedMatcher trains flann::Index\n     * if it has not trained yet or if new descriptors have been added to the train\n     * collection).\n     */\n    CV_WRAP virtual void train();\n    /*\n     * Group of methods to match descriptors from image pair.\n     * Method train() is run in this methods.\n     */\n    // Find one best match for each query descriptor (if mask is empty).\n    CV_WRAP void match( const Mat& queryDescriptors, const Mat& trainDescriptors,\n                CV_OUT vector<DMatch>& matches, const Mat& mask=Mat() ) const;\n    // Find k best matches for each query descriptor (in increasing order of distances).\n    // compactResult is used when mask is not empty. If compactResult is false matches\n    // vector will have the same size as queryDescriptors rows. If compactResult is true\n    // matches vector will not contain matches for fully masked out query descriptors.\n    CV_WRAP void knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors,\n                   CV_OUT vector<vector<DMatch> >& matches, int k,\n                   const Mat& mask=Mat(), bool compactResult=false ) const;\n    // Find best matches for each query descriptor which have distance less than\n    // maxDistance (in increasing order of distances).\n    void radiusMatch( const Mat& queryDescriptors, const Mat& trainDescriptors,\n                      vector<vector<DMatch> >& matches, float maxDistance,\n                      const Mat& mask=Mat(), bool compactResult=false ) const;\n    /*\n     * Group of methods to match descriptors from one image to image set.\n     * See description of similar methods for matching image pair above.\n     */\n    CV_WRAP void match( const Mat& queryDescriptors, CV_OUT vector<DMatch>& matches,\n                const vector<Mat>& masks=vector<Mat>() );\n    CV_WRAP void knnMatch( const Mat& queryDescriptors, CV_OUT vector<vector<DMatch> >& matches, int k,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n    void radiusMatch( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\n                   const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n\n    // Reads matcher object from a file node\n    virtual void read( const FileNode& );\n    // Writes matcher object to a file storage\n    virtual void write( FileStorage& ) const;\n\n    // Clone the matcher. If emptyTrainData is false the method create deep copy of the object, i.e. copies\n    // both parameters and train data. If emptyTrainData is true the method create object copy with current parameters\n    // but with empty train data.\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const = 0;\n\n    CV_WRAP static Ptr<DescriptorMatcher> create( const string& descriptorMatcherType );\nprotected:\n    /*\n     * Class to work with descriptors from several images as with one merged matrix.\n     * It is used e.g. in FlannBasedMatcher.\n     */\n    class CV_EXPORTS DescriptorCollection\n    {\n    public:\n        DescriptorCollection();\n        DescriptorCollection( const DescriptorCollection& collection );\n        virtual ~DescriptorCollection();\n\n        // Vector of matrices \"descriptors\" will be merged to one matrix \"mergedDescriptors\" here.\n        void set( const vector<Mat>& descriptors );\n        virtual void clear();\n\n        const Mat& getDescriptors() const;\n        const Mat getDescriptor( int imgIdx, int localDescIdx ) const;\n        const Mat getDescriptor( int globalDescIdx ) const;\n        void getLocalIdx( int globalDescIdx, int& imgIdx, int& localDescIdx ) const;\n\n        int size() const;\n\n    protected:\n        Mat mergedDescriptors;\n        vector<int> startIdxs;\n    };\n\n    // In fact the matching is implemented only by the following two methods. These methods suppose\n    // that the class object has been trained already. Public match methods call these methods\n    // after calling train().\n    virtual void knnMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, int k,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false ) = 0;\n    virtual void radiusMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false ) = 0;\n\n    static bool isPossibleMatch( const Mat& mask, int queryIdx, int trainIdx );\n    static bool isMaskedOut( const vector<Mat>& masks, int queryIdx );\n\n    static Mat clone_op( Mat m ) { return m.clone(); }\n    void checkMasks( const vector<Mat>& masks, int queryDescriptorsCount ) const;\n\n    // Collection of descriptors from train images.\n    vector<Mat> trainDescCollection;\n};\n\n/*\n * Brute-force descriptor matcher.\n *\n * For each descriptor in the first set, this matcher finds the closest\n * descriptor in the second set by trying each one.\n *\n * For efficiency, BruteForceMatcher is templated on the distance metric.\n * For float descriptors, a common choice would be cv::L2<float>.\n */\nclass CV_EXPORTS_W BFMatcher : public DescriptorMatcher\n{\npublic:\n    CV_WRAP BFMatcher( int normType=NORM_L2, bool crossCheck=false );\n    virtual ~BFMatcher() {}\n\n    virtual bool isMaskSupported() const { return true; }\n\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\n    AlgorithmInfo* info() const;\nprotected:\n    virtual void knnMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, int k,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n    virtual void radiusMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\n           const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n\n    int normType;\n    bool crossCheck;\n};\n\n\n/*\n * Flann based matcher\n */\nclass CV_EXPORTS_W FlannBasedMatcher : public DescriptorMatcher\n{\npublic:\n    CV_WRAP FlannBasedMatcher( const Ptr<flann::IndexParams>& indexParams=new flann::KDTreeIndexParams(),\n                       const Ptr<flann::SearchParams>& searchParams=new flann::SearchParams() );\n\n    virtual void add( const vector<Mat>& descriptors );\n    virtual void clear();\n\n    // Reads matcher object from a file node\n    virtual void read( const FileNode& );\n    // Writes matcher object to a file storage\n    virtual void write( FileStorage& ) const;\n\n    virtual void train();\n    virtual bool isMaskSupported() const;\n\n    virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\n    AlgorithmInfo* info() const;\nprotected:\n    static void convertToDMatches( const DescriptorCollection& descriptors,\n                                   const Mat& indices, const Mat& distances,\n                                   vector<vector<DMatch> >& matches );\n\n    virtual void knnMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, int k,\n                   const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n    virtual void radiusMatchImpl( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\n                   const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n\n    Ptr<flann::IndexParams> indexParams;\n    Ptr<flann::SearchParams> searchParams;\n    Ptr<flann::Index> flannIndex;\n\n    DescriptorCollection mergedDescriptors;\n    int addedDescCount;\n};\n\n/****************************************************************************************\\\n*                                GenericDescriptorMatcher                                *\n\\****************************************************************************************/\n/*\n *   Abstract interface for a keypoint descriptor and matcher\n */\nclass GenericDescriptorMatcher;\ntypedef GenericDescriptorMatcher GenericDescriptorMatch;\n\nclass CV_EXPORTS GenericDescriptorMatcher\n{\npublic:\n    GenericDescriptorMatcher();\n    virtual ~GenericDescriptorMatcher();\n\n    /*\n     * Add train collection: images and keypoints from them.\n     * images       A set of train images.\n     * ketpoints    Keypoint collection that have been detected on train images.\n     *\n     * Keypoints for which a descriptor cannot be computed are removed. Such keypoints\n     * must be filtered in this method befor adding keypoints to train collection \"trainPointCollection\".\n     * If inheritor class need perform such prefiltering the method add() must be overloaded.\n     * In the other class methods programmer has access to the train keypoints by a constant link.\n     */\n    virtual void add( const vector<Mat>& images,\n                      vector<vector<KeyPoint> >& keypoints );\n\n    const vector<Mat>& getTrainImages() const;\n    const vector<vector<KeyPoint> >& getTrainKeypoints() const;\n\n    /*\n     * Clear images and keypoints storing in train collection.\n     */\n    virtual void clear();\n    /*\n     * Returns true if matcher supports mask to match descriptors.\n     */\n    virtual bool isMaskSupported() = 0;\n    /*\n     * Train some inner structures (e.g. flann index or decision trees).\n     * train() methods is run every time in matching methods. So the method implementation\n     * should has a check whether these inner structures need be trained/retrained or not.\n     */\n    virtual void train();\n\n    /*\n     * Classifies query keypoints.\n     * queryImage    The query image\n     * queryKeypoints   Keypoints from the query image\n     * trainImage    The train image\n     * trainKeypoints   Keypoints from the train image\n     */\n    // Classify keypoints from query image under one train image.\n    void classify( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                           const Mat& trainImage, vector<KeyPoint>& trainKeypoints ) const;\n    // Classify keypoints from query image under train image collection.\n    void classify( const Mat& queryImage, vector<KeyPoint>& queryKeypoints );\n\n    /*\n     * Group of methods to match keypoints from image pair.\n     * Keypoints for which a descriptor cannot be computed are removed.\n     * train() method is called here.\n     */\n    // Find one best match for each query descriptor (if mask is empty).\n    void match( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                const Mat& trainImage, vector<KeyPoint>& trainKeypoints,\n                vector<DMatch>& matches, const Mat& mask=Mat() ) const;\n    // Find k best matches for each query keypoint (in increasing order of distances).\n    // compactResult is used when mask is not empty. If compactResult is false matches\n    // vector will have the same size as queryDescriptors rows.\n    // If compactResult is true matches vector will not contain matches for fully masked out query descriptors.\n    void knnMatch( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                   const Mat& trainImage, vector<KeyPoint>& trainKeypoints,\n                   vector<vector<DMatch> >& matches, int k,\n                   const Mat& mask=Mat(), bool compactResult=false ) const;\n    // Find best matches for each query descriptor which have distance less than maxDistance (in increasing order of distances).\n    void radiusMatch( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                      const Mat& trainImage, vector<KeyPoint>& trainKeypoints,\n                      vector<vector<DMatch> >& matches, float maxDistance,\n                      const Mat& mask=Mat(), bool compactResult=false ) const;\n    /*\n     * Group of methods to match keypoints from one image to image set.\n     * See description of similar methods for matching image pair above.\n     */\n    void match( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                vector<DMatch>& matches, const vector<Mat>& masks=vector<Mat>() );\n    void knnMatch( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                   vector<vector<DMatch> >& matches, int k,\n                   const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n    void radiusMatch( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                      vector<vector<DMatch> >& matches, float maxDistance,\n                      const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\n\n    // Reads matcher object from a file node\n    virtual void read( const FileNode& fn );\n    // Writes matcher object to a file storage\n    virtual void write( FileStorage& fs ) const;\n\n    // Return true if matching object is empty (e.g. feature detector or descriptor matcher are empty)\n    virtual bool empty() const;\n\n    // Clone the matcher. If emptyTrainData is false the method create deep copy of the object, i.e. copies\n    // both parameters and train data. If emptyTrainData is true the method create object copy with current parameters\n    // but with empty train data.\n    virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const = 0;\n\n    static Ptr<GenericDescriptorMatcher> create( const string& genericDescritptorMatcherType,\n                                                 const string &paramsFilename=string() );\n\nprotected:\n    // In fact the matching is implemented only by the following two methods. These methods suppose\n    // that the class object has been trained already. Public match methods call these methods\n    // after calling train().\n    virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                               vector<vector<DMatch> >& matches, int k,\n                               const vector<Mat>& masks, bool compactResult ) = 0;\n    virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                                  vector<vector<DMatch> >& matches, float maxDistance,\n                                  const vector<Mat>& masks, bool compactResult ) = 0;\n    /*\n     * A storage for sets of keypoints together with corresponding images and class IDs\n     */\n    class CV_EXPORTS KeyPointCollection\n    {\n    public:\n        KeyPointCollection();\n        KeyPointCollection( const KeyPointCollection& collection );\n        void add( const vector<Mat>& images, const vector<vector<KeyPoint> >& keypoints );\n        void clear();\n\n        // Returns the total number of keypoints in the collection\n        size_t keypointCount() const;\n        size_t imageCount() const;\n\n        const vector<vector<KeyPoint> >& getKeypoints() const;\n        const vector<KeyPoint>& getKeypoints( int imgIdx ) const;\n        const KeyPoint& getKeyPoint( int imgIdx, int localPointIdx ) const;\n        const KeyPoint& getKeyPoint( int globalPointIdx ) const;\n        void getLocalIdx( int globalPointIdx, int& imgIdx, int& localPointIdx ) const;\n\n        const vector<Mat>& getImages() const;\n        const Mat& getImage( int imgIdx ) const;\n\n    protected:\n        int pointCount;\n\n        vector<Mat> images;\n        vector<vector<KeyPoint> > keypoints;\n        // global indices of the first points in each image, startIndices.size() = keypoints.size()\n        vector<int> startIndices;\n\n    private:\n        static Mat clone_op( Mat m ) { return m.clone(); }\n    };\n\n    KeyPointCollection trainPointCollection;\n};\n\n\n/****************************************************************************************\\\n*                                VectorDescriptorMatcher                                 *\n\\****************************************************************************************/\n\n/*\n *  A class used for matching descriptors that can be described as vectors in a finite-dimensional space\n */\nclass VectorDescriptorMatcher;\ntypedef VectorDescriptorMatcher VectorDescriptorMatch;\n\nclass CV_EXPORTS VectorDescriptorMatcher : public GenericDescriptorMatcher\n{\npublic:\n    VectorDescriptorMatcher( const Ptr<DescriptorExtractor>& extractor, const Ptr<DescriptorMatcher>& matcher );\n    virtual ~VectorDescriptorMatcher();\n\n    virtual void add( const vector<Mat>& imgCollection,\n                      vector<vector<KeyPoint> >& pointCollection );\n\n    virtual void clear();\n\n    virtual void train();\n\n    virtual bool isMaskSupported();\n\n    virtual void read( const FileNode& fn );\n    virtual void write( FileStorage& fs ) const;\n    virtual bool empty() const;\n\n    virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\nprotected:\n    virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                               vector<vector<DMatch> >& matches, int k,\n                               const vector<Mat>& masks, bool compactResult );\n    virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                                  vector<vector<DMatch> >& matches, float maxDistance,\n                                  const vector<Mat>& masks, bool compactResult );\n\n    Ptr<DescriptorExtractor> extractor;\n    Ptr<DescriptorMatcher> matcher;\n};\n\n/****************************************************************************************\\\n*                                   Drawing functions                                    *\n\\****************************************************************************************/\nstruct CV_EXPORTS DrawMatchesFlags\n{\n    enum{ DEFAULT = 0, // Output image matrix will be created (Mat::create),\n                       // i.e. existing memory of output image may be reused.\n                       // Two source image, matches and single keypoints will be drawn.\n                       // For each keypoint only the center point will be drawn (without\n                       // the circle around keypoint with keypoint size and orientation).\n          DRAW_OVER_OUTIMG = 1, // Output image matrix will not be created (Mat::create).\n                                // Matches will be drawn on existing content of output image.\n          NOT_DRAW_SINGLE_POINTS = 2, // Single keypoints will not be drawn.\n          DRAW_RICH_KEYPOINTS = 4 // For each keypoint the circle around keypoint with keypoint size and\n                                  // orientation will be drawn.\n        };\n};\n\n// Draw keypoints.\nCV_EXPORTS_W void drawKeypoints( const Mat& image, const vector<KeyPoint>& keypoints, CV_OUT Mat& outImage,\n                               const Scalar& color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT );\n\n// Draws matches of keypints from two images on output image.\nCV_EXPORTS void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoints1,\n                             const Mat& img2, const vector<KeyPoint>& keypoints2,\n                             const vector<DMatch>& matches1to2, Mat& outImg,\n                             const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),\n                             const vector<char>& matchesMask=vector<char>(), int flags=DrawMatchesFlags::DEFAULT );\n\nCV_EXPORTS void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoints1,\n                             const Mat& img2, const vector<KeyPoint>& keypoints2,\n                             const vector<vector<DMatch> >& matches1to2, Mat& outImg,\n                             const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),\n                             const vector<vector<char> >& matchesMask=vector<vector<char> >(), int flags=DrawMatchesFlags::DEFAULT );\n\n/****************************************************************************************\\\n*   Functions to evaluate the feature detectors and [generic] descriptor extractors      *\n\\****************************************************************************************/\n\nCV_EXPORTS void evaluateFeatureDetector( const Mat& img1, const Mat& img2, const Mat& H1to2,\n                                         vector<KeyPoint>* keypoints1, vector<KeyPoint>* keypoints2,\n                                         float& repeatability, int& correspCount,\n                                         const Ptr<FeatureDetector>& fdetector=Ptr<FeatureDetector>() );\n\nCV_EXPORTS void computeRecallPrecisionCurve( const vector<vector<DMatch> >& matches1to2,\n                                             const vector<vector<uchar> >& correctMatches1to2Mask,\n                                             vector<Point2f>& recallPrecisionCurve );\n\nCV_EXPORTS float getRecall( const vector<Point2f>& recallPrecisionCurve, float l_precision );\nCV_EXPORTS int getNearestPoint( const vector<Point2f>& recallPrecisionCurve, float l_precision );\n\nCV_EXPORTS void evaluateGenericDescriptorMatcher( const Mat& img1, const Mat& img2, const Mat& H1to2,\n                                                  vector<KeyPoint>& keypoints1, vector<KeyPoint>& keypoints2,\n                                                  vector<vector<DMatch> >* matches1to2, vector<vector<uchar> >* correctMatches1to2Mask,\n                                                  vector<Point2f>& recallPrecisionCurve,\n                                                  const Ptr<GenericDescriptorMatcher>& dmatch=Ptr<GenericDescriptorMatcher>() );\n\n\n/****************************************************************************************\\\n*                                     Bag of visual words                                *\n\\****************************************************************************************/\n/*\n * Abstract base class for training of a 'bag of visual words' vocabulary from a set of descriptors\n */\nclass CV_EXPORTS BOWTrainer\n{\npublic:\n    BOWTrainer();\n    virtual ~BOWTrainer();\n\n    void add( const Mat& descriptors );\n    const vector<Mat>& getDescriptors() const;\n    int descripotorsCount() const;\n\n    virtual void clear();\n\n    /*\n     * Train visual words vocabulary, that is cluster training descriptors and\n     * compute cluster centers.\n     * Returns cluster centers.\n     *\n     * descriptors      Training descriptors computed on images keypoints.\n     */\n    virtual Mat cluster() const = 0;\n    virtual Mat cluster( const Mat& descriptors ) const = 0;\n\nprotected:\n    vector<Mat> descriptors;\n    int size;\n};\n\n/*\n * This is BOWTrainer using cv::kmeans to get vocabulary.\n */\nclass CV_EXPORTS BOWKMeansTrainer : public BOWTrainer\n{\npublic:\n    BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(),\n                      int attempts=3, int flags=KMEANS_PP_CENTERS );\n    virtual ~BOWKMeansTrainer();\n\n    // Returns trained vocabulary (i.e. cluster centers).\n    virtual Mat cluster() const;\n    virtual Mat cluster( const Mat& descriptors ) const;\n\nprotected:\n\n    int clusterCount;\n    TermCriteria termcrit;\n    int attempts;\n    int flags;\n};\n\n/*\n * Class to compute image descriptor using bag of visual words.\n */\nclass CV_EXPORTS BOWImgDescriptorExtractor\n{\npublic:\n    BOWImgDescriptorExtractor( const Ptr<DescriptorExtractor>& dextractor,\n                               const Ptr<DescriptorMatcher>& dmatcher );\n    virtual ~BOWImgDescriptorExtractor();\n\n    void setVocabulary( const Mat& vocabulary );\n    const Mat& getVocabulary() const;\n    void compute( const Mat& image, vector<KeyPoint>& keypoints, Mat& imgDescriptor,\n                  vector<vector<int> >* pointIdxsOfClusters=0, Mat* descriptors=0 );\n    // compute() is not constant because DescriptorMatcher::match is not constant\n\n    int descriptorSize() const;\n    int descriptorType() const;\n\nprotected:\n    Mat vocabulary;\n    Ptr<DescriptorExtractor> dextractor;\n    Ptr<DescriptorMatcher> dmatcher;\n};\n\n} /* namespace cv */\n\n#endif /* __cplusplus */\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/all_indices.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_ALL_INDICES_H_\n#define OPENCV_FLANN_ALL_INDICES_H_\n\n#include \"general.h\"\n\n#include \"nn_index.h\"\n#include \"kdtree_index.h\"\n#include \"kdtree_single_index.h\"\n#include \"kmeans_index.h\"\n#include \"composite_index.h\"\n#include \"linear_index.h\"\n#include \"hierarchical_clustering_index.h\"\n#include \"lsh_index.h\"\n#include \"autotuned_index.h\"\n\n\nnamespace cvflann\n{\n\ntemplate<typename KDTreeCapability, typename VectorSpace, typename Distance>\nstruct index_creator\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KDTREE_SINGLE:\n            nnIndex = new KDTreeSingleIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KDTREE:\n            nnIndex = new KDTreeIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KMEANS:\n            nnIndex = new KMeansIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_COMPOSITE:\n            nnIndex = new CompositeIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_AUTOTUNED:\n            nnIndex = new AutotunedIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename VectorSpace, typename Distance>\nstruct index_creator<False,VectorSpace,Distance>\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_KMEANS:\n            nnIndex = new KMeansIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename Distance>\nstruct index_creator<False,False,Distance>\n{\n    static NNIndex<Distance>* create(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params, \"algorithm\");\n\n        NNIndex<Distance>* nnIndex;\n        switch (index_type) {\n        case FLANN_INDEX_LINEAR:\n            nnIndex = new LinearIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_HIERARCHICAL:\n            nnIndex = new HierarchicalClusteringIndex<Distance>(dataset, params, distance);\n            break;\n        case FLANN_INDEX_LSH:\n            nnIndex = new LshIndex<Distance>(dataset, params, distance);\n            break;\n        default:\n            throw FLANNException(\"Unknown index type\");\n        }\n\n        return nnIndex;\n    }\n};\n\ntemplate<typename Distance>\nNNIndex<Distance>* create_index_by_type(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance)\n{\n    return index_creator<typename Distance::is_kdtree_distance,\n                         typename Distance::is_vector_space_distance,\n                         Distance>::create(dataset, params,distance);\n}\n\n}\n\n#endif /* OPENCV_FLANN_ALL_INDICES_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/allocator.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_ALLOCATOR_H_\n#define OPENCV_FLANN_ALLOCATOR_H_\n\n#include <stdlib.h>\n#include <stdio.h>\n\n\nnamespace cvflann\n{\n\n/**\n * Allocates (using C's malloc) a generic type T.\n *\n * Params:\n *     count = number of instances to allocate.\n * Returns: pointer (of type T*) to memory buffer\n */\ntemplate <typename T>\nT* allocate(size_t count = 1)\n{\n    T* mem = (T*) ::malloc(sizeof(T)*count);\n    return mem;\n}\n\n\n/**\n * Pooled storage allocator\n *\n * The following routines allow for the efficient allocation of storage in\n * small chunks from a specified pool.  Rather than allowing each structure\n * to be freed individually, an entire pool of storage is freed at once.\n * This method has two advantages over just using malloc() and free().  First,\n * it is far more efficient for allocating small objects, as there is\n * no overhead for remembering all the information needed to free each\n * object or consolidating fragmented memory.  Second, the decision about\n * how long to keep an object is made at the time of allocation, and there\n * is no need to track down all the objects to free them.\n *\n */\n\nconst size_t     WORDSIZE=16;\nconst  size_t     BLOCKSIZE=8192;\n\nclass PooledAllocator\n{\n    /* We maintain memory alignment to word boundaries by requiring that all\n        allocations be in multiples of the machine wordsize.  */\n    /* Size of machine word in bytes.  Must be power of 2. */\n    /* Minimum number of bytes requested at a time from\tthe system.  Must be multiple of WORDSIZE. */\n\n\n    int     remaining;  /* Number of bytes left in current block of storage. */\n    void*   base;     /* Pointer to base of current block of storage. */\n    void*   loc;      /* Current location in block to next allocate memory. */\n    int     blocksize;\n\n\npublic:\n    int     usedMemory;\n    int     wastedMemory;\n\n    /**\n        Default constructor. Initializes a new pool.\n     */\n    PooledAllocator(int blockSize = BLOCKSIZE)\n    {\n        blocksize = blockSize;\n        remaining = 0;\n        base = NULL;\n\n        usedMemory = 0;\n        wastedMemory = 0;\n    }\n\n    /**\n     * Destructor. Frees all the memory allocated in this pool.\n     */\n    ~PooledAllocator()\n    {\n        void* prev;\n\n        while (base != NULL) {\n            prev = *((void**) base); /* Get pointer to prev block. */\n            ::free(base);\n            base = prev;\n        }\n    }\n\n    /**\n     * Returns a pointer to a piece of new memory of the given size in bytes\n     * allocated from the pool.\n     */\n    void* allocateMemory(int size)\n    {\n        int blockSize;\n\n        /* Round size up to a multiple of wordsize.  The following expression\n            only works for WORDSIZE that is a power of 2, by masking last bits of\n            incremented size to zero.\n         */\n        size = (size + (WORDSIZE - 1)) & ~(WORDSIZE - 1);\n\n        /* Check whether a new block must be allocated.  Note that the first word\n            of a block is reserved for a pointer to the previous block.\n         */\n        if (size > remaining) {\n\n            wastedMemory += remaining;\n\n            /* Allocate new storage. */\n            blockSize = (size + sizeof(void*) + (WORDSIZE-1) > BLOCKSIZE) ?\n                        size + sizeof(void*) + (WORDSIZE-1) : BLOCKSIZE;\n\n            // use the standard C malloc to allocate memory\n            void* m = ::malloc(blockSize);\n            if (!m) {\n                fprintf(stderr,\"Failed to allocate memory.\\n\");\n                return NULL;\n            }\n\n            /* Fill first word of new block with pointer to previous block. */\n            ((void**) m)[0] = base;\n            base = m;\n\n            int shift = 0;\n            //int shift = (WORDSIZE - ( (((size_t)m) + sizeof(void*)) & (WORDSIZE-1))) & (WORDSIZE-1);\n\n            remaining = blockSize - sizeof(void*) - shift;\n            loc = ((char*)m + sizeof(void*) + shift);\n        }\n        void* rloc = loc;\n        loc = (char*)loc + size;\n        remaining -= size;\n\n        usedMemory += size;\n\n        return rloc;\n    }\n\n    /**\n     * Allocates (using this pool) a generic type T.\n     *\n     * Params:\n     *     count = number of instances to allocate.\n     * Returns: pointer (of type T*) to memory buffer\n     */\n    template <typename T>\n    T* allocate(size_t count = 1)\n    {\n        T* mem = (T*) this->allocateMemory((int)(sizeof(T)*count));\n        return mem;\n    }\n\n};\n\n}\n\n#endif //OPENCV_FLANN_ALLOCATOR_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/any.h",
    "content": "#ifndef OPENCV_FLANN_ANY_H_\n#define OPENCV_FLANN_ANY_H_\n/*\n * (C) Copyright Christopher Diggins 2005-2011\n * (C) Copyright Pablo Aguilar 2005\n * (C) Copyright Kevlin Henney 2001\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt\n *\n * Adapted for FLANN by Marius Muja\n */\n\n#include \"defines.h\"\n#include <stdexcept>\n#include <ostream>\n#include <typeinfo>\n\nnamespace cvflann\n{\n\nnamespace anyimpl\n{\n\nstruct bad_any_cast\n{\n};\n\nstruct empty_any\n{\n};\n\ninline std::ostream& operator <<(std::ostream& out, const empty_any&)\n{\n    out << \"[empty_any]\";\n    return out;\n}\n\nstruct base_any_policy\n{\n    virtual void static_delete(void** x) = 0;\n    virtual void copy_from_value(void const* src, void** dest) = 0;\n    virtual void clone(void* const* src, void** dest) = 0;\n    virtual void move(void* const* src, void** dest) = 0;\n    virtual void* get_value(void** src) = 0;\n    virtual ::size_t get_size() = 0;\n    virtual const std::type_info& type() = 0;\n    virtual void print(std::ostream& out, void* const* src) = 0;\n\n#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY\n    virtual ~base_any_policy() {}\n#endif\n};\n\ntemplate<typename T>\nstruct typed_base_any_policy : base_any_policy\n{\n    virtual ::size_t get_size() { return sizeof(T); }\n    virtual const std::type_info& type() { return typeid(T); }\n\n};\n\ntemplate<typename T>\nstruct small_any_policy : typed_base_any_policy<T>\n{\n    virtual void static_delete(void**) { }\n    virtual void copy_from_value(void const* src, void** dest)\n    {\n        new (dest) T(* reinterpret_cast<T const*>(src));\n    }\n    virtual void clone(void* const* src, void** dest) { *dest = *src; }\n    virtual void move(void* const* src, void** dest) { *dest = *src; }\n    virtual void* get_value(void** src) { return reinterpret_cast<void*>(src); }\n    virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast<T const*>(src); }\n};\n\ntemplate<typename T>\nstruct big_any_policy : typed_base_any_policy<T>\n{\n    virtual void static_delete(void** x)\n    {\n        if (* x) delete (* reinterpret_cast<T**>(x)); *x = NULL;\n    }\n    virtual void copy_from_value(void const* src, void** dest)\n    {\n        *dest = new T(*reinterpret_cast<T const*>(src));\n    }\n    virtual void clone(void* const* src, void** dest)\n    {\n        *dest = new T(**reinterpret_cast<T* const*>(src));\n    }\n    virtual void move(void* const* src, void** dest)\n    {\n        (*reinterpret_cast<T**>(dest))->~T();\n        **reinterpret_cast<T**>(dest) = **reinterpret_cast<T* const*>(src);\n    }\n    virtual void* get_value(void** src) { return *src; }\n    virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast<T const*>(*src); }\n};\n\ntemplate<> inline void big_any_policy<flann_centers_init_t>::print(std::ostream& out, void* const* src)\n{\n    out << int(*reinterpret_cast<flann_centers_init_t const*>(*src));\n}\n\ntemplate<> inline void big_any_policy<flann_algorithm_t>::print(std::ostream& out, void* const* src)\n{\n    out << int(*reinterpret_cast<flann_algorithm_t const*>(*src));\n}\n\ntemplate<typename T>\nstruct choose_policy\n{\n    typedef big_any_policy<T> type;\n};\n\ntemplate<typename T>\nstruct choose_policy<T*>\n{\n    typedef small_any_policy<T*> type;\n};\n\nstruct any;\n\n/// Choosing the policy for an any type is illegal, but should never happen.\n/// This is designed to throw a compiler error.\ntemplate<>\nstruct choose_policy<any>\n{\n    typedef void type;\n};\n\n/// Specializations for small types.\n#define SMALL_POLICY(TYPE) \\\n    template<> \\\n    struct choose_policy<TYPE> { typedef small_any_policy<TYPE> type; \\\n    }\n\nSMALL_POLICY(signed char);\nSMALL_POLICY(unsigned char);\nSMALL_POLICY(signed short);\nSMALL_POLICY(unsigned short);\nSMALL_POLICY(signed int);\nSMALL_POLICY(unsigned int);\nSMALL_POLICY(signed long);\nSMALL_POLICY(unsigned long);\nSMALL_POLICY(float);\nSMALL_POLICY(bool);\n\n#undef SMALL_POLICY\n\n/// This function will return a different policy for each type.\ntemplate<typename T>\nbase_any_policy* get_policy()\n{\n    static typename choose_policy<T>::type policy;\n    return &policy;\n}\n} // namespace anyimpl\n\nstruct any\n{\nprivate:\n    // fields\n    anyimpl::base_any_policy* policy;\n    void* object;\n\npublic:\n    /// Initializing constructor.\n    template <typename T>\n    any(const T& x)\n        : policy(anyimpl::get_policy<anyimpl::empty_any>()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Empty constructor.\n    any()\n        : policy(anyimpl::get_policy<anyimpl::empty_any>()), object(NULL)\n    { }\n\n    /// Special initializing constructor for string literals.\n    any(const char* x)\n        : policy(anyimpl::get_policy<anyimpl::empty_any>()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Copy constructor.\n    any(const any& x)\n        : policy(anyimpl::get_policy<anyimpl::empty_any>()), object(NULL)\n    {\n        assign(x);\n    }\n\n    /// Destructor.\n    ~any()\n    {\n        policy->static_delete(&object);\n    }\n\n    /// Assignment function from another any.\n    any& assign(const any& x)\n    {\n        reset();\n        policy = x.policy;\n        policy->clone(&x.object, &object);\n        return *this;\n    }\n\n    /// Assignment function.\n    template <typename T>\n    any& assign(const T& x)\n    {\n        reset();\n        policy = anyimpl::get_policy<T>();\n        policy->copy_from_value(&x, &object);\n        return *this;\n    }\n\n    /// Assignment operator.\n    template<typename T>\n    any& operator=(const T& x)\n    {\n        return assign(x);\n    }\n\n    /// Assignment operator, specialed for literal strings.\n    /// They have types like const char [6] which don't work as expected.\n    any& operator=(const char* x)\n    {\n        return assign(x);\n    }\n\n    /// Utility functions\n    any& swap(any& x)\n    {\n        std::swap(policy, x.policy);\n        std::swap(object, x.object);\n        return *this;\n    }\n\n    /// Cast operator. You can only cast to the original type.\n    template<typename T>\n    T& cast()\n    {\n        if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast();\n        T* r = reinterpret_cast<T*>(policy->get_value(&object));\n        return *r;\n    }\n\n    /// Cast operator. You can only cast to the original type.\n    template<typename T>\n    const T& cast() const\n    {\n        if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast();\n        T* r = reinterpret_cast<T*>(policy->get_value(const_cast<void **>(&object)));\n        return *r;\n    }\n\n    /// Returns true if the any contains no value.\n    bool empty() const\n    {\n        return policy->type() == typeid(anyimpl::empty_any);\n    }\n\n    /// Frees any allocated memory, and sets the value to NULL.\n    void reset()\n    {\n        policy->static_delete(&object);\n        policy = anyimpl::get_policy<anyimpl::empty_any>();\n    }\n\n    /// Returns true if the two types are the same.\n    bool compatible(const any& x) const\n    {\n        return policy->type() == x.policy->type();\n    }\n\n    /// Returns if the type is compatible with the policy\n    template<typename T>\n    bool has_type()\n    {\n        return policy->type() == typeid(T);\n    }\n\n    const std::type_info& type() const\n    {\n        return policy->type();\n    }\n\n    friend std::ostream& operator <<(std::ostream& out, const any& any_val);\n};\n\ninline std::ostream& operator <<(std::ostream& out, const any& any_val)\n{\n    any_val.policy->print(out,&any_val.object);\n    return out;\n}\n\n}\n\n#endif // OPENCV_FLANN_ANY_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/autotuned_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n#ifndef OPENCV_FLANN_AUTOTUNED_INDEX_H_\n#define OPENCV_FLANN_AUTOTUNED_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"ground_truth.h\"\n#include \"index_testing.h\"\n#include \"sampling.h\"\n#include \"kdtree_index.h\"\n#include \"kdtree_single_index.h\"\n#include \"kmeans_index.h\"\n#include \"composite_index.h\"\n#include \"linear_index.h\"\n#include \"logger.h\"\n\nnamespace cvflann\n{\n\ntemplate<typename Distance>\nNNIndex<Distance>* create_index_by_type(const Matrix<typename Distance::ElementType>& dataset, const IndexParams& params, const Distance& distance);\n\n\nstruct AutotunedIndexParams : public IndexParams\n{\n    AutotunedIndexParams(float target_precision = 0.8, float build_weight = 0.01, float memory_weight = 0, float sample_fraction = 0.1)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_AUTOTUNED;\n        // precision desired (used for autotuning, -1 otherwise)\n        (*this)[\"target_precision\"] = target_precision;\n        // build tree time weighting factor\n        (*this)[\"build_weight\"] = build_weight;\n        // index memory weighting factor\n        (*this)[\"memory_weight\"] = memory_weight;\n        // what fraction of the dataset to use for autotuning\n        (*this)[\"sample_fraction\"] = sample_fraction;\n    }\n};\n\n\ntemplate <typename Distance>\nclass AutotunedIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    AutotunedIndex(const Matrix<ElementType>& inputData, const IndexParams& params = AutotunedIndexParams(), Distance d = Distance()) :\n        dataset_(inputData), distance_(d)\n    {\n        target_precision_ = get_param(params, \"target_precision\",0.8f);\n        build_weight_ =  get_param(params,\"build_weight\", 0.01f);\n        memory_weight_ = get_param(params, \"memory_weight\", 0.0f);\n        sample_fraction_ = get_param(params,\"sample_fraction\", 0.1f);\n        bestIndex_ = NULL;\n    }\n\n    AutotunedIndex(const AutotunedIndex&);\n    AutotunedIndex& operator=(const AutotunedIndex&);\n\n    virtual ~AutotunedIndex()\n    {\n        if (bestIndex_ != NULL) {\n            delete bestIndex_;\n            bestIndex_ = NULL;\n        }\n    }\n\n    /**\n     *          Method responsible with building the index.\n     */\n    virtual void buildIndex()\n    {\n        bestParams_ = estimateBuildParams();\n        Logger::info(\"----------------------------------------------------\\n\");\n        Logger::info(\"Autotuned parameters:\\n\");\n        print_params(bestParams_);\n        Logger::info(\"----------------------------------------------------\\n\");\n\n        bestIndex_ = create_index_by_type(dataset_, bestParams_, distance_);\n        bestIndex_->buildIndex();\n        speedup_ = estimateSearchParams(bestSearchParams_);\n        Logger::info(\"----------------------------------------------------\\n\");\n        Logger::info(\"Search parameters:\\n\");\n        print_params(bestSearchParams_);\n        Logger::info(\"----------------------------------------------------\\n\");\n    }\n\n    /**\n     *  Saves the index to a stream\n     */\n    virtual void saveIndex(FILE* stream)\n    {\n        save_value(stream, (int)bestIndex_->getType());\n        bestIndex_->saveIndex(stream);\n        save_value(stream, get_param<int>(bestSearchParams_, \"checks\"));\n    }\n\n    /**\n     *  Loads the index from a stream\n     */\n    virtual void loadIndex(FILE* stream)\n    {\n        int index_type;\n\n        load_value(stream, index_type);\n        IndexParams params;\n        params[\"algorithm\"] = (flann_algorithm_t)index_type;\n        bestIndex_ = create_index_by_type<Distance>(dataset_, params, distance_);\n        bestIndex_->loadIndex(stream);\n        int checks;\n        load_value(stream, checks);\n        bestSearchParams_[\"checks\"] = checks;\n    }\n\n    /**\n     *      Method that searches for nearest-neighbors\n     */\n    virtual void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        int checks = get_param<int>(searchParams,\"checks\",FLANN_CHECKS_AUTOTUNED);\n        if (checks == FLANN_CHECKS_AUTOTUNED) {\n            bestIndex_->findNeighbors(result, vec, bestSearchParams_);\n        }\n        else {\n            bestIndex_->findNeighbors(result, vec, searchParams);\n        }\n    }\n\n\n    IndexParams getParameters() const\n    {\n        return bestIndex_->getParameters();\n    }\n\n    SearchParams getSearchParameters() const\n    {\n        return bestSearchParams_;\n    }\n\n    float getSpeedup() const\n    {\n        return speedup_;\n    }\n\n\n    /**\n     *      Number of features in this index.\n     */\n    virtual size_t size() const\n    {\n        return bestIndex_->size();\n    }\n\n    /**\n     *  The length of each vector in this index.\n     */\n    virtual size_t veclen() const\n    {\n        return bestIndex_->veclen();\n    }\n\n    /**\n     * The amount of memory (in bytes) this index uses.\n     */\n    virtual int usedMemory() const\n    {\n        return bestIndex_->usedMemory();\n    }\n\n    /**\n     * Algorithm name\n     */\n    virtual flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_AUTOTUNED;\n    }\n\nprivate:\n\n    struct CostData\n    {\n        float searchTimeCost;\n        float buildTimeCost;\n        float memoryCost;\n        float totalCost;\n        IndexParams params;\n    };\n\n    void evaluate_kmeans(CostData& cost)\n    {\n        StartStopTimer t;\n        int checks;\n        const int nn = 1;\n\n        Logger::info(\"KMeansTree using params: max_iterations=%d, branching=%d\\n\",\n                     get_param<int>(cost.params,\"iterations\"),\n                     get_param<int>(cost.params,\"branching\"));\n        KMeansIndex<Distance> kmeans(sampledDataset_, cost.params, distance_);\n        // measure index build time\n        t.start();\n        kmeans.buildIndex();\n        t.stop();\n        float buildTime = (float)t.value;\n\n        // measure search time\n        float searchTime = test_index_precision(kmeans, sampledDataset_, testDataset_, gt_matches_, target_precision_, checks, distance_, nn);\n\n        float datasetMemory = float(sampledDataset_.rows * sampledDataset_.cols * sizeof(float));\n        cost.memoryCost = (kmeans.usedMemory() + datasetMemory) / datasetMemory;\n        cost.searchTimeCost = searchTime;\n        cost.buildTimeCost = buildTime;\n        Logger::info(\"KMeansTree buildTime=%g, searchTime=%g, build_weight=%g\\n\", buildTime, searchTime, build_weight_);\n    }\n\n\n    void evaluate_kdtree(CostData& cost)\n    {\n        StartStopTimer t;\n        int checks;\n        const int nn = 1;\n\n        Logger::info(\"KDTree using params: trees=%d\\n\", get_param<int>(cost.params,\"trees\"));\n        KDTreeIndex<Distance> kdtree(sampledDataset_, cost.params, distance_);\n\n        t.start();\n        kdtree.buildIndex();\n        t.stop();\n        float buildTime = (float)t.value;\n\n        //measure search time\n        float searchTime = test_index_precision(kdtree, sampledDataset_, testDataset_, gt_matches_, target_precision_, checks, distance_, nn);\n\n        float datasetMemory = float(sampledDataset_.rows * sampledDataset_.cols * sizeof(float));\n        cost.memoryCost = (kdtree.usedMemory() + datasetMemory) / datasetMemory;\n        cost.searchTimeCost = searchTime;\n        cost.buildTimeCost = buildTime;\n        Logger::info(\"KDTree buildTime=%g, searchTime=%g\\n\", buildTime, searchTime);\n    }\n\n\n    //    struct KMeansSimpleDownhillFunctor {\n    //\n    //        Autotune& autotuner;\n    //        KMeansSimpleDownhillFunctor(Autotune& autotuner_) : autotuner(autotuner_) {};\n    //\n    //        float operator()(int* params) {\n    //\n    //            float maxFloat = numeric_limits<float>::max();\n    //\n    //            if (params[0]<2) return maxFloat;\n    //            if (params[1]<0) return maxFloat;\n    //\n    //            CostData c;\n    //            c.params[\"algorithm\"] = KMEANS;\n    //            c.params[\"centers-init\"] = CENTERS_RANDOM;\n    //            c.params[\"branching\"] = params[0];\n    //            c.params[\"max-iterations\"] = params[1];\n    //\n    //            autotuner.evaluate_kmeans(c);\n    //\n    //            return c.timeCost;\n    //\n    //        }\n    //    };\n    //\n    //    struct KDTreeSimpleDownhillFunctor {\n    //\n    //        Autotune& autotuner;\n    //        KDTreeSimpleDownhillFunctor(Autotune& autotuner_) : autotuner(autotuner_) {};\n    //\n    //        float operator()(int* params) {\n    //            float maxFloat = numeric_limits<float>::max();\n    //\n    //            if (params[0]<1) return maxFloat;\n    //\n    //            CostData c;\n    //            c.params[\"algorithm\"] = KDTREE;\n    //            c.params[\"trees\"] = params[0];\n    //\n    //            autotuner.evaluate_kdtree(c);\n    //\n    //            return c.timeCost;\n    //\n    //        }\n    //    };\n\n\n\n    void optimizeKMeans(std::vector<CostData>& costs)\n    {\n        Logger::info(\"KMEANS, Step 1: Exploring parameter space\\n\");\n\n        // explore kmeans parameters space using combinations of the parameters below\n        int maxIterations[] = { 1, 5, 10, 15 };\n        int branchingFactors[] = { 16, 32, 64, 128, 256 };\n\n        int kmeansParamSpaceSize = FLANN_ARRAY_LEN(maxIterations) * FLANN_ARRAY_LEN(branchingFactors);\n        costs.reserve(costs.size() + kmeansParamSpaceSize);\n\n        // evaluate kmeans for all parameter combinations\n        for (size_t i = 0; i < FLANN_ARRAY_LEN(maxIterations); ++i) {\n            for (size_t j = 0; j < FLANN_ARRAY_LEN(branchingFactors); ++j) {\n                CostData cost;\n                cost.params[\"algorithm\"] = FLANN_INDEX_KMEANS;\n                cost.params[\"centers_init\"] = FLANN_CENTERS_RANDOM;\n                cost.params[\"iterations\"] = maxIterations[i];\n                cost.params[\"branching\"] = branchingFactors[j];\n\n                evaluate_kmeans(cost);\n                costs.push_back(cost);\n            }\n        }\n\n        //         Logger::info(\"KMEANS, Step 2: simplex-downhill optimization\\n\");\n        //\n        //         const int n = 2;\n        //         // choose initial simplex points as the best parameters so far\n        //         int kmeansNMPoints[n*(n+1)];\n        //         float kmeansVals[n+1];\n        //         for (int i=0;i<n+1;++i) {\n        //             kmeansNMPoints[i*n] = (int)kmeansCosts[i].params[\"branching\"];\n        //             kmeansNMPoints[i*n+1] = (int)kmeansCosts[i].params[\"max-iterations\"];\n        //             kmeansVals[i] = kmeansCosts[i].timeCost;\n        //         }\n        //         KMeansSimpleDownhillFunctor kmeans_cost_func(*this);\n        //         // run optimization\n        //         optimizeSimplexDownhill(kmeansNMPoints,n,kmeans_cost_func,kmeansVals);\n        //         // store results\n        //         for (int i=0;i<n+1;++i) {\n        //             kmeansCosts[i].params[\"branching\"] = kmeansNMPoints[i*2];\n        //             kmeansCosts[i].params[\"max-iterations\"] = kmeansNMPoints[i*2+1];\n        //             kmeansCosts[i].timeCost = kmeansVals[i];\n        //         }\n    }\n\n\n    void optimizeKDTree(std::vector<CostData>& costs)\n    {\n        Logger::info(\"KD-TREE, Step 1: Exploring parameter space\\n\");\n\n        // explore kd-tree parameters space using the parameters below\n        int testTrees[] = { 1, 4, 8, 16, 32 };\n\n        // evaluate kdtree for all parameter combinations\n        for (size_t i = 0; i < FLANN_ARRAY_LEN(testTrees); ++i) {\n            CostData cost;\n            cost.params[\"trees\"] = testTrees[i];\n\n            evaluate_kdtree(cost);\n            costs.push_back(cost);\n        }\n\n        //         Logger::info(\"KD-TREE, Step 2: simplex-downhill optimization\\n\");\n        //\n        //         const int n = 1;\n        //         // choose initial simplex points as the best parameters so far\n        //         int kdtreeNMPoints[n*(n+1)];\n        //         float kdtreeVals[n+1];\n        //         for (int i=0;i<n+1;++i) {\n        //             kdtreeNMPoints[i] = (int)kdtreeCosts[i].params[\"trees\"];\n        //             kdtreeVals[i] = kdtreeCosts[i].timeCost;\n        //         }\n        //         KDTreeSimpleDownhillFunctor kdtree_cost_func(*this);\n        //         // run optimization\n        //         optimizeSimplexDownhill(kdtreeNMPoints,n,kdtree_cost_func,kdtreeVals);\n        //         // store results\n        //         for (int i=0;i<n+1;++i) {\n        //             kdtreeCosts[i].params[\"trees\"] = kdtreeNMPoints[i];\n        //             kdtreeCosts[i].timeCost = kdtreeVals[i];\n        //         }\n    }\n\n    /**\n     *  Chooses the best nearest-neighbor algorithm and estimates the optimal\n     *  parameters to use when building the index (for a given precision).\n     *  Returns a dictionary with the optimal parameters.\n     */\n    IndexParams estimateBuildParams()\n    {\n        std::vector<CostData> costs;\n\n        int sampleSize = int(sample_fraction_ * dataset_.rows);\n        int testSampleSize = std::min(sampleSize / 10, 1000);\n\n        Logger::info(\"Entering autotuning, dataset size: %d, sampleSize: %d, testSampleSize: %d, target precision: %g\\n\", dataset_.rows, sampleSize, testSampleSize, target_precision_);\n\n        // For a very small dataset, it makes no sense to build any fancy index, just\n        // use linear search\n        if (testSampleSize < 10) {\n            Logger::info(\"Choosing linear, dataset too small\\n\");\n            return LinearIndexParams();\n        }\n\n        // We use a fraction of the original dataset to speedup the autotune algorithm\n        sampledDataset_ = random_sample(dataset_, sampleSize);\n        // We use a cross-validation approach, first we sample a testset from the dataset\n        testDataset_ = random_sample(sampledDataset_, testSampleSize, true);\n\n        // We compute the ground truth using linear search\n        Logger::info(\"Computing ground truth... \\n\");\n        gt_matches_ = Matrix<int>(new int[testDataset_.rows], testDataset_.rows, 1);\n        StartStopTimer t;\n        t.start();\n        compute_ground_truth<Distance>(sampledDataset_, testDataset_, gt_matches_, 0, distance_);\n        t.stop();\n\n        CostData linear_cost;\n        linear_cost.searchTimeCost = (float)t.value;\n        linear_cost.buildTimeCost = 0;\n        linear_cost.memoryCost = 0;\n        linear_cost.params[\"algorithm\"] = FLANN_INDEX_LINEAR;\n\n        costs.push_back(linear_cost);\n\n        // Start parameter autotune process\n        Logger::info(\"Autotuning parameters...\\n\");\n\n        optimizeKMeans(costs);\n        optimizeKDTree(costs);\n\n        float bestTimeCost = costs[0].searchTimeCost;\n        for (size_t i = 0; i < costs.size(); ++i) {\n            float timeCost = costs[i].buildTimeCost * build_weight_ + costs[i].searchTimeCost;\n            if (timeCost < bestTimeCost) {\n                bestTimeCost = timeCost;\n            }\n        }\n\n        float bestCost = costs[0].searchTimeCost / bestTimeCost;\n        IndexParams bestParams = costs[0].params;\n        if (bestTimeCost > 0) {\n            for (size_t i = 0; i < costs.size(); ++i) {\n                float crtCost = (costs[i].buildTimeCost * build_weight_ + costs[i].searchTimeCost) / bestTimeCost +\n                                memory_weight_ * costs[i].memoryCost;\n                if (crtCost < bestCost) {\n                    bestCost = crtCost;\n                    bestParams = costs[i].params;\n                }\n            }\n        }\n\n        delete[] gt_matches_.data;\n        delete[] testDataset_.data;\n        delete[] sampledDataset_.data;\n\n        return bestParams;\n    }\n\n\n\n    /**\n     *  Estimates the search time parameters needed to get the desired precision.\n     *  Precondition: the index is built\n     *  Postcondition: the searchParams will have the optimum params set, also the speedup obtained over linear search.\n     */\n    float estimateSearchParams(SearchParams& searchParams)\n    {\n        const int nn = 1;\n        const size_t SAMPLE_COUNT = 1000;\n\n        assert(bestIndex_ != NULL); // must have a valid index\n\n        float speedup = 0;\n\n        int samples = (int)std::min(dataset_.rows / 10, SAMPLE_COUNT);\n        if (samples > 0) {\n            Matrix<ElementType> testDataset = random_sample(dataset_, samples);\n\n            Logger::info(\"Computing ground truth\\n\");\n\n            // we need to compute the ground truth first\n            Matrix<int> gt_matches(new int[testDataset.rows], testDataset.rows, 1);\n            StartStopTimer t;\n            t.start();\n            compute_ground_truth<Distance>(dataset_, testDataset, gt_matches, 1, distance_);\n            t.stop();\n            float linear = (float)t.value;\n\n            int checks;\n            Logger::info(\"Estimating number of checks\\n\");\n\n            float searchTime;\n            float cb_index;\n            if (bestIndex_->getType() == FLANN_INDEX_KMEANS) {\n                Logger::info(\"KMeans algorithm, estimating cluster border factor\\n\");\n                KMeansIndex<Distance>* kmeans = (KMeansIndex<Distance>*)bestIndex_;\n                float bestSearchTime = -1;\n                float best_cb_index = -1;\n                int best_checks = -1;\n                for (cb_index = 0; cb_index < 1.1f; cb_index += 0.2f) {\n                    kmeans->set_cb_index(cb_index);\n                    searchTime = test_index_precision(*kmeans, dataset_, testDataset, gt_matches, target_precision_, checks, distance_, nn, 1);\n                    if ((searchTime < bestSearchTime) || (bestSearchTime == -1)) {\n                        bestSearchTime = searchTime;\n                        best_cb_index = cb_index;\n                        best_checks = checks;\n                    }\n                }\n                searchTime = bestSearchTime;\n                cb_index = best_cb_index;\n                checks = best_checks;\n\n                kmeans->set_cb_index(best_cb_index);\n                Logger::info(\"Optimum cb_index: %g\\n\", cb_index);\n                bestParams_[\"cb_index\"] = cb_index;\n            }\n            else {\n                searchTime = test_index_precision(*bestIndex_, dataset_, testDataset, gt_matches, target_precision_, checks, distance_, nn, 1);\n            }\n\n            Logger::info(\"Required number of checks: %d \\n\", checks);\n            searchParams[\"checks\"] = checks;\n\n            speedup = linear / searchTime;\n\n            delete[] gt_matches.data;\n            delete[] testDataset.data;\n        }\n\n        return speedup;\n    }\n\nprivate:\n    NNIndex<Distance>* bestIndex_;\n\n    IndexParams bestParams_;\n    SearchParams bestSearchParams_;\n\n    Matrix<ElementType> sampledDataset_;\n    Matrix<ElementType> testDataset_;\n    Matrix<int> gt_matches_;\n\n    float speedup_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    /**\n     * Index parameters\n     */\n    float target_precision_;\n    float build_weight_;\n    float memory_weight_;\n    float sample_fraction_;\n\n    Distance distance_;\n\n\n};\n}\n\n#endif /* OPENCV_FLANN_AUTOTUNED_INDEX_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/composite_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_COMPOSITE_INDEX_H_\n#define OPENCV_FLANN_COMPOSITE_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"kdtree_index.h\"\n#include \"kmeans_index.h\"\n\nnamespace cvflann\n{\n\n/**\n * Index parameters for the CompositeIndex.\n */\nstruct CompositeIndexParams : public IndexParams\n{\n    CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11,\n                         flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, float cb_index = 0.2 )\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KMEANS;\n        // number of randomized trees to use (for kdtree)\n        (*this)[\"trees\"] = trees;\n        // branching factor\n        (*this)[\"branching\"] = branching;\n        // max iterations to perform in one kmeans clustering (kmeans tree)\n        (*this)[\"iterations\"] = iterations;\n        // algorithm used for picking the initial cluster centers for kmeans tree\n        (*this)[\"centers_init\"] = centers_init;\n        // cluster boundary index. Used when searching the kmeans tree\n        (*this)[\"cb_index\"] = cb_index;\n    }\n};\n\n\n/**\n * This index builds a kd-tree index and a k-means index and performs nearest\n * neighbour search both indexes. This gives a slight boost in search performance\n * as some of the neighbours that are missed by one index are found by the other.\n */\ntemplate <typename Distance>\nclass CompositeIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    /**\n     * Index constructor\n     * @param inputData dataset containing the points to index\n     * @param params Index parameters\n     * @param d Distance functor\n     * @return\n     */\n    CompositeIndex(const Matrix<ElementType>& inputData, const IndexParams& params = CompositeIndexParams(),\n                   Distance d = Distance()) : index_params_(params)\n    {\n        kdtree_index_ = new KDTreeIndex<Distance>(inputData, params, d);\n        kmeans_index_ = new KMeansIndex<Distance>(inputData, params, d);\n\n    }\n\n    CompositeIndex(const CompositeIndex&);\n    CompositeIndex& operator=(const CompositeIndex&);\n\n    virtual ~CompositeIndex()\n    {\n        delete kdtree_index_;\n        delete kmeans_index_;\n    }\n\n    /**\n     * @return The index type\n     */\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_COMPOSITE;\n    }\n\n    /**\n     * @return Size of the index\n     */\n    size_t size() const\n    {\n        return kdtree_index_->size();\n    }\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    size_t veclen() const\n    {\n        return kdtree_index_->veclen();\n    }\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    int usedMemory() const\n    {\n        return kmeans_index_->usedMemory() + kdtree_index_->usedMemory();\n    }\n\n    /**\n     * \\brief Builds the index\n     */\n    void buildIndex()\n    {\n        Logger::info(\"Building kmeans tree...\\n\");\n        kmeans_index_->buildIndex();\n        Logger::info(\"Building kdtree tree...\\n\");\n        kdtree_index_->buildIndex();\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    void saveIndex(FILE* stream)\n    {\n        kmeans_index_->saveIndex(stream);\n        kdtree_index_->saveIndex(stream);\n    }\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    void loadIndex(FILE* stream)\n    {\n        kmeans_index_->loadIndex(stream);\n        kdtree_index_->loadIndex(stream);\n    }\n\n    /**\n     * \\returns The index parameters\n     */\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        kmeans_index_->findNeighbors(result, vec, searchParams);\n        kdtree_index_->findNeighbors(result, vec, searchParams);\n    }\n\nprivate:\n    /** The k-means index */\n    KMeansIndex<Distance>* kmeans_index_;\n\n    /** The kd-tree index */\n    KDTreeIndex<Distance>* kdtree_index_;\n\n    /** The index parameters */\n    const IndexParams index_params_;\n};\n\n}\n\n#endif //OPENCV_FLANN_COMPOSITE_INDEX_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/config.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_CONFIG_H_\n#define OPENCV_FLANN_CONFIG_H_\n\n#ifdef FLANN_VERSION_\n#undef FLANN_VERSION_\n#endif\n#define FLANN_VERSION_ \"1.6.10\"\n\n#endif /* OPENCV_FLANN_CONFIG_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/defines.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_DEFINES_H_\n#define OPENCV_FLANN_DEFINES_H_\n\n#include \"config.h\"\n\n#ifdef FLANN_EXPORT\n#undef FLANN_EXPORT\n#endif\n#ifdef WIN32\n/* win32 dll export/import directives */\n #ifdef FLANN_EXPORTS\n  #define FLANN_EXPORT __declspec(dllexport)\n #elif defined(FLANN_STATIC)\n  #define FLANN_EXPORT\n #else\n  #define FLANN_EXPORT __declspec(dllimport)\n #endif\n#else\n/* unix needs nothing */\n #define FLANN_EXPORT\n#endif\n\n\n#ifdef FLANN_DEPRECATED\n#undef FLANN_DEPRECATED\n#endif\n#ifdef __GNUC__\n#define FLANN_DEPRECATED __attribute__ ((deprecated))\n#elif defined(_MSC_VER)\n#define FLANN_DEPRECATED __declspec(deprecated)\n#else\n#pragma message(\"WARNING: You need to implement FLANN_DEPRECATED for this compiler\")\n#define FLANN_DEPRECATED\n#endif\n\n\n#undef FLANN_PLATFORM_32_BIT\n#undef FLANN_PLATFORM_64_BIT\n#if defined __amd64__ || defined __x86_64__ || defined _WIN64 || defined _M_X64\n#define FLANN_PLATFORM_64_BIT\n#else\n#define FLANN_PLATFORM_32_BIT\n#endif\n\n\n#undef FLANN_ARRAY_LEN\n#define FLANN_ARRAY_LEN(a) (sizeof(a)/sizeof(a[0]))\n\nnamespace cvflann {\n\n/* Nearest neighbour index algorithms */\nenum flann_algorithm_t\n{\n    FLANN_INDEX_LINEAR = 0,\n    FLANN_INDEX_KDTREE = 1,\n    FLANN_INDEX_KMEANS = 2,\n    FLANN_INDEX_COMPOSITE = 3,\n    FLANN_INDEX_KDTREE_SINGLE = 4,\n    FLANN_INDEX_HIERARCHICAL = 5,\n    FLANN_INDEX_LSH = 6,\n    FLANN_INDEX_SAVED = 254,\n    FLANN_INDEX_AUTOTUNED = 255,\n\n    // deprecated constants, should use the FLANN_INDEX_* ones instead\n    LINEAR = 0,\n    KDTREE = 1,\n    KMEANS = 2,\n    COMPOSITE = 3,\n    KDTREE_SINGLE = 4,\n    SAVED = 254,\n    AUTOTUNED = 255\n};\n\n\n\nenum flann_centers_init_t\n{\n    FLANN_CENTERS_RANDOM = 0,\n    FLANN_CENTERS_GONZALES = 1,\n    FLANN_CENTERS_KMEANSPP = 2,\n\n    // deprecated constants, should use the FLANN_CENTERS_* ones instead\n    CENTERS_RANDOM = 0,\n    CENTERS_GONZALES = 1,\n    CENTERS_KMEANSPP = 2\n};\n\nenum flann_log_level_t\n{\n    FLANN_LOG_NONE = 0,\n    FLANN_LOG_FATAL = 1,\n    FLANN_LOG_ERROR = 2,\n    FLANN_LOG_WARN = 3,\n    FLANN_LOG_INFO = 4\n};\n\nenum flann_distance_t\n{\n    FLANN_DIST_EUCLIDEAN = 1,\n    FLANN_DIST_L2 = 1,\n    FLANN_DIST_MANHATTAN = 2,\n    FLANN_DIST_L1 = 2,\n    FLANN_DIST_MINKOWSKI = 3,\n    FLANN_DIST_MAX   = 4,\n    FLANN_DIST_HIST_INTERSECT   = 5,\n    FLANN_DIST_HELLINGER = 6,\n    FLANN_DIST_CHI_SQUARE = 7,\n    FLANN_DIST_CS         = 7,\n    FLANN_DIST_KULLBACK_LEIBLER  = 8,\n    FLANN_DIST_KL                = 8,\n    FLANN_DIST_HAMMING          = 9,\n\n    // deprecated constants, should use the FLANN_DIST_* ones instead\n    EUCLIDEAN = 1,\n    MANHATTAN = 2,\n    MINKOWSKI = 3,\n    MAX_DIST   = 4,\n    HIST_INTERSECT   = 5,\n    HELLINGER = 6,\n    CS         = 7,\n    KL         = 8,\n    KULLBACK_LEIBLER  = 8\n};\n\nenum flann_datatype_t\n{\n    FLANN_INT8 = 0,\n    FLANN_INT16 = 1,\n    FLANN_INT32 = 2,\n    FLANN_INT64 = 3,\n    FLANN_UINT8 = 4,\n    FLANN_UINT16 = 5,\n    FLANN_UINT32 = 6,\n    FLANN_UINT64 = 7,\n    FLANN_FLOAT32 = 8,\n    FLANN_FLOAT64 = 9\n};\n\nenum\n{\n    FLANN_CHECKS_UNLIMITED = -1,\n    FLANN_CHECKS_AUTOTUNED = -2\n};\n\n}\n\n#endif /* OPENCV_FLANN_DEFINES_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/dist.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DIST_H_\n#define OPENCV_FLANN_DIST_H_\n\n#include <cmath>\n#include <cstdlib>\n#include <string.h>\n#ifdef _MSC_VER\ntypedef unsigned __int32 uint32_t;\ntypedef unsigned __int64 uint64_t;\n#else\n#include <stdint.h>\n#endif\n\n#include \"defines.h\"\n\n#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)\n# include <Intrin.h>\n#endif\n\n#ifdef __ARM_NEON__\n# include \"arm_neon.h\"\n#endif\n\nnamespace cvflann\n{\n\ntemplate<typename T>\ninline T abs(T x) { return (x<0) ? -x : x; }\n\ntemplate<>\ninline int abs<int>(int x) { return ::abs(x); }\n\ntemplate<>\ninline float abs<float>(float x) { return fabsf(x); }\n\ntemplate<>\ninline double abs<double>(double x) { return fabs(x); }\n\ntemplate<typename T>\nstruct Accumulator { typedef T Type; };\ntemplate<>\nstruct Accumulator<unsigned char>  { typedef float Type; };\ntemplate<>\nstruct Accumulator<unsigned short> { typedef float Type; };\ntemplate<>\nstruct Accumulator<unsigned int> { typedef float Type; };\ntemplate<>\nstruct Accumulator<char>   { typedef float Type; };\ntemplate<>\nstruct Accumulator<short>  { typedef float Type; };\ntemplate<>\nstruct Accumulator<int> { typedef float Type; };\n\n#undef True\n#undef False\n\nclass True\n{\n};\n\nclass False\n{\n};\n\n\n/**\n * Squared Euclidean distance functor.\n *\n * This is the simpler, unrolled version. This is preferable for\n * very low dimensionality data (eg 3D points)\n */\ntemplate<class T>\nstruct L2_Simple\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff;\n        for(size_t i = 0; i < size; ++i ) {\n            diff = *a++ - *b++;\n            result += diff*diff;\n        }\n        return result;\n    }\n\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return (a-b)*(a-b);\n    }\n};\n\n\n\n/**\n * Squared Euclidean distance functor, optimized version\n */\ntemplate<class T>\nstruct L2\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the squared Euclidean distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     *\n     *\tThe computation of squared root at the end is omitted for\n     *\tefficiency.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)(a[0] - b[0]);\n            diff1 = (ResultType)(a[1] - b[1]);\n            diff2 = (ResultType)(a[2] - b[2]);\n            diff3 = (ResultType)(a[3] - b[3]);\n            result += diff0 * diff0 + diff1 * diff1 + diff2 * diff2 + diff3 * diff3;\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)(*a++ - *b++);\n            result += diff0 * diff0;\n        }\n        return result;\n    }\n\n    /**\n     *\tPartial euclidean distance, using just one dimension. This is used by the\n     *\tkd-tree when computing partial distances while traversing the tree.\n     *\n     *\tSquared root is omitted for efficiency.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return (a-b)*(a-b);\n    }\n};\n\n\n/*\n * Manhattan distance functor, optimized version\n */\ntemplate<class T>\nstruct L1\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the Manhattan (L_1) distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)abs(a[0] - b[0]);\n            diff1 = (ResultType)abs(a[1] - b[1]);\n            diff2 = (ResultType)abs(a[2] - b[2]);\n            diff3 = (ResultType)abs(a[3] - b[3]);\n            result += diff0 + diff1 + diff2 + diff3;\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)abs(*a++ - *b++);\n            result += diff0;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return abs(a-b);\n    }\n};\n\n\n\ntemplate<class T>\nstruct MinkowskiDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    int order;\n\n    MinkowskiDistance(int order_) : order(order_) {}\n\n    /**\n     *  Compute the Minkowsky (L_p) distance between two vectors.\n     *\n     *\tThis is highly optimised, with loop unrolling, as it is one\n     *\tof the most expensive inner loops.\n     *\n     *\tThe computation of squared root at the end is omitted for\n     *\tefficiency.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = (ResultType)abs(a[0] - b[0]);\n            diff1 = (ResultType)abs(a[1] - b[1]);\n            diff2 = (ResultType)abs(a[2] - b[2]);\n            diff3 = (ResultType)abs(a[3] - b[3]);\n            result += pow(diff0,order) + pow(diff1,order) + pow(diff2,order) + pow(diff3,order);\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = (ResultType)abs(*a++ - *b++);\n            result += pow(diff0,order);\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return pow(static_cast<ResultType>(abs(a-b)),order);\n    }\n};\n\n\n\ntemplate<class T>\nstruct MaxDistance\n{\n    typedef False is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the max distance (L_infinity) between two vectors.\n     *\n     *  This distance is not a valid kdtree distance, it's not dimensionwise additive.\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = abs(a[0] - b[0]);\n            diff1 = abs(a[1] - b[1]);\n            diff2 = abs(a[2] - b[2]);\n            diff3 = abs(a[3] - b[3]);\n            if (diff0>result) {result = diff0; }\n            if (diff1>result) {result = diff1; }\n            if (diff2>result) {result = diff2; }\n            if (diff3>result) {result = diff3; }\n            a += 4;\n            b += 4;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            diff0 = abs(*a++ - *b++);\n            result = (diff0>result) ? diff0 : result;\n        }\n        return result;\n    }\n\n    /* This distance functor is not dimension-wise additive, which\n     * makes it an invalid kd-tree distance, not implementing the accum_dist method */\n\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor\n * bit count of A exclusive XOR'ed with B\n */\nstruct HammingLUT\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n    typedef unsigned char ElementType;\n    typedef int ResultType;\n\n    /** this will count the bits in a ^ b\n     */\n    ResultType operator()(const unsigned char* a, const unsigned char* b, int size) const\n    {\n        static const uchar popCountTable[] =\n        {\n            0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8\n        };\n        ResultType result = 0;\n        for (int i = 0; i < size; i++) {\n            result += popCountTable[a[i] ^ b[i]];\n        }\n        return result;\n    }\n};\n\n/**\n * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor\n * bit count of A exclusive XOR'ed with B\n */\nstruct HammingLUT2\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n    typedef unsigned char ElementType;\n    typedef int ResultType;\n\n    /** this will count the bits in a ^ b\n     */\n    ResultType operator()(const unsigned char* a, const unsigned char* b, size_t size) const\n    {\n        static const uchar popCountTable[] =\n        {\n            0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n            3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8\n        };\n        ResultType result = 0;\n        for (size_t i = 0; i < size; i++) {\n            result += popCountTable[a[i] ^ b[i]];\n        }\n        return result;\n    }\n};\n\n/**\n * Hamming distance functor (pop count between two binary vectors, i.e. xor them and count the number of bits set)\n * That code was taken from brief.cpp in OpenCV\n */\ntemplate<class T>\nstruct Hamming\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n\n    typedef T ElementType;\n    typedef int ResultType;\n\n    template<typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = 0;\n#ifdef __ARM_NEON__\n        {\n            uint32x4_t bits = vmovq_n_u32(0);\n            for (size_t i = 0; i < size; i += 16) {\n                uint8x16_t A_vec = vld1q_u8 (a + i);\n                uint8x16_t B_vec = vld1q_u8 (b + i);\n                uint8x16_t AxorB = veorq_u8 (A_vec, B_vec);\n                uint8x16_t bitsSet = vcntq_u8 (AxorB);\n                uint16x8_t bitSet8 = vpaddlq_u8 (bitsSet);\n                uint32x4_t bitSet4 = vpaddlq_u16 (bitSet8);\n                bits = vaddq_u32(bits, bitSet4);\n            }\n            uint64x2_t bitSet2 = vpaddlq_u32 (bits);\n            result = vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),0);\n            result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2);\n        }\n#elif __GNUC__\n        {\n            //for portability just use unsigned long -- and use the __builtin_popcountll (see docs for __builtin_popcountll)\n            typedef unsigned long long pop_t;\n            const size_t modulo = size % sizeof(pop_t);\n            const pop_t* a2 = reinterpret_cast<const pop_t*> (a);\n            const pop_t* b2 = reinterpret_cast<const pop_t*> (b);\n            const pop_t* a2_end = a2 + (size / sizeof(pop_t));\n\n            for (; a2 != a2_end; ++a2, ++b2) result += __builtin_popcountll((*a2) ^ (*b2));\n\n            if (modulo) {\n                //in the case where size is not dividable by sizeof(size_t)\n                //need to mask off the bits at the end\n                pop_t a_final = 0, b_final = 0;\n                memcpy(&a_final, a2, modulo);\n                memcpy(&b_final, b2, modulo);\n                result += __builtin_popcountll(a_final ^ b_final);\n            }\n        }\n#else // NO NEON and NOT GNUC\n        typedef unsigned long long pop_t;\n        HammingLUT lut;\n        result = lut(reinterpret_cast<const unsigned char*> (a),\n                     reinterpret_cast<const unsigned char*> (b), size * sizeof(pop_t));\n#endif\n        return result;\n    }\n};\n\ntemplate<typename T>\nstruct Hamming2\n{\n    typedef False is_kdtree_distance;\n    typedef False is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef int ResultType;\n\n    /** This is popcount_3() from:\n     * http://en.wikipedia.org/wiki/Hamming_weight */\n    unsigned int popcnt32(uint32_t n) const\n    {\n        n -= ((n >> 1) & 0x55555555);\n        n = (n & 0x33333333) + ((n >> 2) & 0x33333333);\n        return (((n + (n >> 4))& 0xF0F0F0F)* 0x1010101) >> 24;\n    }\n\n#ifdef FLANN_PLATFORM_64_BIT\n    unsigned int popcnt64(uint64_t n) const\n    {\n        n -= ((n >> 1) & 0x5555555555555555);\n        n = (n & 0x3333333333333333) + ((n >> 2) & 0x3333333333333333);\n        return (((n + (n >> 4))& 0x0f0f0f0f0f0f0f0f)* 0x0101010101010101) >> 56;\n    }\n#endif\n\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n#ifdef FLANN_PLATFORM_64_BIT\n        const uint64_t* pa = reinterpret_cast<const uint64_t*>(a);\n        const uint64_t* pb = reinterpret_cast<const uint64_t*>(b);\n        ResultType result = 0;\n        size /= (sizeof(uint64_t)/sizeof(unsigned char));\n        for(size_t i = 0; i < size; ++i ) {\n            result += popcnt64(*pa ^ *pb);\n            ++pa;\n            ++pb;\n        }\n#else\n        const uint32_t* pa = reinterpret_cast<const uint32_t*>(a);\n        const uint32_t* pb = reinterpret_cast<const uint32_t*>(b);\n        ResultType result = 0;\n        size /= (sizeof(uint32_t)/sizeof(unsigned char));\n        for(size_t i = 0; i < size; ++i ) {\n            result += popcnt32(*pa ^ *pb);\n            ++pa;\n            ++pb;\n        }\n#endif\n        return result;\n    }\n};\n\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\ntemplate<class T>\nstruct HistIntersectionDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the histogram intersection distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType min0, min1, min2, min3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            min0 = (ResultType)(a[0] < b[0] ? a[0] : b[0]);\n            min1 = (ResultType)(a[1] < b[1] ? a[1] : b[1]);\n            min2 = (ResultType)(a[2] < b[2] ? a[2] : b[2]);\n            min3 = (ResultType)(a[3] < b[3] ? a[3] : b[3]);\n            result += min0 + min1 + min2 + min3;\n            a += 4;\n            b += 4;\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        /* Process last 0-3 pixels.  Not needed for standard vector lengths. */\n        while (a < last) {\n            min0 = (ResultType)(*a < *b ? *a : *b);\n            result += min0;\n            ++a;\n            ++b;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return a<b ? a : b;\n    }\n};\n\n\n\ntemplate<class T>\nstruct HellingerDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the histogram intersection distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType diff0, diff1, diff2, diff3;\n        Iterator1 last = a + size;\n        Iterator1 lastgroup = last - 3;\n\n        /* Process 4 items with each loop for efficiency. */\n        while (a < lastgroup) {\n            diff0 = sqrt(static_cast<ResultType>(a[0])) - sqrt(static_cast<ResultType>(b[0]));\n            diff1 = sqrt(static_cast<ResultType>(a[1])) - sqrt(static_cast<ResultType>(b[1]));\n            diff2 = sqrt(static_cast<ResultType>(a[2])) - sqrt(static_cast<ResultType>(b[2]));\n            diff3 = sqrt(static_cast<ResultType>(a[3])) - sqrt(static_cast<ResultType>(b[3]));\n            result += diff0 * diff0 + diff1 * diff1 + diff2 * diff2 + diff3 * diff3;\n            a += 4;\n            b += 4;\n        }\n        while (a < last) {\n            diff0 = sqrt(static_cast<ResultType>(*a++)) - sqrt(static_cast<ResultType>(*b++));\n            result += diff0 * diff0;\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        return sqrt(static_cast<ResultType>(a)) - sqrt(static_cast<ResultType>(b));\n    }\n};\n\n\ntemplate<class T>\nstruct ChiSquareDistance\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the chi-square distance\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        ResultType sum, diff;\n        Iterator1 last = a + size;\n\n        while (a < last) {\n            sum = (ResultType)(*a + *b);\n            if (sum>0) {\n                diff = (ResultType)(*a - *b);\n                result += diff*diff/sum;\n            }\n            ++a;\n            ++b;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        ResultType result = ResultType();\n        ResultType sum, diff;\n\n        sum = (ResultType)(a+b);\n        if (sum>0) {\n            diff = (ResultType)(a-b);\n            result = diff*diff/sum;\n        }\n        return result;\n    }\n};\n\n\ntemplate<class T>\nstruct KL_Divergence\n{\n    typedef True is_kdtree_distance;\n    typedef True is_vector_space_distance;\n\n    typedef T ElementType;\n    typedef typename Accumulator<T>::Type ResultType;\n\n    /**\n     *  Compute the Kullback–Leibler divergence\n     */\n    template <typename Iterator1, typename Iterator2>\n    ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const\n    {\n        ResultType result = ResultType();\n        Iterator1 last = a + size;\n\n        while (a < last) {\n            if (* a != 0) {\n                ResultType ratio = (ResultType)(*a / *b);\n                if (ratio>0) {\n                    result += *a * log(ratio);\n                }\n            }\n            ++a;\n            ++b;\n\n            if ((worst_dist>0)&&(result>worst_dist)) {\n                return result;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * Partial distance, used by the kd-tree.\n     */\n    template <typename U, typename V>\n    inline ResultType accum_dist(const U& a, const V& b, int) const\n    {\n        ResultType result = ResultType();\n        ResultType ratio = (ResultType)(a / b);\n        if (ratio>0) {\n            result = a * log(ratio);\n        }\n        return result;\n    }\n};\n\n\n\n/*\n * This is a \"zero iterator\". It basically behaves like a zero filled\n * array to all algorithms that use arrays as iterators (STL style).\n * It's useful when there's a need to compute the distance between feature\n * and origin it and allows for better compiler optimisation than using a\n * zero-filled array.\n */\ntemplate <typename T>\nstruct ZeroIterator\n{\n\n    T operator*()\n    {\n        return 0;\n    }\n\n    T operator[](int)\n    {\n        return 0;\n    }\n\n    const ZeroIterator<T>& operator ++()\n    {\n        return *this;\n    }\n\n    ZeroIterator<T> operator ++(int)\n    {\n        return *this;\n    }\n\n    ZeroIterator<T>& operator+=(int)\n    {\n        return *this;\n    }\n\n};\n\n}\n\n#endif //OPENCV_FLANN_DIST_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/dummy.h",
    "content": "\n#ifndef OPENCV_FLANN_DUMMY_H_\n#define OPENCV_FLANN_DUMMY_H_\n\nnamespace cvflann\n{\n\n#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS\n__declspec(dllexport)\n#endif\nvoid dummyfunc();\n\n}\n\n\n#endif  /* OPENCV_FLANN_DUMMY_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/dynamic_bitset.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DYNAMIC_BITSET_H_\n#define OPENCV_FLANN_DYNAMIC_BITSET_H_\n\n#ifndef FLANN_USE_BOOST\n#  define FLANN_USE_BOOST 0\n#endif\n//#define FLANN_USE_BOOST 1\n#if FLANN_USE_BOOST\n#include <boost/dynamic_bitset.hpp>\ntypedef boost::dynamic_bitset<> DynamicBitset;\n#else\n\n#include <limits.h>\n\n#include \"dist.h\"\n\nnamespace cvflann {\n\n/** Class re-implementing the boost version of it\n * This helps not depending on boost, it also does not do the bound checks\n * and has a way to reset a block for speed\n */\nclass DynamicBitset\n{\npublic:\n    /** @param default constructor\n     */\n    DynamicBitset()\n    {\n    }\n\n    /** @param only constructor we use in our code\n     * @param the size of the bitset (in bits)\n     */\n    DynamicBitset(size_t sz)\n    {\n        resize(sz);\n        reset();\n    }\n\n    /** Sets all the bits to 0\n     */\n    void clear()\n    {\n        std::fill(bitset_.begin(), bitset_.end(), 0);\n    }\n\n    /** @brief checks if the bitset is empty\n     * @return true if the bitset is empty\n     */\n    bool empty() const\n    {\n        return bitset_.empty();\n    }\n\n    /** @param set all the bits to 0\n     */\n    void reset()\n    {\n        std::fill(bitset_.begin(), bitset_.end(), 0);\n    }\n\n    /** @brief set one bit to 0\n     * @param\n     */\n    void reset(size_t index)\n    {\n        bitset_[index / cell_bit_size_] &= ~(size_t(1) << (index % cell_bit_size_));\n    }\n\n    /** @brief sets a specific bit to 0, and more bits too\n     * This function is useful when resetting a given set of bits so that the\n     * whole bitset ends up being 0: if that's the case, we don't care about setting\n     * other bits to 0\n     * @param\n     */\n    void reset_block(size_t index)\n    {\n        bitset_[index / cell_bit_size_] = 0;\n    }\n\n    /** @param resize the bitset so that it contains at least size bits\n     * @param size\n     */\n    void resize(size_t sz)\n    {\n        size_ = sz;\n        bitset_.resize(sz / cell_bit_size_ + 1);\n    }\n\n    /** @param set a bit to true\n     * @param index the index of the bit to set to 1\n     */\n    void set(size_t index)\n    {\n        bitset_[index / cell_bit_size_] |= size_t(1) << (index % cell_bit_size_);\n    }\n\n    /** @param gives the number of contained bits\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /** @param check if a bit is set\n     * @param index the index of the bit to check\n     * @return true if the bit is set\n     */\n    bool test(size_t index) const\n    {\n        return (bitset_[index / cell_bit_size_] & (size_t(1) << (index % cell_bit_size_))) != 0;\n    }\n\nprivate:\n    std::vector<size_t> bitset_;\n    size_t size_;\n    static const unsigned int cell_bit_size_ = CHAR_BIT * sizeof(size_t);\n};\n\n} // namespace cvflann\n\n#endif\n\n#endif // OPENCV_FLANN_DYNAMIC_BITSET_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/flann.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef _OPENCV_FLANN_HPP_\n#define _OPENCV_FLANN_HPP_\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/types_c.h\"\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/flann/flann_base.hpp\"\n#include \"opencv2/flann/miniflann.hpp\"\n\nnamespace cvflann\n{\n    CV_EXPORTS flann_distance_t flann_distance_type();\n    FLANN_DEPRECATED CV_EXPORTS void set_distance_type(flann_distance_t distance_type, int order);\n}\n\n\nnamespace cv\n{\nnamespace flann\n{\n\ntemplate <typename T> struct CvType {};\ntemplate <> struct CvType<unsigned char> { static int type() { return CV_8U; } };\ntemplate <> struct CvType<char> { static int type() { return CV_8S; } };\ntemplate <> struct CvType<unsigned short> { static int type() { return CV_16U; } };\ntemplate <> struct CvType<short> { static int type() { return CV_16S; } };\ntemplate <> struct CvType<int> { static int type() { return CV_32S; } };\ntemplate <> struct CvType<float> { static int type() { return CV_32F; } };\ntemplate <> struct CvType<double> { static int type() { return CV_64F; } };\n\n\n// bring the flann parameters into this namespace\nusing ::cvflann::get_param;\nusing ::cvflann::print_params;\n\n// bring the flann distances into this namespace\nusing ::cvflann::L2_Simple;\nusing ::cvflann::L2;\nusing ::cvflann::L1;\nusing ::cvflann::MinkowskiDistance;\nusing ::cvflann::MaxDistance;\nusing ::cvflann::HammingLUT;\nusing ::cvflann::Hamming;\nusing ::cvflann::Hamming2;\nusing ::cvflann::HistIntersectionDistance;\nusing ::cvflann::HellingerDistance;\nusing ::cvflann::ChiSquareDistance;\nusing ::cvflann::KL_Divergence;\n\n\n\ntemplate <typename Distance>\nclass GenericIndex\n{\npublic:\n        typedef typename Distance::ElementType ElementType;\n        typedef typename Distance::ResultType DistanceType;\n\n        GenericIndex(const Mat& features, const ::cvflann::IndexParams& params, Distance distance = Distance());\n\n        ~GenericIndex();\n\n        void knnSearch(const vector<ElementType>& query, vector<int>& indices,\n                       vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& params);\n        void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params);\n\n        int radiusSearch(const vector<ElementType>& query, vector<int>& indices,\n                         vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n        int radiusSearch(const Mat& query, Mat& indices, Mat& dists,\n                         DistanceType radius, const ::cvflann::SearchParams& params);\n\n        void save(std::string filename) { nnIndex->save(filename); }\n\n        int veclen() const { return nnIndex->veclen(); }\n\n        int size() const { return nnIndex->size(); }\n\n        ::cvflann::IndexParams getParameters() { return nnIndex->getParameters(); }\n\n        FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() { return nnIndex->getIndexParameters(); }\n\nprivate:\n        ::cvflann::Index<Distance>* nnIndex;\n};\n\n\n#define FLANN_DISTANCE_CHECK \\\n    if ( ::cvflann::flann_distance_type() != cvflann::FLANN_DIST_L2) { \\\n        printf(\"[WARNING] You are using cv::flann::Index (or cv::flann::GenericIndex) and have also changed \"\\\n        \"the distance using cvflann::set_distance_type. This is no longer working as expected \"\\\n        \"(cv::flann::Index always uses L2). You should create the index templated on the distance, \"\\\n        \"for example for L1 distance use: GenericIndex< L1<float> > \\n\"); \\\n    }\n\n\ntemplate <typename Distance>\nGenericIndex<Distance>::GenericIndex(const Mat& dataset, const ::cvflann::IndexParams& params, Distance distance)\n{\n    CV_Assert(dataset.type() == CvType<ElementType>::type());\n    CV_Assert(dataset.isContinuous());\n    ::cvflann::Matrix<ElementType> m_dataset((ElementType*)dataset.ptr<ElementType>(0), dataset.rows, dataset.cols);\n\n    nnIndex = new ::cvflann::Index<Distance>(m_dataset, params, distance);\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->buildIndex();\n}\n\ntemplate <typename Distance>\nGenericIndex<Distance>::~GenericIndex()\n{\n    delete nnIndex;\n}\n\ntemplate <typename Distance>\nvoid GenericIndex<Distance>::knnSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n}\n\n\ntemplate <typename Distance>\nvoid GenericIndex<Distance>::knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(queries.type() == CvType<ElementType>::type());\n    CV_Assert(queries.isContinuous());\n    ::cvflann::Matrix<ElementType> m_queries((ElementType*)queries.ptr<ElementType>(0), queries.rows, queries.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    FLANN_DISTANCE_CHECK\n\n    nnIndex->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n}\n\ntemplate <typename Distance>\nint GenericIndex<Distance>::radiusSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    FLANN_DISTANCE_CHECK\n\n    return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\ntemplate <typename Distance>\nint GenericIndex<Distance>::radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(query.type() == CvType<ElementType>::type());\n    CV_Assert(query.isContinuous());\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)query.ptr<ElementType>(0), query.rows, query.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    FLANN_DISTANCE_CHECK\n\n    return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\n/**\n * @deprecated Use GenericIndex class instead\n */\ntemplate <typename T>\nclass\n#ifndef _MSC_VER\n FLANN_DEPRECATED\n#endif\n Index_ {\npublic:\n        typedef typename L2<T>::ElementType ElementType;\n        typedef typename L2<T>::ResultType DistanceType;\n\n    Index_(const Mat& features, const ::cvflann::IndexParams& params);\n\n    ~Index_();\n\n    void knnSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& params);\n    void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params);\n\n    int radiusSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n    int radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& params);\n\n    void save(std::string filename)\n        {\n            if (nnIndex_L1) nnIndex_L1->save(filename);\n            if (nnIndex_L2) nnIndex_L2->save(filename);\n        }\n\n    int veclen() const\n    {\n            if (nnIndex_L1) return nnIndex_L1->veclen();\n            if (nnIndex_L2) return nnIndex_L2->veclen();\n        }\n\n    int size() const\n    {\n            if (nnIndex_L1) return nnIndex_L1->size();\n            if (nnIndex_L2) return nnIndex_L2->size();\n        }\n\n        ::cvflann::IndexParams getParameters()\n        {\n            if (nnIndex_L1) return nnIndex_L1->getParameters();\n            if (nnIndex_L2) return nnIndex_L2->getParameters();\n\n        }\n\n        FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters()\n        {\n            if (nnIndex_L1) return nnIndex_L1->getIndexParameters();\n            if (nnIndex_L2) return nnIndex_L2->getIndexParameters();\n        }\n\nprivate:\n        // providing backwards compatibility for L2 and L1 distances (most common)\n        ::cvflann::Index< L2<ElementType> >* nnIndex_L2;\n        ::cvflann::Index< L1<ElementType> >* nnIndex_L1;\n};\n\n#ifdef _MSC_VER\ntemplate <typename T>\nclass FLANN_DEPRECATED Index_;\n#endif\n\ntemplate <typename T>\nIndex_<T>::Index_(const Mat& dataset, const ::cvflann::IndexParams& params)\n{\n    printf(\"[WARNING] The cv::flann::Index_<T> class is deperecated, use cv::flann::GenericIndex<Distance> instead\\n\");\n\n    CV_Assert(dataset.type() == CvType<ElementType>::type());\n    CV_Assert(dataset.isContinuous());\n    ::cvflann::Matrix<ElementType> m_dataset((ElementType*)dataset.ptr<ElementType>(0), dataset.rows, dataset.cols);\n\n    if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L2 ) {\n        nnIndex_L1 = NULL;\n        nnIndex_L2 = new ::cvflann::Index< L2<ElementType> >(m_dataset, params);\n    }\n    else if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L1 ) {\n        nnIndex_L1 = new ::cvflann::Index< L1<ElementType> >(m_dataset, params);\n        nnIndex_L2 = NULL;\n    }\n    else {\n        printf(\"[ERROR] cv::flann::Index_<T> only provides backwards compatibility for the L1 and L2 distances. \"\n        \"For other distance types you must use cv::flann::GenericIndex<Distance>\\n\");\n        CV_Assert(0);\n    }\n    if (nnIndex_L1) nnIndex_L1->buildIndex();\n    if (nnIndex_L2) nnIndex_L2->buildIndex();\n}\n\ntemplate <typename T>\nIndex_<T>::~Index_()\n{\n    if (nnIndex_L1) delete nnIndex_L1;\n    if (nnIndex_L2) delete nnIndex_L2;\n}\n\ntemplate <typename T>\nvoid Index_<T>::knnSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    if (nnIndex_L1) nnIndex_L1->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n    if (nnIndex_L2) nnIndex_L2->knnSearch(m_query,m_indices,m_dists,knn,searchParams);\n}\n\n\ntemplate <typename T>\nvoid Index_<T>::knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(queries.type() == CvType<ElementType>::type());\n    CV_Assert(queries.isContinuous());\n    ::cvflann::Matrix<ElementType> m_queries((ElementType*)queries.ptr<ElementType>(0), queries.rows, queries.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    if (nnIndex_L1) nnIndex_L1->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n    if (nnIndex_L2) nnIndex_L2->knnSearch(m_queries,m_indices,m_dists,knn, searchParams);\n}\n\ntemplate <typename T>\nint Index_<T>::radiusSearch(const vector<ElementType>& query, vector<int>& indices, vector<DistanceType>& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)&query[0], 1, query.size());\n    ::cvflann::Matrix<int> m_indices(&indices[0], 1, indices.size());\n    ::cvflann::Matrix<DistanceType> m_dists(&dists[0], 1, dists.size());\n\n    if (nnIndex_L1) return nnIndex_L1->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n    if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\ntemplate <typename T>\nint Index_<T>::radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams)\n{\n    CV_Assert(query.type() == CvType<ElementType>::type());\n    CV_Assert(query.isContinuous());\n    ::cvflann::Matrix<ElementType> m_query((ElementType*)query.ptr<ElementType>(0), query.rows, query.cols);\n\n    CV_Assert(indices.type() == CV_32S);\n    CV_Assert(indices.isContinuous());\n    ::cvflann::Matrix<int> m_indices((int*)indices.ptr<int>(0), indices.rows, indices.cols);\n\n    CV_Assert(dists.type() == CvType<DistanceType>::type());\n    CV_Assert(dists.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_dists((DistanceType*)dists.ptr<DistanceType>(0), dists.rows, dists.cols);\n\n    if (nnIndex_L1) return nnIndex_L1->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n    if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);\n}\n\n\ntemplate <typename Distance>\nint hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params,\n                           Distance d = Distance())\n{\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    CV_Assert(features.type() == CvType<ElementType>::type());\n    CV_Assert(features.isContinuous());\n    ::cvflann::Matrix<ElementType> m_features((ElementType*)features.ptr<ElementType>(0), features.rows, features.cols);\n\n    CV_Assert(centers.type() == CvType<DistanceType>::type());\n    CV_Assert(centers.isContinuous());\n    ::cvflann::Matrix<DistanceType> m_centers((DistanceType*)centers.ptr<DistanceType>(0), centers.rows, centers.cols);\n\n    return ::cvflann::hierarchicalClustering<Distance>(m_features, m_centers, params, d);\n}\n\n\ntemplate <typename ELEM_TYPE, typename DIST_TYPE>\nFLANN_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params)\n{\n    printf(\"[WARNING] cv::flann::hierarchicalClustering<ELEM_TYPE,DIST_TYPE> is deprecated, use \"\n        \"cv::flann::hierarchicalClustering<Distance> instead\\n\");\n\n    if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L2 ) {\n        return hierarchicalClustering< L2<ELEM_TYPE> >(features, centers, params);\n    }\n    else if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L1 ) {\n        return hierarchicalClustering< L1<ELEM_TYPE> >(features, centers, params);\n    }\n    else {\n        printf(\"[ERROR] cv::flann::hierarchicalClustering<ELEM_TYPE,DIST_TYPE> only provides backwards \"\n        \"compatibility for the L1 and L2 distances. \"\n        \"For other distance types you must use cv::flann::hierarchicalClustering<Distance>\\n\");\n        CV_Assert(0);\n    }\n}\n\n} } // namespace cv::flann\n\n#endif // __cplusplus\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/flann_base.hpp",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_BASE_HPP_\n#define OPENCV_FLANN_BASE_HPP_\n\n#include <vector>\n#include <string>\n#include <cassert>\n#include <cstdio>\n\n#include \"general.h\"\n#include \"matrix.h\"\n#include \"params.h\"\n#include \"saving.h\"\n\n#include \"all_indices.h\"\n\nnamespace cvflann\n{\n\n/**\n * Sets the log level used for all flann functions\n * @param level Verbosity level\n */\ninline void log_verbosity(int level)\n{\n    if (level >= 0) {\n        Logger::setLevel(level);\n    }\n}\n\n/**\n * (Deprecated) Index parameters for creating a saved index.\n */\nstruct SavedIndexParams : public IndexParams\n{\n    SavedIndexParams(std::string filename)\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_SAVED;\n        (*this)[\"filename\"] = filename;\n    }\n};\n\n\ntemplate<typename Distance>\nNNIndex<Distance>* load_saved_index(const Matrix<typename Distance::ElementType>& dataset, const std::string& filename, Distance distance)\n{\n    typedef typename Distance::ElementType ElementType;\n\n    FILE* fin = fopen(filename.c_str(), \"rb\");\n    if (fin == NULL) {\n        return NULL;\n    }\n    IndexHeader header = load_header(fin);\n    if (header.data_type != Datatype<ElementType>::type()) {\n        throw FLANNException(\"Datatype of saved index is different than of the one to be created.\");\n    }\n    if ((size_t(header.rows) != dataset.rows)||(size_t(header.cols) != dataset.cols)) {\n        throw FLANNException(\"The index saved belongs to a different dataset\");\n    }\n\n    IndexParams params;\n    params[\"algorithm\"] = header.index_type;\n    NNIndex<Distance>* nnIndex = create_index_by_type<Distance>(dataset, params, distance);\n    nnIndex->loadIndex(fin);\n    fclose(fin);\n\n    return nnIndex;\n}\n\n\ntemplate<typename Distance>\nclass Index : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    Index(const Matrix<ElementType>& features, const IndexParams& params, Distance distance = Distance() )\n        : index_params_(params)\n    {\n        flann_algorithm_t index_type = get_param<flann_algorithm_t>(params,\"algorithm\");\n        loaded_ = false;\n\n        if (index_type == FLANN_INDEX_SAVED) {\n            nnIndex_ = load_saved_index<Distance>(features, get_param<std::string>(params,\"filename\"), distance);\n            loaded_ = true;\n        }\n        else {\n            nnIndex_ = create_index_by_type<Distance>(features, params, distance);\n        }\n    }\n\n    ~Index()\n    {\n        delete nnIndex_;\n    }\n\n    /**\n     * Builds the index.\n     */\n    void buildIndex()\n    {\n        if (!loaded_) {\n            nnIndex_->buildIndex();\n        }\n    }\n\n    void save(std::string filename)\n    {\n        FILE* fout = fopen(filename.c_str(), \"wb\");\n        if (fout == NULL) {\n            throw FLANNException(\"Cannot open file\");\n        }\n        save_header(fout, *nnIndex_);\n        saveIndex(fout);\n        fclose(fout);\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    virtual void saveIndex(FILE* stream)\n    {\n        nnIndex_->saveIndex(stream);\n    }\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    virtual void loadIndex(FILE* stream)\n    {\n        nnIndex_->loadIndex(stream);\n    }\n\n    /**\n     * \\returns number of features in this index.\n     */\n    size_t veclen() const\n    {\n        return nnIndex_->veclen();\n    }\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    size_t size() const\n    {\n        return nnIndex_->size();\n    }\n\n    /**\n     * \\returns The index type (kdtree, kmeans,...)\n     */\n    flann_algorithm_t getType() const\n    {\n        return nnIndex_->getType();\n    }\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    virtual int usedMemory() const\n    {\n        return nnIndex_->usedMemory();\n    }\n\n\n    /**\n     * \\returns The index parameters\n     */\n    IndexParams getParameters() const\n    {\n        return nnIndex_->getParameters();\n    }\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        nnIndex_->knnSearch(queries, indices, dists, knn, params);\n    }\n\n    /**\n     * \\brief Perform radius search\n     * \\param[in] query The query point\n     * \\param[out] indices The indinces of the neighbors found within the given radius\n     * \\param[out] dists The distances to the nearest neighbors found\n     * \\param[in] radius The radius used for search\n     * \\param[in] params Search parameters\n     * \\returns Number of neighbors found\n     */\n    int radiusSearch(const Matrix<ElementType>& query, Matrix<int>& indices, Matrix<DistanceType>& dists, float radius, const SearchParams& params)\n    {\n        return nnIndex_->radiusSearch(query, indices, dists, radius, params);\n    }\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        nnIndex_->findNeighbors(result, vec, searchParams);\n    }\n\n    /**\n     * \\brief Returns actual index\n     */\n    FLANN_DEPRECATED NNIndex<Distance>* getIndex()\n    {\n        return nnIndex_;\n    }\n\n    /**\n     * \\brief Returns index parameters.\n     * \\deprecated use getParameters() instead.\n     */\n    FLANN_DEPRECATED  const IndexParams* getIndexParameters()\n    {\n        return &index_params_;\n    }\n\nprivate:\n    /** Pointer to actual index class */\n    NNIndex<Distance>* nnIndex_;\n    /** Indices if the index was loaded from a file */\n    bool loaded_;\n    /** Parameters passed to the index */\n    IndexParams index_params_;\n};\n\n/**\n * Performs a hierarchical clustering of the points passed as argument and then takes a cut in the\n * the clustering tree to return a flat clustering.\n * @param[in] points Points to be clustered\n * @param centers The computed cluster centres. Matrix should be preallocated and centers.rows is the\n *  number of clusters requested.\n * @param params Clustering parameters (The same as for cvflann::KMeansIndex)\n * @param d Distance to be used for clustering (eg: cvflann::L2)\n * @return number of clusters computed (can be different than clusters.rows and is the highest number\n * of the form (branching-1)*K+1 smaller than clusters.rows).\n */\ntemplate <typename Distance>\nint hierarchicalClustering(const Matrix<typename Distance::ElementType>& points, Matrix<typename Distance::ResultType>& centers,\n                           const KMeansIndexParams& params, Distance d = Distance())\n{\n    KMeansIndex<Distance> kmeans(points, params, d);\n    kmeans.buildIndex();\n\n    int clusterNum = kmeans.getClusterCenters(centers);\n    return clusterNum;\n}\n\n}\n#endif /* OPENCV_FLANN_BASE_HPP_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/general.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_GENERAL_H_\n#define OPENCV_FLANN_GENERAL_H_\n\n#include \"defines.h\"\n#include <stdexcept>\n#include <cassert>\n\nnamespace cvflann\n{\n\nclass FLANNException : public std::runtime_error\n{\npublic:\n    FLANNException(const char* message) : std::runtime_error(message) { }\n\n    FLANNException(const std::string& message) : std::runtime_error(message) { }\n};\n\n}\n\n\n#endif  /* OPENCV_FLANN_GENERAL_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/ground_truth.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_GROUND_TRUTH_H_\n#define OPENCV_FLANN_GROUND_TRUTH_H_\n\n#include \"dist.h\"\n#include \"matrix.h\"\n\n\nnamespace cvflann\n{\n\ntemplate <typename Distance>\nvoid find_nearest(const Matrix<typename Distance::ElementType>& dataset, typename Distance::ElementType* query, int* matches, int nn,\n                  int skip = 0, Distance distance = Distance())\n{\n    typedef typename Distance::ResultType DistanceType;\n    int n = nn + skip;\n\n    std::vector<int> match(n);\n    std::vector<DistanceType> dists(n);\n\n    dists[0] = distance(dataset[0], query, dataset.cols);\n    match[0] = 0;\n    int dcnt = 1;\n\n    for (size_t i=1; i<dataset.rows; ++i) {\n        DistanceType tmp = distance(dataset[i], query, dataset.cols);\n\n        if (dcnt<n) {\n            match[dcnt] = (int)i;\n            dists[dcnt++] = tmp;\n        }\n        else if (tmp < dists[dcnt-1]) {\n            dists[dcnt-1] = tmp;\n            match[dcnt-1] = (int)i;\n        }\n\n        int j = dcnt-1;\n        // bubble up\n        while (j>=1 && dists[j]<dists[j-1]) {\n            std::swap(dists[j],dists[j-1]);\n            std::swap(match[j],match[j-1]);\n            j--;\n        }\n    }\n\n    for (int i=0; i<nn; ++i) {\n        matches[i] = match[i+skip];\n    }\n}\n\n\ntemplate <typename Distance>\nvoid compute_ground_truth(const Matrix<typename Distance::ElementType>& dataset, const Matrix<typename Distance::ElementType>& testset, Matrix<int>& matches,\n                          int skip=0, Distance d = Distance())\n{\n    for (size_t i=0; i<testset.rows; ++i) {\n        find_nearest<Distance>(dataset, testset[i], matches[i], (int)matches.cols, skip, d);\n    }\n}\n\n\n}\n\n#endif //OPENCV_FLANN_GROUND_TRUTH_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/hdf5.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_HDF5_H_\n#define OPENCV_FLANN_HDF5_H_\n\n#include <hdf5.h>\n\n#include \"matrix.h\"\n\n\nnamespace cvflann\n{\n\nnamespace\n{\n\ntemplate<typename T>\nhid_t get_hdf5_type()\n{\n    throw FLANNException(\"Unsupported type for IO operations\");\n}\n\ntemplate<>\nhid_t get_hdf5_type<char>() { return H5T_NATIVE_CHAR; }\ntemplate<>\nhid_t get_hdf5_type<unsigned char>() { return H5T_NATIVE_UCHAR; }\ntemplate<>\nhid_t get_hdf5_type<short int>() { return H5T_NATIVE_SHORT; }\ntemplate<>\nhid_t get_hdf5_type<unsigned short int>() { return H5T_NATIVE_USHORT; }\ntemplate<>\nhid_t get_hdf5_type<int>() { return H5T_NATIVE_INT; }\ntemplate<>\nhid_t get_hdf5_type<unsigned int>() { return H5T_NATIVE_UINT; }\ntemplate<>\nhid_t get_hdf5_type<long>() { return H5T_NATIVE_LONG; }\ntemplate<>\nhid_t get_hdf5_type<unsigned long>() { return H5T_NATIVE_ULONG; }\ntemplate<>\nhid_t get_hdf5_type<float>() { return H5T_NATIVE_FLOAT; }\ntemplate<>\nhid_t get_hdf5_type<double>() { return H5T_NATIVE_DOUBLE; }\n}\n\n\n#define CHECK_ERROR(x,y) if ((x)<0) throw FLANNException((y));\n\ntemplate<typename T>\nvoid save_to_file(const cvflann::Matrix<T>& dataset, const std::string& filename, const std::string& name)\n{\n\n#if H5Eset_auto_vers == 2\n    H5Eset_auto( H5E_DEFAULT, NULL, NULL );\n#else\n    H5Eset_auto( NULL, NULL );\n#endif\n\n    herr_t status;\n    hid_t file_id;\n    file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);\n    if (file_id < 0) {\n        file_id = H5Fcreate(filename.c_str(), H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);\n    }\n    CHECK_ERROR(file_id,\"Error creating hdf5 file.\");\n\n    hsize_t     dimsf[2];              // dataset dimensions\n    dimsf[0] = dataset.rows;\n    dimsf[1] = dataset.cols;\n\n    hid_t space_id = H5Screate_simple(2, dimsf, NULL);\n    hid_t memspace_id = H5Screate_simple(2, dimsf, NULL);\n\n    hid_t dataset_id;\n#if H5Dcreate_vers == 2\n    dataset_id = H5Dcreate2(file_id, name.c_str(), get_hdf5_type<T>(), space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);\n#else\n    dataset_id = H5Dcreate(file_id, name.c_str(), get_hdf5_type<T>(), space_id, H5P_DEFAULT);\n#endif\n\n    if (dataset_id<0) {\n#if H5Dopen_vers == 2\n        dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n        dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    }\n    CHECK_ERROR(dataset_id,\"Error creating or opening dataset in file.\");\n\n    status = H5Dwrite(dataset_id, get_hdf5_type<T>(), memspace_id, space_id, H5P_DEFAULT, dataset.data );\n    CHECK_ERROR(status, \"Error writing to dataset\");\n\n    H5Sclose(memspace_id);\n    H5Sclose(space_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n\n}\n\n\ntemplate<typename T>\nvoid load_from_file(cvflann::Matrix<T>& dataset, const std::string& filename, const std::string& name)\n{\n    herr_t status;\n    hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);\n    CHECK_ERROR(file_id,\"Error opening hdf5 file.\");\n\n    hid_t dataset_id;\n#if H5Dopen_vers == 2\n    dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n    dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    CHECK_ERROR(dataset_id,\"Error opening dataset in file.\");\n\n    hid_t space_id = H5Dget_space(dataset_id);\n\n    hsize_t dims_out[2];\n    H5Sget_simple_extent_dims(space_id, dims_out, NULL);\n\n    dataset = cvflann::Matrix<T>(new T[dims_out[0]*dims_out[1]], dims_out[0], dims_out[1]);\n\n    status = H5Dread(dataset_id, get_hdf5_type<T>(), H5S_ALL, H5S_ALL, H5P_DEFAULT, dataset[0]);\n    CHECK_ERROR(status, \"Error reading dataset\");\n\n    H5Sclose(space_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n}\n\n\n#ifdef HAVE_MPI\n\nnamespace mpi\n{\n/**\n * Loads a the hyperslice corresponding to this processor from a hdf5 file.\n * @param flann_dataset Dataset where the data is loaded\n * @param filename HDF5 file name\n * @param name Name of dataset inside file\n */\ntemplate<typename T>\nvoid load_from_file(cvflann::Matrix<T>& dataset, const std::string& filename, const std::string& name)\n{\n    MPI_Comm comm  = MPI_COMM_WORLD;\n    MPI_Info info  = MPI_INFO_NULL;\n\n    int mpi_size, mpi_rank;\n    MPI_Comm_size(comm, &mpi_size);\n    MPI_Comm_rank(comm, &mpi_rank);\n\n    herr_t status;\n\n    hid_t plist_id = H5Pcreate(H5P_FILE_ACCESS);\n    H5Pset_fapl_mpio(plist_id, comm, info);\n    hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, plist_id);\n    CHECK_ERROR(file_id,\"Error opening hdf5 file.\");\n    H5Pclose(plist_id);\n    hid_t dataset_id;\n#if H5Dopen_vers == 2\n    dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);\n#else\n    dataset_id = H5Dopen(file_id, name.c_str());\n#endif\n    CHECK_ERROR(dataset_id,\"Error opening dataset in file.\");\n\n    hid_t space_id = H5Dget_space(dataset_id);\n    hsize_t dims[2];\n    H5Sget_simple_extent_dims(space_id, dims, NULL);\n\n    hsize_t count[2];\n    hsize_t offset[2];\n\n    hsize_t item_cnt = dims[0]/mpi_size+(dims[0]%mpi_size==0 ? 0 : 1);\n    hsize_t cnt = (mpi_rank<mpi_size-1 ? item_cnt : dims[0]-item_cnt*(mpi_size-1));\n\n    count[0] = cnt;\n    count[1] = dims[1];\n    offset[0] = mpi_rank*item_cnt;\n    offset[1] = 0;\n\n    hid_t memspace_id = H5Screate_simple(2,count,NULL);\n\n    H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, NULL, count, NULL);\n\n    dataset.rows = count[0];\n    dataset.cols = count[1];\n    dataset.data = new T[dataset.rows*dataset.cols];\n\n    plist_id = H5Pcreate(H5P_DATASET_XFER);\n    H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE);\n    status = H5Dread(dataset_id, get_hdf5_type<T>(), memspace_id, space_id, plist_id, dataset.data);\n    CHECK_ERROR(status, \"Error reading dataset\");\n\n    H5Pclose(plist_id);\n    H5Sclose(space_id);\n    H5Sclose(memspace_id);\n    H5Dclose(dataset_id);\n    H5Fclose(file_id);\n}\n}\n#endif // HAVE_MPI\n} // namespace cvflann::mpi\n\n#endif /* OPENCV_FLANN_HDF5_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/heap.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_HEAP_H_\n#define OPENCV_FLANN_HEAP_H_\n\n#include <algorithm>\n#include <vector>\n\nnamespace cvflann\n{\n\n/**\n * Priority Queue Implementation\n *\n * The priority queue is implemented with a heap.  A heap is a complete\n * (full) binary tree in which each parent is less than both of its\n * children, but the order of the children is unspecified.\n */\ntemplate <typename T>\nclass Heap\n{\n\n    /**\n     * Storage array for the heap.\n     * Type T must be comparable.\n     */\n    std::vector<T> heap;\n    int length;\n\n    /**\n     * Number of element in the heap\n     */\n    int count;\n\n\n\npublic:\n    /**\n     * Constructor.\n     *\n     * Params:\n     *     sz = heap size\n     */\n\n    Heap(int sz)\n    {\n        length = sz;\n        heap.reserve(length);\n        count = 0;\n    }\n\n    /**\n     *\n     * Returns: heap size\n     */\n    int size()\n    {\n        return count;\n    }\n\n    /**\n     * Tests if the heap is empty\n     *\n     * Returns: true is heap empty, false otherwise\n     */\n    bool empty()\n    {\n        return size()==0;\n    }\n\n    /**\n     * Clears the heap.\n     */\n    void clear()\n    {\n        heap.clear();\n        count = 0;\n    }\n\n    struct CompareT\n    {\n        bool operator()(const T& t_1, const T& t_2) const\n        {\n            return t_2 < t_1;\n        }\n    };\n\n    /**\n     * Insert a new element in the heap.\n     *\n     * We select the next empty leaf node, and then keep moving any larger\n     * parents down until the right location is found to store this element.\n     *\n     * Params:\n     *     value = the new element to be inserted in the heap\n     */\n    void insert(T value)\n    {\n        /* If heap is full, then return without adding this element. */\n        if (count == length) {\n            return;\n        }\n\n        heap.push_back(value);\n        static CompareT compareT;\n        std::push_heap(heap.begin(), heap.end(), compareT);\n        ++count;\n    }\n\n\n\n    /**\n     * Returns the node of minimum value from the heap (top of the heap).\n     *\n     * Params:\n     *     value = out parameter used to return the min element\n     * Returns: false if heap empty\n     */\n    bool popMin(T& value)\n    {\n        if (count == 0) {\n            return false;\n        }\n\n        value = heap[0];\n        static CompareT compareT;\n        std::pop_heap(heap.begin(), heap.end(), compareT);\n        heap.pop_back();\n        --count;\n\n        return true;  /* Return old last node. */\n    }\n};\n\n}\n\n#endif //OPENCV_FLANN_HEAP_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/hierarchical_clustering_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_\n#define OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_\n\n#include <algorithm>\n#include <string>\n#include <map>\n#include <cassert>\n#include <limits>\n#include <cmath>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dist.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\n\nnamespace cvflann\n{\n\nstruct HierarchicalClusteringIndexParams : public IndexParams\n{\n    HierarchicalClusteringIndexParams(int branching = 32,\n                                      flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM,\n                                      int trees = 4, int leaf_size = 100)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_HIERARCHICAL;\n        // The branching factor used in the hierarchical clustering\n        (*this)[\"branching\"] = branching;\n        // Algorithm used for picking the initial cluster centers\n        (*this)[\"centers_init\"] = centers_init;\n        // number of parallel trees to build\n        (*this)[\"trees\"] = trees;\n        // maximum leaf size\n        (*this)[\"leaf_size\"] = leaf_size;\n    }\n};\n\n\n/**\n * Hierarchical index\n *\n * Contains a tree constructed through a hierarchical clustering\n * and other information for indexing a set of points for nearest-neighbour matching.\n */\ntemplate <typename Distance>\nclass HierarchicalClusteringIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\nprivate:\n\n\n    typedef void (HierarchicalClusteringIndex::* centersAlgFunction)(int, int*, int, int*, int&);\n\n    /**\n     * The function used for choosing the cluster centers.\n     */\n    centersAlgFunction chooseCenters;\n\n\n\n    /**\n     * Chooses the initial centers in the k-means clustering in a random manner.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     *     indices_length = length of indices vector\n     *\n     */\n    void chooseCentersRandom(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        UniqueRandom r(indices_length);\n\n        int index;\n        for (index=0; index<k; ++index) {\n            bool duplicate = true;\n            int rnd;\n            while (duplicate) {\n                duplicate = false;\n                rnd = r.next();\n                if (rnd<0) {\n                    centers_length = index;\n                    return;\n                }\n\n                centers[index] = dsindices[rnd];\n\n                for (int j=0; j<index; ++j) {\n                    DistanceType sq = distance(dataset[centers[index]], dataset[centers[j]], dataset.cols);\n                    if (sq<1e-16) {\n                        duplicate = true;\n                    }\n                }\n            }\n        }\n\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using Gonzales' algorithm\n     * so that the centers are spaced apart from each other.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersGonzales(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        int rnd = rand_int(n);\n        assert(rnd >=0 && rnd < n);\n\n        centers[0] = dsindices[rnd];\n\n        int index;\n        for (index=1; index<k; ++index) {\n\n            int best_index = -1;\n            DistanceType best_val = 0;\n            for (int j=0; j<n; ++j) {\n                DistanceType dist = distance(dataset[centers[0]],dataset[dsindices[j]],dataset.cols);\n                for (int i=1; i<index; ++i) {\n                    DistanceType tmp_dist = distance(dataset[centers[i]],dataset[dsindices[j]],dataset.cols);\n                    if (tmp_dist<dist) {\n                        dist = tmp_dist;\n                    }\n                }\n                if (dist>best_val) {\n                    best_val = dist;\n                    best_index = j;\n                }\n            }\n            if (best_index!=-1) {\n                centers[index] = dsindices[best_index];\n            }\n            else {\n                break;\n            }\n        }\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using the algorithm\n     * proposed in the KMeans++ paper:\n     * Arthur, David; Vassilvitskii, Sergei - k-means++: The Advantages of Careful Seeding\n     *\n     * Implementation of this function was converted from the one provided in Arthur's code.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersKMeanspp(int k, int* dsindices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        double currentPot = 0;\n        DistanceType* closestDistSq = new DistanceType[n];\n\n        // Choose one random center and set the closestDistSq values\n        int index = rand_int(n);\n        assert(index >=0 && index < n);\n        centers[0] = dsindices[index];\n\n        for (int i = 0; i < n; i++) {\n            closestDistSq[i] = distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols);\n            currentPot += closestDistSq[i];\n        }\n\n\n        const int numLocalTries = 1;\n\n        // Choose each center\n        int centerCount;\n        for (centerCount = 1; centerCount < k; centerCount++) {\n\n            // Repeat several trials\n            double bestNewPot = -1;\n            int bestNewIndex = 0;\n            for (int localTrial = 0; localTrial < numLocalTries; localTrial++) {\n\n                // Choose our center - have to be slightly careful to return a valid answer even accounting\n                // for possible rounding errors\n                double randVal = rand_double(currentPot);\n                for (index = 0; index < n-1; index++) {\n                    if (randVal <= closestDistSq[index]) break;\n                    else randVal -= closestDistSq[index];\n                }\n\n                // Compute the new potential\n                double newPot = 0;\n                for (int i = 0; i < n; i++) newPot += std::min( distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols), closestDistSq[i] );\n\n                // Store the best result\n                if ((bestNewPot < 0)||(newPot < bestNewPot)) {\n                    bestNewPot = newPot;\n                    bestNewIndex = index;\n                }\n            }\n\n            // Add the appropriate center\n            centers[centerCount] = dsindices[bestNewIndex];\n            currentPot = bestNewPot;\n            for (int i = 0; i < n; i++) closestDistSq[i] = std::min( distance(dataset[dsindices[i]], dataset[dsindices[bestNewIndex]], dataset.cols), closestDistSq[i] );\n        }\n\n        centers_length = centerCount;\n\n        delete[] closestDistSq;\n    }\n\n\npublic:\n\n\n    /**\n     * Index constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the hierarchical k-means algorithm\n     */\n    HierarchicalClusteringIndex(const Matrix<ElementType>& inputData, const IndexParams& index_params = HierarchicalClusteringIndexParams(),\n                                Distance d = Distance())\n        : dataset(inputData), params(index_params), root(NULL), indices(NULL), distance(d)\n    {\n        memoryCounter = 0;\n\n        size_ = dataset.rows;\n        veclen_ = dataset.cols;\n\n        branching_ = get_param(params,\"branching\",32);\n        centers_init_ = get_param(params,\"centers_init\", FLANN_CENTERS_RANDOM);\n        trees_ = get_param(params,\"trees\",4);\n        leaf_size_ = get_param(params,\"leaf_size\",100);\n\n        if (centers_init_==FLANN_CENTERS_RANDOM) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersRandom;\n        }\n        else if (centers_init_==FLANN_CENTERS_GONZALES) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersGonzales;\n        }\n        else if (centers_init_==FLANN_CENTERS_KMEANSPP) {\n            chooseCenters = &HierarchicalClusteringIndex::chooseCentersKMeanspp;\n        }\n        else {\n            throw FLANNException(\"Unknown algorithm for choosing initial centers.\");\n        }\n\n        trees_ = get_param(params,\"trees\",4);\n        root = new NodePtr[trees_];\n        indices = new int*[trees_];\n\n        for (int i=0; i<trees_; ++i) {\n            root[i] = NULL;\n            indices[i] = NULL;\n        }\n    }\n\n    HierarchicalClusteringIndex(const HierarchicalClusteringIndex&);\n    HierarchicalClusteringIndex& operator=(const HierarchicalClusteringIndex&);\n\n    /**\n     * Index destructor.\n     *\n     * Release the memory used by the index.\n     */\n    virtual ~HierarchicalClusteringIndex()\n    {\n        free_elements();\n\n        if (root!=NULL) {\n            delete[] root;\n        }\n\n        if (indices!=NULL) {\n            delete[] indices;\n        }\n    }\n\n\n    /**\n     * Release the inner elements of indices[]\n     */\n    void free_elements()\n    {\n        if (indices!=NULL) {\n            for(int i=0; i<trees_; ++i) {\n                if (indices[i]!=NULL) {\n                    delete[] indices[i];\n                    indices[i] = NULL;\n                }\n            }\n        }\n    }\n\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return pool.usedMemory+pool.wastedMemory+memoryCounter;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        if (branching_<2) {\n            throw FLANNException(\"Branching factor must be at least 2\");\n        }\n\n        free_elements();\n\n        for (int i=0; i<trees_; ++i) {\n            indices[i] = new int[size_];\n            for (size_t j=0; j<size_; ++j) {\n                indices[i][j] = (int)j;\n            }\n            root[i] = pool.allocate<Node>();\n            computeClustering(root[i], indices[i], (int)size_, branching_,0);\n        }\n    }\n\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_HIERARCHICAL;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, branching_);\n        save_value(stream, trees_);\n        save_value(stream, centers_init_);\n        save_value(stream, leaf_size_);\n        save_value(stream, memoryCounter);\n        for (int i=0; i<trees_; ++i) {\n            save_value(stream, *indices[i], size_);\n            save_tree(stream, root[i], i);\n        }\n\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        free_elements();\n\n        if (root!=NULL) {\n            delete[] root;\n        }\n\n        if (indices!=NULL) {\n            delete[] indices;\n        }\n\n        load_value(stream, branching_);\n        load_value(stream, trees_);\n        load_value(stream, centers_init_);\n        load_value(stream, leaf_size_);\n        load_value(stream, memoryCounter);\n\n        indices = new int*[trees_];\n        root = new NodePtr[trees_];\n        for (int i=0; i<trees_; ++i) {\n            indices[i] = new int[size_];\n            load_value(stream, *indices[i], size_);\n            load_tree(stream, root[i], i);\n        }\n\n        params[\"algorithm\"] = getType();\n        params[\"branching\"] = branching_;\n        params[\"trees\"] = trees_;\n        params[\"centers_init\"] = centers_init_;\n        params[\"leaf_size\"] = leaf_size_;\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     searchParams = parameters that influence the search algorithm (checks)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n\n        int maxChecks = get_param(searchParams,\"checks\",32);\n\n        // Priority queue storing intermediate branches in the best-bin-first search\n        Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n\n        std::vector<bool> checked(size_,false);\n        int checks = 0;\n        for (int i=0; i<trees_; ++i) {\n            findNN(root[i], result, vec, checks, maxChecks, heap, checked);\n        }\n\n        BranchSt branch;\n        while (heap->popMin(branch) && (checks<maxChecks || !result.full())) {\n            NodePtr node = branch.node;\n            findNN(node, result, vec, checks, maxChecks, heap, checked);\n        }\n        assert(result.full());\n\n        delete heap;\n\n    }\n\n    IndexParams getParameters() const\n    {\n        return params;\n    }\n\n\nprivate:\n\n    /**\n     * Struture representing a node in the hierarchical k-means tree.\n     */\n    struct Node\n    {\n        /**\n         * The cluster center index\n         */\n        int pivot;\n        /**\n         * The cluster size (number of points in the cluster)\n         */\n        int size;\n        /**\n         * Child nodes (only for non-terminal nodes)\n         */\n        Node** childs;\n        /**\n         * Node points (only for terminal nodes)\n         */\n        int* indices;\n        /**\n         * Level\n         */\n        int level;\n    };\n    typedef Node* NodePtr;\n\n\n\n    /**\n     * Alias definition for a nicer syntax.\n     */\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n\n\n\n    void save_tree(FILE* stream, NodePtr node, int num)\n    {\n        save_value(stream, *node);\n        if (node->childs==NULL) {\n            int indices_offset = (int)(node->indices - indices[num]);\n            save_value(stream, indices_offset);\n        }\n        else {\n            for(int i=0; i<branching_; ++i) {\n                save_tree(stream, node->childs[i], num);\n            }\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& node, int num)\n    {\n        node = pool.allocate<Node>();\n        load_value(stream, *node);\n        if (node->childs==NULL) {\n            int indices_offset;\n            load_value(stream, indices_offset);\n            node->indices = indices[num] + indices_offset;\n        }\n        else {\n            node->childs = pool.allocate<NodePtr>(branching_);\n            for(int i=0; i<branching_; ++i) {\n                load_tree(stream, node->childs[i], num);\n            }\n        }\n    }\n\n\n\n\n    void computeLabels(int* dsindices, int indices_length,  int* centers, int centers_length, int* labels, DistanceType& cost)\n    {\n        cost = 0;\n        for (int i=0; i<indices_length; ++i) {\n            ElementType* point = dataset[dsindices[i]];\n            DistanceType dist = distance(point, dataset[centers[0]], veclen_);\n            labels[i] = 0;\n            for (int j=1; j<centers_length; ++j) {\n                DistanceType new_dist = distance(point, dataset[centers[j]], veclen_);\n                if (dist>new_dist) {\n                    labels[i] = j;\n                    dist = new_dist;\n                }\n            }\n            cost += dist;\n        }\n    }\n\n    /**\n     * The method responsible with actually doing the recursive hierarchical\n     * clustering\n     *\n     * Params:\n     *     node = the node to cluster\n     *     indices = indices of the points belonging to the current node\n     *     branching = the branching factor to use in the clustering\n     *\n     * TODO: for 1-sized clusters don't store a cluster center (it's the same as the single cluster point)\n     */\n    void computeClustering(NodePtr node, int* dsindices, int indices_length, int branching, int level)\n    {\n        node->size = indices_length;\n        node->level = level;\n\n        if (indices_length < leaf_size_) { // leaf node\n            node->indices = dsindices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n        std::vector<int> centers(branching);\n        std::vector<int> labels(indices_length);\n\n        int centers_length;\n        (this->*chooseCenters)(branching, dsindices, indices_length, &centers[0], centers_length);\n\n        if (centers_length<branching) {\n            node->indices = dsindices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n\n        //\tassign points to clusters\n        DistanceType cost;\n        computeLabels(dsindices, indices_length, &centers[0], centers_length, &labels[0], cost);\n\n        node->childs = pool.allocate<NodePtr>(branching);\n        int start = 0;\n        int end = start;\n        for (int i=0; i<branching; ++i) {\n            for (int j=0; j<indices_length; ++j) {\n                if (labels[j]==i) {\n                    std::swap(dsindices[j],dsindices[end]);\n                    std::swap(labels[j],labels[end]);\n                    end++;\n                }\n            }\n\n            node->childs[i] = pool.allocate<Node>();\n            node->childs[i]->pivot = centers[i];\n            node->childs[i]->indices = NULL;\n            computeClustering(node->childs[i],dsindices+start, end-start, branching, level+1);\n            start=end;\n        }\n    }\n\n\n\n    /**\n     * Performs one descent in the hierarchical k-means tree. The branches not\n     * visited are stored in a priority queue.\n     *\n     * Params:\n     *      node = node to explore\n     *      result = container for the k-nearest neighbors found\n     *      vec = query points\n     *      checks = how many points in the dataset have been checked so far\n     *      maxChecks = maximum dataset points to checks\n     */\n\n\n    void findNN(NodePtr node, ResultSet<DistanceType>& result, const ElementType* vec, int& checks, int maxChecks,\n                Heap<BranchSt>* heap, std::vector<bool>& checked)\n    {\n        if (node->childs==NULL) {\n            if (checks>=maxChecks) {\n                if (result.full()) return;\n            }\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                if (!checked[index]) {\n                    DistanceType dist = distance(dataset[index], vec, veclen_);\n                    result.addPoint(dist, index);\n                    checked[index] = true;\n                    ++checks;\n                }\n            }\n        }\n        else {\n            DistanceType* domain_distances = new DistanceType[branching_];\n            int best_index = 0;\n            domain_distances[best_index] = distance(vec, dataset[node->childs[best_index]->pivot], veclen_);\n            for (int i=1; i<branching_; ++i) {\n                domain_distances[i] = distance(vec, dataset[node->childs[i]->pivot], veclen_);\n                if (domain_distances[i]<domain_distances[best_index]) {\n                    best_index = i;\n                }\n            }\n            for (int i=0; i<branching_; ++i) {\n                if (i!=best_index) {\n                    heap->insert(BranchSt(node->childs[i],domain_distances[i]));\n                }\n            }\n            delete[] domain_distances;\n            findNN(node->childs[best_index],result,vec, checks, maxChecks, heap, checked);\n        }\n    }\n\nprivate:\n\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset;\n\n    /**\n     * Parameters used by this index\n     */\n    IndexParams params;\n\n\n    /**\n     * Number of features in the dataset.\n     */\n    size_t size_;\n\n    /**\n     * Length of each feature.\n     */\n    size_t veclen_;\n\n    /**\n     * The root node in the tree.\n     */\n    NodePtr* root;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    int** indices;\n\n\n    /**\n     * The distance\n     */\n    Distance distance;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool;\n\n    /**\n     * Memory occupied by the index.\n     */\n    int memoryCounter;\n\n    /** index parameters */\n    int branching_;\n    int trees_;\n    flann_centers_init_t centers_init_;\n    int leaf_size_;\n\n\n};\n\n}\n\n#endif /* OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/index_testing.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_INDEX_TESTING_H_\n#define OPENCV_FLANN_INDEX_TESTING_H_\n\n#include <cstring>\n#include <cassert>\n#include <cmath>\n\n#include \"matrix.h\"\n#include \"nn_index.h\"\n#include \"result_set.h\"\n#include \"logger.h\"\n#include \"timer.h\"\n\n\nnamespace cvflann\n{\n\ninline int countCorrectMatches(int* neighbors, int* groundTruth, int n)\n{\n    int count = 0;\n    for (int i=0; i<n; ++i) {\n        for (int k=0; k<n; ++k) {\n            if (neighbors[i]==groundTruth[k]) {\n                count++;\n                break;\n            }\n        }\n    }\n    return count;\n}\n\n\ntemplate <typename Distance>\ntypename Distance::ResultType computeDistanceRaport(const Matrix<typename Distance::ElementType>& inputData, typename Distance::ElementType* target,\n                                                    int* neighbors, int* groundTruth, int veclen, int n, const Distance& distance)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    DistanceType ret = 0;\n    for (int i=0; i<n; ++i) {\n        DistanceType den = distance(inputData[groundTruth[i]], target, veclen);\n        DistanceType num = distance(inputData[neighbors[i]], target, veclen);\n\n        if ((den==0)&&(num==0)) {\n            ret += 1;\n        }\n        else {\n            ret += num/den;\n        }\n    }\n\n    return ret;\n}\n\ntemplate <typename Distance>\nfloat search_with_ground_truth(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                               const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches, int nn, int checks,\n                               float& time, typename Distance::ResultType& dist, const Distance& distance, int skipMatches)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    if (matches.cols<size_t(nn)) {\n        Logger::info(\"matches.cols=%d, nn=%d\\n\",matches.cols,nn);\n\n        throw FLANNException(\"Ground truth is not computed for as many neighbors as requested\");\n    }\n\n    KNNResultSet<DistanceType> resultSet(nn+skipMatches);\n    SearchParams searchParams(checks);\n\n    std::vector<int> indices(nn+skipMatches);\n    std::vector<DistanceType> dists(nn+skipMatches);\n    int* neighbors = &indices[skipMatches];\n\n    int correct = 0;\n    DistanceType distR = 0;\n    StartStopTimer t;\n    int repeats = 0;\n    while (t.value<0.2) {\n        repeats++;\n        t.start();\n        correct = 0;\n        distR = 0;\n        for (size_t i = 0; i < testData.rows; i++) {\n            resultSet.init(&indices[0], &dists[0]);\n            index.findNeighbors(resultSet, testData[i], searchParams);\n\n            correct += countCorrectMatches(neighbors,matches[i], nn);\n            distR += computeDistanceRaport<Distance>(inputData, testData[i], neighbors, matches[i], (int)testData.cols, nn, distance);\n        }\n        t.stop();\n    }\n    time = float(t.value/repeats);\n\n    float precicion = (float)correct/(nn*testData.rows);\n\n    dist = distR/(testData.rows*nn);\n\n    Logger::info(\"%8d %10.4g %10.5g %10.5g %10.5g\\n\",\n                 checks, precicion, time, 1000.0 * time / testData.rows, dist);\n\n    return precicion;\n}\n\n\ntemplate <typename Distance>\nfloat test_index_checks(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                        const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                        int checks, float& precision, const Distance& distance, int nn = 1, int skipMatches = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    float time = 0;\n    DistanceType dist = 0;\n    precision = search_with_ground_truth(index, inputData, testData, matches, nn, checks, time, dist, distance, skipMatches);\n\n    return time;\n}\n\ntemplate <typename Distance>\nfloat test_index_precision(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                           const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                           float precision, int& checks, const Distance& distance, int nn = 1, int skipMatches = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n    const float SEARCH_EPS = 0.001f;\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    int c2 = 1;\n    float p2;\n    int c1 = 1;\n    //float p1;\n    float time;\n    DistanceType dist;\n\n    p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n\n    if (p2>precision) {\n        Logger::info(\"Got as close as I can\\n\");\n        checks = c2;\n        return time;\n    }\n\n    while (p2<precision) {\n        c1 = c2;\n        //p1 = p2;\n        c2 *=2;\n        p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n    }\n\n    int cx;\n    float realPrecision;\n    if (fabs(p2-precision)>SEARCH_EPS) {\n        Logger::info(\"Start linear estimation\\n\");\n        // after we got to values in the vecinity of the desired precision\n        // use linear approximation get a better estimation\n\n        cx = (c1+c2)/2;\n        realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n        while (fabs(realPrecision-precision)>SEARCH_EPS) {\n\n            if (realPrecision<precision) {\n                c1 = cx;\n            }\n            else {\n                c2 = cx;\n            }\n            cx = (c1+c2)/2;\n            if (cx==c1) {\n                Logger::info(\"Got as close as I can\\n\");\n                break;\n            }\n            realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n        }\n\n        c2 = cx;\n        p2 = realPrecision;\n\n    }\n    else {\n        Logger::info(\"No need for linear estimation\\n\");\n        cx = c2;\n        realPrecision = p2;\n    }\n\n    checks = cx;\n    return time;\n}\n\n\ntemplate <typename Distance>\nvoid test_index_precisions(NNIndex<Distance>& index, const Matrix<typename Distance::ElementType>& inputData,\n                           const Matrix<typename Distance::ElementType>& testData, const Matrix<int>& matches,\n                           float* precisions, int precisions_length, const Distance& distance, int nn = 1, int skipMatches = 0, float maxTime = 0)\n{\n    typedef typename Distance::ResultType DistanceType;\n\n    const float SEARCH_EPS = 0.001;\n\n    // make sure precisions array is sorted\n    std::sort(precisions, precisions+precisions_length);\n\n    int pindex = 0;\n    float precision = precisions[pindex];\n\n    Logger::info(\"  Nodes  Precision(%)   Time(s)   Time/vec(ms)  Mean dist\\n\");\n    Logger::info(\"---------------------------------------------------------\\n\");\n\n    int c2 = 1;\n    float p2;\n\n    int c1 = 1;\n    float p1;\n\n    float time;\n    DistanceType dist;\n\n    p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n\n    // if precision for 1 run down the tree is already\n    // better then some of the requested precisions, then\n    // skip those\n    while (precisions[pindex]<p2 && pindex<precisions_length) {\n        pindex++;\n    }\n\n    if (pindex==precisions_length) {\n        Logger::info(\"Got as close as I can\\n\");\n        return;\n    }\n\n    for (int i=pindex; i<precisions_length; ++i) {\n\n        precision = precisions[i];\n        while (p2<precision) {\n            c1 = c2;\n            p1 = p2;\n            c2 *=2;\n            p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches);\n            if ((maxTime> 0)&&(time > maxTime)&&(p2<precision)) return;\n        }\n\n        int cx;\n        float realPrecision;\n        if (fabs(p2-precision)>SEARCH_EPS) {\n            Logger::info(\"Start linear estimation\\n\");\n            // after we got to values in the vecinity of the desired precision\n            // use linear approximation get a better estimation\n\n            cx = (c1+c2)/2;\n            realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n            while (fabs(realPrecision-precision)>SEARCH_EPS) {\n\n                if (realPrecision<precision) {\n                    c1 = cx;\n                }\n                else {\n                    c2 = cx;\n                }\n                cx = (c1+c2)/2;\n                if (cx==c1) {\n                    Logger::info(\"Got as close as I can\\n\");\n                    break;\n                }\n                realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches);\n            }\n\n            c2 = cx;\n            p2 = realPrecision;\n\n        }\n        else {\n            Logger::info(\"No need for linear estimation\\n\");\n            cx = c2;\n            realPrecision = p2;\n        }\n\n    }\n}\n\n}\n\n#endif //OPENCV_FLANN_INDEX_TESTING_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/kdtree_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KDTREE_INDEX_H_\n#define OPENCV_FLANN_KDTREE_INDEX_H_\n\n#include <algorithm>\n#include <map>\n#include <cassert>\n#include <cstring>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dynamic_bitset.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\n\nnamespace cvflann\n{\n\nstruct KDTreeIndexParams : public IndexParams\n{\n    KDTreeIndexParams(int trees = 4)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KDTREE;\n        (*this)[\"trees\"] = trees;\n    }\n};\n\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate <typename Distance>\nclass KDTreeIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    /**\n     * KDTree constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the kdtree algorithm\n     */\n    KDTreeIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KDTreeIndexParams(),\n                Distance d = Distance() ) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n        size_ = dataset_.rows;\n        veclen_ = dataset_.cols;\n\n        trees_ = get_param(index_params_,\"trees\",4);\n        tree_roots_ = new NodePtr[trees_];\n\n        // Create a permutable array of indices to the input vectors.\n        vind_.resize(size_);\n        for (size_t i = 0; i < size_; ++i) {\n            vind_[i] = int(i);\n        }\n\n        mean_ = new DistanceType[veclen_];\n        var_ = new DistanceType[veclen_];\n    }\n\n\n    KDTreeIndex(const KDTreeIndex&);\n    KDTreeIndex& operator=(const KDTreeIndex&);\n\n    /**\n     * Standard destructor\n     */\n    ~KDTreeIndex()\n    {\n        if (tree_roots_!=NULL) {\n            delete[] tree_roots_;\n        }\n        delete[] mean_;\n        delete[] var_;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        /* Construct the randomized trees. */\n        for (int i = 0; i < trees_; i++) {\n            /* Randomize the order of vectors to allow for unbiased sampling. */\n            std::random_shuffle(vind_.begin(), vind_.end());\n            tree_roots_[i] = divideTree(&vind_[0], int(size_) );\n        }\n    }\n\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KDTREE;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, trees_);\n        for (int i=0; i<trees_; ++i) {\n            save_tree(stream, tree_roots_[i]);\n        }\n    }\n\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, trees_);\n        if (tree_roots_!=NULL) {\n            delete[] tree_roots_;\n        }\n        tree_roots_ = new NodePtr[trees_];\n        for (int i=0; i<trees_; ++i) {\n            load_tree(stream,tree_roots_[i]);\n        }\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"trees\"] = tree_roots_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return int(pool_.usedMemory+pool_.wastedMemory+dataset_.rows*sizeof(int));  // pool memory and vind array memory\n    }\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        int maxChecks = get_param(searchParams,\"checks\", 32);\n        float epsError = 1+get_param(searchParams,\"eps\",0.0f);\n\n        if (maxChecks==FLANN_CHECKS_UNLIMITED) {\n            getExactNeighbors(result, vec, epsError);\n        }\n        else {\n            getNeighbors(result, vec, maxChecks, epsError);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\nprivate:\n\n\n    /*--------------------- Internal Data Structures --------------------------*/\n    struct Node\n    {\n        /**\n         * Dimension used for subdivision.\n         */\n        int divfeat;\n        /**\n         * The values used for subdivision.\n         */\n        DistanceType divval;\n        /**\n         * The child nodes.\n         */\n        Node* child1, * child2;\n    };\n    typedef Node* NodePtr;\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n    typedef BranchSt* Branch;\n\n\n\n    void save_tree(FILE* stream, NodePtr tree)\n    {\n        save_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            save_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            save_tree(stream, tree->child2);\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& tree)\n    {\n        tree = pool_.allocate<Node>();\n        load_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            load_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            load_tree(stream, tree->child2);\n        }\n    }\n\n\n    /**\n     * Create a tree node that subdivides the list of vecs from vind[first]\n     * to vind[last].  The routine is called recursively on each sublist.\n     * Place a pointer to this new tree node in the location pTree.\n     *\n     * Params: pTree = the new node to create\n     *                  first = index of the first vector\n     *                  last = index of the last vector\n     */\n    NodePtr divideTree(int* ind, int count)\n    {\n        NodePtr node = pool_.allocate<Node>(); // allocate memory\n\n        /* If too few exemplars remain, then make this a leaf node. */\n        if ( count == 1) {\n            node->child1 = node->child2 = NULL;    /* Mark as leaf node. */\n            node->divfeat = *ind;    /* Store index of this vec. */\n        }\n        else {\n            int idx;\n            int cutfeat;\n            DistanceType cutval;\n            meanSplit(ind, count, idx, cutfeat, cutval);\n\n            node->divfeat = cutfeat;\n            node->divval = cutval;\n            node->child1 = divideTree(ind, idx);\n            node->child2 = divideTree(ind+idx, count-idx);\n        }\n\n        return node;\n    }\n\n\n    /**\n     * Choose which feature to use in order to subdivide this set of vectors.\n     * Make a random choice among those with the highest variance, and use\n     * its variance as the threshold value.\n     */\n    void meanSplit(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval)\n    {\n        memset(mean_,0,veclen_*sizeof(DistanceType));\n        memset(var_,0,veclen_*sizeof(DistanceType));\n\n        /* Compute mean values.  Only the first SAMPLE_MEAN values need to be\n            sampled to get a good estimate.\n         */\n        int cnt = std::min((int)SAMPLE_MEAN+1, count);\n        for (int j = 0; j < cnt; ++j) {\n            ElementType* v = dataset_[ind[j]];\n            for (size_t k=0; k<veclen_; ++k) {\n                mean_[k] += v[k];\n            }\n        }\n        for (size_t k=0; k<veclen_; ++k) {\n            mean_[k] /= cnt;\n        }\n\n        /* Compute variances (no need to divide by count). */\n        for (int j = 0; j < cnt; ++j) {\n            ElementType* v = dataset_[ind[j]];\n            for (size_t k=0; k<veclen_; ++k) {\n                DistanceType dist = v[k] - mean_[k];\n                var_[k] += dist * dist;\n            }\n        }\n        /* Select one of the highest variance indices at random. */\n        cutfeat = selectDivision(var_);\n        cutval = mean_[cutfeat];\n\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n\n        /* If either list is empty, it means that all remaining features\n         * are identical. Split in the middle to maintain a balanced tree.\n         */\n        if ((lim1==count)||(lim2==0)) index = count/2;\n    }\n\n\n    /**\n     * Select the top RAND_DIM largest values from v and return the index of\n     * one of these selected at random.\n     */\n    int selectDivision(DistanceType* v)\n    {\n        int num = 0;\n        size_t topind[RAND_DIM];\n\n        /* Create a list of the indices of the top RAND_DIM values. */\n        for (size_t i = 0; i < veclen_; ++i) {\n            if ((num < RAND_DIM)||(v[i] > v[topind[num-1]])) {\n                /* Put this element at end of topind. */\n                if (num < RAND_DIM) {\n                    topind[num++] = i;            /* Add to list. */\n                }\n                else {\n                    topind[num-1] = i;         /* Replace last element. */\n                }\n                /* Bubble end value down to right location by repeated swapping. */\n                int j = num - 1;\n                while (j > 0  &&  v[topind[j]] > v[topind[j-1]]) {\n                    std::swap(topind[j], topind[j-1]);\n                    --j;\n                }\n            }\n        }\n        /* Select a random integer in range [0,num-1], and return that index. */\n        int rnd = rand_int(num);\n        return (int)topind[rnd];\n    }\n\n\n    /**\n     *  Subdivide the list of points by a plane perpendicular on axe corresponding\n     *  to the 'cutfeat' dimension at 'cutval' position.\n     *\n     *  On return:\n     *  dataset[ind[0..lim1-1]][cutfeat]<cutval\n     *  dataset[ind[lim1..lim2-1]][cutfeat]==cutval\n     *  dataset[ind[lim2..count]][cutfeat]>cutval\n     */\n    void planeSplit(int* ind, int count, int cutfeat, DistanceType cutval, int& lim1, int& lim2)\n    {\n        /* Move vector indices for left subtree to front of list. */\n        int left = 0;\n        int right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>=cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim1 = left;\n        right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<=cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim2 = left;\n    }\n\n    /**\n     * Performs an exact nearest neighbor search. The exact search performs a full\n     * traversal of the tree.\n     */\n    void getExactNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, float epsError)\n    {\n        //\t\tcheckID -= 1;  /* Set a different unique ID for each search. */\n\n        if (trees_ > 1) {\n            fprintf(stderr,\"It doesn't make any sense to use more than one tree for exact search\");\n        }\n        if (trees_>0) {\n            searchLevelExact(result, vec, tree_roots_[0], 0.0, epsError);\n        }\n        assert(result.full());\n    }\n\n    /**\n     * Performs the approximate nearest-neighbor search. The search is approximate\n     * because the tree traversal is abandoned after a given number of descends in\n     * the tree.\n     */\n    void getNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, int maxCheck, float epsError)\n    {\n        int i;\n        BranchSt branch;\n\n        int checkCount = 0;\n        Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n        DynamicBitset checked(size_);\n\n        /* Search once through each tree down to root. */\n        for (i = 0; i < trees_; ++i) {\n            searchLevel(result, vec, tree_roots_[i], 0, checkCount, maxCheck, epsError, heap, checked);\n        }\n\n        /* Keep searching other branches from heap until finished. */\n        while ( heap->popMin(branch) && (checkCount < maxCheck || !result.full() )) {\n            searchLevel(result, vec, branch.node, branch.mindist, checkCount, maxCheck, epsError, heap, checked);\n        }\n\n        delete heap;\n\n        assert(result.full());\n    }\n\n\n    /**\n     *  Search starting from a given node of the tree.  Based on any mismatches at\n     *  higher levels, all exemplars below this level must have a distance of\n     *  at least \"mindistsq\".\n     */\n    void searchLevel(ResultSet<DistanceType>& result_set, const ElementType* vec, NodePtr node, DistanceType mindist, int& checkCount, int maxCheck,\n                     float epsError, Heap<BranchSt>* heap, DynamicBitset& checked)\n    {\n        if (result_set.worstDist()<mindist) {\n            //\t\t\tprintf(\"Ignoring branch, too far\\n\");\n            return;\n        }\n\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            /*  Do not check same node more than once when searching multiple trees.\n                Once a vector is checked, we set its location in vind to the\n                current checkID.\n             */\n            int index = node->divfeat;\n            if ( checked.test(index) || ((checkCount>=maxCheck)&& result_set.full()) ) return;\n            checked.set(index);\n            checkCount++;\n\n            DistanceType dist = distance_(dataset_[index], vec, veclen_);\n            result_set.addPoint(dist,index);\n\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        ElementType val = vec[node->divfeat];\n        DistanceType diff = val - node->divval;\n        NodePtr bestChild = (diff < 0) ? node->child1 : node->child2;\n        NodePtr otherChild = (diff < 0) ? node->child2 : node->child1;\n\n        /* Create a branch record for the branch not taken.  Add distance\n            of this feature boundary (we don't attempt to correct for any\n            use of this feature in a parent node, which is unlikely to\n            happen and would have only a small effect).  Don't bother\n            adding more branches to heap after halfway point, as cost of\n            adding exceeds their value.\n         */\n\n        DistanceType new_distsq = mindist + distance_.accum_dist(val, node->divval, node->divfeat);\n        //\t\tif (2 * checkCount < maxCheck  ||  !result.full()) {\n        if ((new_distsq*epsError < result_set.worstDist())||  !result_set.full()) {\n            heap->insert( BranchSt(otherChild, new_distsq) );\n        }\n\n        /* Call recursively to search next level down. */\n        searchLevel(result_set, vec, bestChild, mindist, checkCount, maxCheck, epsError, heap, checked);\n    }\n\n    /**\n     * Performs an exact search in the tree starting from a node.\n     */\n    void searchLevelExact(ResultSet<DistanceType>& result_set, const ElementType* vec, const NodePtr node, DistanceType mindist, const float epsError)\n    {\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            int index = node->divfeat;\n            DistanceType dist = distance_(dataset_[index], vec, veclen_);\n            result_set.addPoint(dist,index);\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        ElementType val = vec[node->divfeat];\n        DistanceType diff = val - node->divval;\n        NodePtr bestChild = (diff < 0) ? node->child1 : node->child2;\n        NodePtr otherChild = (diff < 0) ? node->child2 : node->child1;\n\n        /* Create a branch record for the branch not taken.  Add distance\n            of this feature boundary (we don't attempt to correct for any\n            use of this feature in a parent node, which is unlikely to\n            happen and would have only a small effect).  Don't bother\n            adding more branches to heap after halfway point, as cost of\n            adding exceeds their value.\n         */\n\n        DistanceType new_distsq = mindist + distance_.accum_dist(val, node->divval, node->divfeat);\n\n        /* Call recursively to search next level down. */\n        searchLevelExact(result_set, vec, bestChild, mindist, epsError);\n\n        if (new_distsq*epsError<=result_set.worstDist()) {\n            searchLevelExact(result_set, vec, otherChild, new_distsq, epsError);\n        }\n    }\n\n\nprivate:\n\n    enum\n    {\n        /**\n         * To improve efficiency, only SAMPLE_MEAN random values are used to\n         * compute the mean and variance at each level when building a tree.\n         * A value of 100 seems to perform as well as using all values.\n         */\n        SAMPLE_MEAN = 100,\n        /**\n         * Top random dimensions to consider\n         *\n         * When creating random trees, the dimension on which to subdivide is\n         * selected at random from among the top RAND_DIM dimensions with the\n         * highest variance.  A value of 5 works well.\n         */\n        RAND_DIM=5\n    };\n\n\n    /**\n     * Number of randomized trees that are used\n     */\n    int trees_;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    std::vector<int> vind_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    IndexParams index_params_;\n\n    size_t size_;\n    size_t veclen_;\n\n\n    DistanceType* mean_;\n    DistanceType* var_;\n\n\n    /**\n     * Array of k-d trees used to find neighbours.\n     */\n    NodePtr* tree_roots_;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool_;\n\n    Distance distance_;\n\n\n};   // class KDTreeForest\n\n}\n\n#endif //OPENCV_FLANN_KDTREE_INDEX_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/kdtree_single_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n#define OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n\n#include <algorithm>\n#include <map>\n#include <cassert>\n#include <cstring>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\nnamespace cvflann\n{\n\nstruct KDTreeSingleIndexParams : public IndexParams\n{\n    KDTreeSingleIndexParams(int leaf_max_size = 10, bool reorder = true, int dim = -1)\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KDTREE_SINGLE;\n        (*this)[\"leaf_max_size\"] = leaf_max_size;\n        (*this)[\"reorder\"] = reorder;\n        (*this)[\"dim\"] = dim;\n    }\n};\n\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate <typename Distance>\nclass KDTreeSingleIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    /**\n     * KDTree constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the kdtree algorithm\n     */\n    KDTreeSingleIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KDTreeSingleIndexParams(),\n                      Distance d = Distance() ) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n        size_ = dataset_.rows;\n        dim_ = dataset_.cols;\n        int dim_param = get_param(params,\"dim\",-1);\n        if (dim_param>0) dim_ = dim_param;\n        leaf_max_size_ = get_param(params,\"leaf_max_size\",10);\n        reorder_ = get_param(params,\"reorder\",true);\n\n        // Create a permutable array of indices to the input vectors.\n        vind_.resize(size_);\n        for (size_t i = 0; i < size_; i++) {\n            vind_[i] = (int)i;\n        }\n    }\n\n    KDTreeSingleIndex(const KDTreeSingleIndex&);\n    KDTreeSingleIndex& operator=(const KDTreeSingleIndex&);\n\n    /**\n     * Standard destructor\n     */\n    ~KDTreeSingleIndex()\n    {\n        if (reorder_) delete[] data_.data;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        computeBoundingBox(root_bbox_);\n        root_node_ = divideTree(0, (int)size_, root_bbox_ );   // construct the tree\n\n        if (reorder_) {\n            delete[] data_.data;\n            data_ = cvflann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);\n            for (size_t i=0; i<size_; ++i) {\n                for (size_t j=0; j<dim_; ++j) {\n                    data_[i][j] = dataset_[vind_[i]][j];\n                }\n            }\n        }\n        else {\n            data_ = dataset_;\n        }\n    }\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KDTREE_SINGLE;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, size_);\n        save_value(stream, dim_);\n        save_value(stream, root_bbox_);\n        save_value(stream, reorder_);\n        save_value(stream, leaf_max_size_);\n        save_value(stream, vind_);\n        if (reorder_) {\n            save_value(stream, data_);\n        }\n        save_tree(stream, root_node_);\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, size_);\n        load_value(stream, dim_);\n        load_value(stream, root_bbox_);\n        load_value(stream, reorder_);\n        load_value(stream, leaf_max_size_);\n        load_value(stream, vind_);\n        if (reorder_) {\n            load_value(stream, data_);\n        }\n        else {\n            data_ = dataset_;\n        }\n        load_tree(stream, root_node_);\n\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"leaf_max_size\"] = leaf_max_size_;\n        index_params_[\"reorder\"] = reorder_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return dim_;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return (int)(pool_.usedMemory+pool_.wastedMemory+dataset_.rows*sizeof(int));  // pool memory and vind array memory\n    }\n\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n        KNNSimpleResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.init(indices[i], dists[i]);\n            findNeighbors(resultSet, queries[i], params);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n        float epsError = 1+get_param(searchParams,\"eps\",0.0f);\n\n        std::vector<DistanceType> dists(dim_,0);\n        DistanceType distsq = computeInitialDistances(vec, dists);\n        searchLevel(result, vec, root_node_, distsq, dists, epsError);\n    }\n\nprivate:\n\n\n    /*--------------------- Internal Data Structures --------------------------*/\n    struct Node\n    {\n        /**\n         * Indices of points in leaf node\n         */\n        int left, right;\n        /**\n         * Dimension used for subdivision.\n         */\n        int divfeat;\n        /**\n         * The values used for subdivision.\n         */\n        DistanceType divlow, divhigh;\n        /**\n         * The child nodes.\n         */\n        Node* child1, * child2;\n    };\n    typedef Node* NodePtr;\n\n\n    struct Interval\n    {\n        DistanceType low, high;\n    };\n\n    typedef std::vector<Interval> BoundingBox;\n\n    typedef BranchStruct<NodePtr, DistanceType> BranchSt;\n    typedef BranchSt* Branch;\n\n\n\n\n    void save_tree(FILE* stream, NodePtr tree)\n    {\n        save_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            save_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            save_tree(stream, tree->child2);\n        }\n    }\n\n\n    void load_tree(FILE* stream, NodePtr& tree)\n    {\n        tree = pool_.allocate<Node>();\n        load_value(stream, *tree);\n        if (tree->child1!=NULL) {\n            load_tree(stream, tree->child1);\n        }\n        if (tree->child2!=NULL) {\n            load_tree(stream, tree->child2);\n        }\n    }\n\n\n    void computeBoundingBox(BoundingBox& bbox)\n    {\n        bbox.resize(dim_);\n        for (size_t i=0; i<dim_; ++i) {\n            bbox[i].low = (DistanceType)dataset_[0][i];\n            bbox[i].high = (DistanceType)dataset_[0][i];\n        }\n        for (size_t k=1; k<dataset_.rows; ++k) {\n            for (size_t i=0; i<dim_; ++i) {\n                if (dataset_[k][i]<bbox[i].low) bbox[i].low = (DistanceType)dataset_[k][i];\n                if (dataset_[k][i]>bbox[i].high) bbox[i].high = (DistanceType)dataset_[k][i];\n            }\n        }\n    }\n\n\n    /**\n     * Create a tree node that subdivides the list of vecs from vind[first]\n     * to vind[last].  The routine is called recursively on each sublist.\n     * Place a pointer to this new tree node in the location pTree.\n     *\n     * Params: pTree = the new node to create\n     *                  first = index of the first vector\n     *                  last = index of the last vector\n     */\n    NodePtr divideTree(int left, int right, BoundingBox& bbox)\n    {\n        NodePtr node = pool_.allocate<Node>(); // allocate memory\n\n        /* If too few exemplars remain, then make this a leaf node. */\n        if ( (right-left) <= leaf_max_size_) {\n            node->child1 = node->child2 = NULL;    /* Mark as leaf node. */\n            node->left = left;\n            node->right = right;\n\n            // compute bounding-box of leaf points\n            for (size_t i=0; i<dim_; ++i) {\n                bbox[i].low = (DistanceType)dataset_[vind_[left]][i];\n                bbox[i].high = (DistanceType)dataset_[vind_[left]][i];\n            }\n            for (int k=left+1; k<right; ++k) {\n                for (size_t i=0; i<dim_; ++i) {\n                    if (bbox[i].low>dataset_[vind_[k]][i]) bbox[i].low=(DistanceType)dataset_[vind_[k]][i];\n                    if (bbox[i].high<dataset_[vind_[k]][i]) bbox[i].high=(DistanceType)dataset_[vind_[k]][i];\n                }\n            }\n        }\n        else {\n            int idx;\n            int cutfeat;\n            DistanceType cutval;\n            middleSplit_(&vind_[0]+left, right-left, idx, cutfeat, cutval, bbox);\n\n            node->divfeat = cutfeat;\n\n            BoundingBox left_bbox(bbox);\n            left_bbox[cutfeat].high = cutval;\n            node->child1 = divideTree(left, left+idx, left_bbox);\n\n            BoundingBox right_bbox(bbox);\n            right_bbox[cutfeat].low = cutval;\n            node->child2 = divideTree(left+idx, right, right_bbox);\n\n            node->divlow = left_bbox[cutfeat].high;\n            node->divhigh = right_bbox[cutfeat].low;\n\n            for (size_t i=0; i<dim_; ++i) {\n                bbox[i].low = std::min(left_bbox[i].low, right_bbox[i].low);\n                bbox[i].high = std::max(left_bbox[i].high, right_bbox[i].high);\n            }\n        }\n\n        return node;\n    }\n\n    void computeMinMax(int* ind, int count, int dim, ElementType& min_elem, ElementType& max_elem)\n    {\n        min_elem = dataset_[ind[0]][dim];\n        max_elem = dataset_[ind[0]][dim];\n        for (int i=1; i<count; ++i) {\n            ElementType val = dataset_[ind[i]][dim];\n            if (val<min_elem) min_elem = val;\n            if (val>max_elem) max_elem = val;\n        }\n    }\n\n    void middleSplit(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval, const BoundingBox& bbox)\n    {\n        // find the largest span from the approximate bounding box\n        ElementType max_span = bbox[0].high-bbox[0].low;\n        cutfeat = 0;\n        cutval = (bbox[0].high+bbox[0].low)/2;\n        for (size_t i=1; i<dim_; ++i) {\n            ElementType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                max_span = span;\n                cutfeat = i;\n                cutval = (bbox[i].high+bbox[i].low)/2;\n            }\n        }\n\n        // compute exact span on the found dimension\n        ElementType min_elem, max_elem;\n        computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n        cutval = (min_elem+max_elem)/2;\n        max_span = max_elem - min_elem;\n\n        // check if a dimension of a largest span exists\n        size_t k = cutfeat;\n        for (size_t i=0; i<dim_; ++i) {\n            if (i==k) continue;\n            ElementType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                computeMinMax(ind, count, i, min_elem, max_elem);\n                span = max_elem - min_elem;\n                if (span>max_span) {\n                    max_span = span;\n                    cutfeat = i;\n                    cutval = (min_elem+max_elem)/2;\n                }\n            }\n        }\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n    }\n\n\n    void middleSplit_(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval, const BoundingBox& bbox)\n    {\n        const float EPS=0.00001f;\n        DistanceType max_span = bbox[0].high-bbox[0].low;\n        for (size_t i=1; i<dim_; ++i) {\n            DistanceType span = bbox[i].high-bbox[i].low;\n            if (span>max_span) {\n                max_span = span;\n            }\n        }\n        DistanceType max_spread = -1;\n        cutfeat = 0;\n        for (size_t i=0; i<dim_; ++i) {\n            DistanceType span = bbox[i].high-bbox[i].low;\n            if (span>(DistanceType)((1-EPS)*max_span)) {\n                ElementType min_elem, max_elem;\n                computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n                DistanceType spread = (DistanceType)(max_elem-min_elem);\n                if (spread>max_spread) {\n                    cutfeat = (int)i;\n                    max_spread = spread;\n                }\n            }\n        }\n        // split in the middle\n        DistanceType split_val = (bbox[cutfeat].low+bbox[cutfeat].high)/2;\n        ElementType min_elem, max_elem;\n        computeMinMax(ind, count, cutfeat, min_elem, max_elem);\n\n        if (split_val<min_elem) cutval = (DistanceType)min_elem;\n        else if (split_val>max_elem) cutval = (DistanceType)max_elem;\n        else cutval = split_val;\n\n        int lim1, lim2;\n        planeSplit(ind, count, cutfeat, cutval, lim1, lim2);\n\n        if (lim1>count/2) index = lim1;\n        else if (lim2<count/2) index = lim2;\n        else index = count/2;\n    }\n\n\n    /**\n     *  Subdivide the list of points by a plane perpendicular on axe corresponding\n     *  to the 'cutfeat' dimension at 'cutval' position.\n     *\n     *  On return:\n     *  dataset[ind[0..lim1-1]][cutfeat]<cutval\n     *  dataset[ind[lim1..lim2-1]][cutfeat]==cutval\n     *  dataset[ind[lim2..count]][cutfeat]>cutval\n     */\n    void planeSplit(int* ind, int count, int cutfeat, DistanceType cutval, int& lim1, int& lim2)\n    {\n        /* Move vector indices for left subtree to front of list. */\n        int left = 0;\n        int right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>=cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        /* If either list is empty, it means that all remaining features\n         * are identical. Split in the middle to maintain a balanced tree.\n         */\n        lim1 = left;\n        right = count-1;\n        for (;; ) {\n            while (left<=right && dataset_[ind[left]][cutfeat]<=cutval) ++left;\n            while (left<=right && dataset_[ind[right]][cutfeat]>cutval) --right;\n            if (left>right) break;\n            std::swap(ind[left], ind[right]); ++left; --right;\n        }\n        lim2 = left;\n    }\n\n    DistanceType computeInitialDistances(const ElementType* vec, std::vector<DistanceType>& dists)\n    {\n        DistanceType distsq = 0.0;\n\n        for (size_t i = 0; i < dim_; ++i) {\n            if (vec[i] < root_bbox_[i].low) {\n                dists[i] = distance_.accum_dist(vec[i], root_bbox_[i].low, (int)i);\n                distsq += dists[i];\n            }\n            if (vec[i] > root_bbox_[i].high) {\n                dists[i] = distance_.accum_dist(vec[i], root_bbox_[i].high, (int)i);\n                distsq += dists[i];\n            }\n        }\n\n        return distsq;\n    }\n\n    /**\n     * Performs an exact search in the tree starting from a node.\n     */\n    void searchLevel(ResultSet<DistanceType>& result_set, const ElementType* vec, const NodePtr node, DistanceType mindistsq,\n                     std::vector<DistanceType>& dists, const float epsError)\n    {\n        /* If this is a leaf node, then do check and return. */\n        if ((node->child1 == NULL)&&(node->child2 == NULL)) {\n            DistanceType worst_dist = result_set.worstDist();\n            for (int i=node->left; i<node->right; ++i) {\n                int index = reorder_ ? i : vind_[i];\n                DistanceType dist = distance_(vec, data_[index], dim_, worst_dist);\n                if (dist<worst_dist) {\n                    result_set.addPoint(dist,vind_[i]);\n                }\n            }\n            return;\n        }\n\n        /* Which child branch should be taken first? */\n        int idx = node->divfeat;\n        ElementType val = vec[idx];\n        DistanceType diff1 = val - node->divlow;\n        DistanceType diff2 = val - node->divhigh;\n\n        NodePtr bestChild;\n        NodePtr otherChild;\n        DistanceType cut_dist;\n        if ((diff1+diff2)<0) {\n            bestChild = node->child1;\n            otherChild = node->child2;\n            cut_dist = distance_.accum_dist(val, node->divhigh, idx);\n        }\n        else {\n            bestChild = node->child2;\n            otherChild = node->child1;\n            cut_dist = distance_.accum_dist( val, node->divlow, idx);\n        }\n\n        /* Call recursively to search next level down. */\n        searchLevel(result_set, vec, bestChild, mindistsq, dists, epsError);\n\n        DistanceType dst = dists[idx];\n        mindistsq = mindistsq + cut_dist - dst;\n        dists[idx] = cut_dist;\n        if (mindistsq*epsError<=result_set.worstDist()) {\n            searchLevel(result_set, vec, otherChild, mindistsq, dists, epsError);\n        }\n        dists[idx] = dst;\n    }\n\nprivate:\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    IndexParams index_params_;\n\n    int leaf_max_size_;\n    bool reorder_;\n\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    std::vector<int> vind_;\n\n    Matrix<ElementType> data_;\n\n    size_t size_;\n    size_t dim_;\n\n    /**\n     * Array of k-d trees used to find neighbours.\n     */\n    NodePtr root_node_;\n\n    BoundingBox root_bbox_;\n\n    /**\n     * Pooled memory allocator.\n     *\n     * Using a pooled memory allocator is more efficient\n     * than allocating memory directly when there is a large\n     * number small of memory allocations.\n     */\n    PooledAllocator pool_;\n\n    Distance distance_;\n};   // class KDTree\n\n}\n\n#endif //OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/kmeans_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_KMEANS_INDEX_H_\n#define OPENCV_FLANN_KMEANS_INDEX_H_\n\n#include <algorithm>\n#include <string>\n#include <map>\n#include <cassert>\n#include <limits>\n#include <cmath>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"dist.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n#include \"logger.h\"\n\n\nnamespace cvflann\n{\n\nstruct KMeansIndexParams : public IndexParams\n{\n    KMeansIndexParams(int branching = 32, int iterations = 11,\n                      flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, float cb_index = 0.2 )\n    {\n        (*this)[\"algorithm\"] = FLANN_INDEX_KMEANS;\n        // branching factor\n        (*this)[\"branching\"] = branching;\n        // max iterations to perform in one kmeans clustering (kmeans tree)\n        (*this)[\"iterations\"] = iterations;\n        // algorithm used for picking the initial cluster centers for kmeans tree\n        (*this)[\"centers_init\"] = centers_init;\n        // cluster boundary index. Used when searching the kmeans tree\n        (*this)[\"cb_index\"] = cb_index;\n    }\n};\n\n\n/**\n * Hierarchical kmeans index\n *\n * Contains a tree constructed through a hierarchical kmeans clustering\n * and other information for indexing a set of points for nearest-neighbour matching.\n */\ntemplate <typename Distance>\nclass KMeansIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n\n    typedef void (KMeansIndex::* centersAlgFunction)(int, int*, int, int*, int&);\n\n    /**\n     * The function used for choosing the cluster centers.\n     */\n    centersAlgFunction chooseCenters;\n\n\n\n    /**\n     * Chooses the initial centers in the k-means clustering in a random manner.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     *     indices_length = length of indices vector\n     *\n     */\n    void chooseCentersRandom(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        UniqueRandom r(indices_length);\n\n        int index;\n        for (index=0; index<k; ++index) {\n            bool duplicate = true;\n            int rnd;\n            while (duplicate) {\n                duplicate = false;\n                rnd = r.next();\n                if (rnd<0) {\n                    centers_length = index;\n                    return;\n                }\n\n                centers[index] = indices[rnd];\n\n                for (int j=0; j<index; ++j) {\n                    DistanceType sq = distance_(dataset_[centers[index]], dataset_[centers[j]], dataset_.cols);\n                    if (sq<1e-16) {\n                        duplicate = true;\n                    }\n                }\n            }\n        }\n\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using Gonzales' algorithm\n     * so that the centers are spaced apart from each other.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersGonzales(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        int rnd = rand_int(n);\n        assert(rnd >=0 && rnd < n);\n\n        centers[0] = indices[rnd];\n\n        int index;\n        for (index=1; index<k; ++index) {\n\n            int best_index = -1;\n            DistanceType best_val = 0;\n            for (int j=0; j<n; ++j) {\n                DistanceType dist = distance_(dataset_[centers[0]],dataset_[indices[j]],dataset_.cols);\n                for (int i=1; i<index; ++i) {\n                    DistanceType tmp_dist = distance_(dataset_[centers[i]],dataset_[indices[j]],dataset_.cols);\n                    if (tmp_dist<dist) {\n                        dist = tmp_dist;\n                    }\n                }\n                if (dist>best_val) {\n                    best_val = dist;\n                    best_index = j;\n                }\n            }\n            if (best_index!=-1) {\n                centers[index] = indices[best_index];\n            }\n            else {\n                break;\n            }\n        }\n        centers_length = index;\n    }\n\n\n    /**\n     * Chooses the initial centers in the k-means using the algorithm\n     * proposed in the KMeans++ paper:\n     * Arthur, David; Vassilvitskii, Sergei - k-means++: The Advantages of Careful Seeding\n     *\n     * Implementation of this function was converted from the one provided in Arthur's code.\n     *\n     * Params:\n     *     k = number of centers\n     *     vecs = the dataset of points\n     *     indices = indices in the dataset\n     * Returns:\n     */\n    void chooseCentersKMeanspp(int k, int* indices, int indices_length, int* centers, int& centers_length)\n    {\n        int n = indices_length;\n\n        double currentPot = 0;\n        DistanceType* closestDistSq = new DistanceType[n];\n\n        // Choose one random center and set the closestDistSq values\n        int index = rand_int(n);\n        assert(index >=0 && index < n);\n        centers[0] = indices[index];\n\n        for (int i = 0; i < n; i++) {\n            closestDistSq[i] = distance_(dataset_[indices[i]], dataset_[indices[index]], dataset_.cols);\n            currentPot += closestDistSq[i];\n        }\n\n\n        const int numLocalTries = 1;\n\n        // Choose each center\n        int centerCount;\n        for (centerCount = 1; centerCount < k; centerCount++) {\n\n            // Repeat several trials\n            double bestNewPot = -1;\n            int bestNewIndex = -1;\n            for (int localTrial = 0; localTrial < numLocalTries; localTrial++) {\n\n                // Choose our center - have to be slightly careful to return a valid answer even accounting\n                // for possible rounding errors\n                double randVal = rand_double(currentPot);\n                for (index = 0; index < n-1; index++) {\n                    if (randVal <= closestDistSq[index]) break;\n                    else randVal -= closestDistSq[index];\n                }\n\n                // Compute the new potential\n                double newPot = 0;\n                for (int i = 0; i < n; i++) newPot += std::min( distance_(dataset_[indices[i]], dataset_[indices[index]], dataset_.cols), closestDistSq[i] );\n\n                // Store the best result\n                if ((bestNewPot < 0)||(newPot < bestNewPot)) {\n                    bestNewPot = newPot;\n                    bestNewIndex = index;\n                }\n            }\n\n            // Add the appropriate center\n            centers[centerCount] = indices[bestNewIndex];\n            currentPot = bestNewPot;\n            for (int i = 0; i < n; i++) closestDistSq[i] = std::min( distance_(dataset_[indices[i]], dataset_[indices[bestNewIndex]], dataset_.cols), closestDistSq[i] );\n        }\n\n        centers_length = centerCount;\n\n        delete[] closestDistSq;\n    }\n\n\n\npublic:\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_KMEANS;\n    }\n\n    /**\n     * Index constructor\n     *\n     * Params:\n     *          inputData = dataset with the input features\n     *          params = parameters passed to the hierarchical k-means algorithm\n     */\n    KMeansIndex(const Matrix<ElementType>& inputData, const IndexParams& params = KMeansIndexParams(),\n                Distance d = Distance())\n        : dataset_(inputData), index_params_(params), root_(NULL), indices_(NULL), distance_(d)\n    {\n        memoryCounter_ = 0;\n\n        size_ = dataset_.rows;\n        veclen_ = dataset_.cols;\n\n        branching_ = get_param(params,\"branching\",32);\n        iterations_ = get_param(params,\"iterations\",11);\n        if (iterations_<0) {\n            iterations_ = (std::numeric_limits<int>::max)();\n        }\n        centers_init_  = get_param(params,\"centers_init\",FLANN_CENTERS_RANDOM);\n\n        if (centers_init_==FLANN_CENTERS_RANDOM) {\n            chooseCenters = &KMeansIndex::chooseCentersRandom;\n        }\n        else if (centers_init_==FLANN_CENTERS_GONZALES) {\n            chooseCenters = &KMeansIndex::chooseCentersGonzales;\n        }\n        else if (centers_init_==FLANN_CENTERS_KMEANSPP) {\n            chooseCenters = &KMeansIndex::chooseCentersKMeanspp;\n        }\n        else {\n            throw FLANNException(\"Unknown algorithm for choosing initial centers.\");\n        }\n        cb_index_ = 0.4f;\n\n    }\n\n\n    KMeansIndex(const KMeansIndex&);\n    KMeansIndex& operator=(const KMeansIndex&);\n\n\n    /**\n     * Index destructor.\n     *\n     * Release the memory used by the index.\n     */\n    virtual ~KMeansIndex()\n    {\n        if (root_ != NULL) {\n            free_centers(root_);\n        }\n        if (indices_!=NULL) {\n            delete[] indices_;\n        }\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return size_;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return veclen_;\n    }\n\n\n    void set_cb_index( float index)\n    {\n        cb_index_ = index;\n    }\n\n    /**\n     * Computes the inde memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return pool_.usedMemory+pool_.wastedMemory+memoryCounter_;\n    }\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        if (branching_<2) {\n            throw FLANNException(\"Branching factor must be at least 2\");\n        }\n\n        indices_ = new int[size_];\n        for (size_t i=0; i<size_; ++i) {\n            indices_[i] = int(i);\n        }\n\n        root_ = pool_.allocate<KMeansNode>();\n        computeNodeStatistics(root_, indices_, (int)size_);\n        computeClustering(root_, indices_, (int)size_, branching_,0);\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream, branching_);\n        save_value(stream, iterations_);\n        save_value(stream, memoryCounter_);\n        save_value(stream, cb_index_);\n        save_value(stream, *indices_, (int)size_);\n\n        save_tree(stream, root_);\n    }\n\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, branching_);\n        load_value(stream, iterations_);\n        load_value(stream, memoryCounter_);\n        load_value(stream, cb_index_);\n        if (indices_!=NULL) {\n            delete[] indices_;\n        }\n        indices_ = new int[size_];\n        load_value(stream, *indices_, size_);\n\n        if (root_!=NULL) {\n            free_centers(root_);\n        }\n        load_tree(stream, root_);\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"branching\"] = branching_;\n        index_params_[\"iterations\"] = iterations_;\n        index_params_[\"centers_init\"] = centers_init_;\n        index_params_[\"cb_index\"] = cb_index_;\n\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     searchParams = parameters that influence the search algorithm (checks, cb_index)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams)\n    {\n\n        int maxChecks = get_param(searchParams,\"checks\",32);\n\n        if (maxChecks==FLANN_CHECKS_UNLIMITED) {\n            findExactNN(root_, result, vec);\n        }\n        else {\n            // Priority queue storing intermediate branches in the best-bin-first search\n            Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);\n\n            int checks = 0;\n            findNN(root_, result, vec, checks, maxChecks, heap);\n\n            BranchSt branch;\n            while (heap->popMin(branch) && (checks<maxChecks || !result.full())) {\n                KMeansNodePtr node = branch.node;\n                findNN(node, result, vec, checks, maxChecks, heap);\n            }\n            assert(result.full());\n\n            delete heap;\n        }\n\n    }\n\n    /**\n     * Clustering function that takes a cut in the hierarchical k-means\n     * tree and return the clusters centers of that clustering.\n     * Params:\n     *     numClusters = number of clusters to have in the clustering computed\n     * Returns: number of cluster centers\n     */\n    int getClusterCenters(Matrix<DistanceType>& centers)\n    {\n        int numClusters = centers.rows;\n        if (numClusters<1) {\n            throw FLANNException(\"Number of clusters must be at least 1\");\n        }\n\n        DistanceType variance;\n        KMeansNodePtr* clusters = new KMeansNodePtr[numClusters];\n\n        int clusterCount = getMinVarianceClusters(root_, clusters, numClusters, variance);\n\n        Logger::info(\"Clusters requested: %d, returning %d\\n\",numClusters, clusterCount);\n\n        for (int i=0; i<clusterCount; ++i) {\n            DistanceType* center = clusters[i]->pivot;\n            for (size_t j=0; j<veclen_; ++j) {\n                centers[i][j] = center[j];\n            }\n        }\n        delete[] clusters;\n\n        return clusterCount;\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n\nprivate:\n    /**\n     * Struture representing a node in the hierarchical k-means tree.\n     */\n    struct KMeansNode\n    {\n        /**\n         * The cluster center.\n         */\n        DistanceType* pivot;\n        /**\n         * The cluster radius.\n         */\n        DistanceType radius;\n        /**\n         * The cluster mean radius.\n         */\n        DistanceType mean_radius;\n        /**\n         * The cluster variance.\n         */\n        DistanceType variance;\n        /**\n         * The cluster size (number of points in the cluster)\n         */\n        int size;\n        /**\n         * Child nodes (only for non-terminal nodes)\n         */\n        KMeansNode** childs;\n        /**\n         * Node points (only for terminal nodes)\n         */\n        int* indices;\n        /**\n         * Level\n         */\n        int level;\n    };\n    typedef KMeansNode* KMeansNodePtr;\n\n    /**\n     * Alias definition for a nicer syntax.\n     */\n    typedef BranchStruct<KMeansNodePtr, DistanceType> BranchSt;\n\n\n\n\n    void save_tree(FILE* stream, KMeansNodePtr node)\n    {\n        save_value(stream, *node);\n        save_value(stream, *(node->pivot), (int)veclen_);\n        if (node->childs==NULL) {\n            int indices_offset = (int)(node->indices - indices_);\n            save_value(stream, indices_offset);\n        }\n        else {\n            for(int i=0; i<branching_; ++i) {\n                save_tree(stream, node->childs[i]);\n            }\n        }\n    }\n\n\n    void load_tree(FILE* stream, KMeansNodePtr& node)\n    {\n        node = pool_.allocate<KMeansNode>();\n        load_value(stream, *node);\n        node->pivot = new DistanceType[veclen_];\n        load_value(stream, *(node->pivot), (int)veclen_);\n        if (node->childs==NULL) {\n            int indices_offset;\n            load_value(stream, indices_offset);\n            node->indices = indices_ + indices_offset;\n        }\n        else {\n            node->childs = pool_.allocate<KMeansNodePtr>(branching_);\n            for(int i=0; i<branching_; ++i) {\n                load_tree(stream, node->childs[i]);\n            }\n        }\n    }\n\n\n    /**\n     * Helper function\n     */\n    void free_centers(KMeansNodePtr node)\n    {\n        delete[] node->pivot;\n        if (node->childs!=NULL) {\n            for (int k=0; k<branching_; ++k) {\n                free_centers(node->childs[k]);\n            }\n        }\n    }\n\n    /**\n     * Computes the statistics of a node (mean, radius, variance).\n     *\n     * Params:\n     *     node = the node to use\n     *     indices = the indices of the points belonging to the node\n     */\n    void computeNodeStatistics(KMeansNodePtr node, int* indices, int indices_length)\n    {\n\n        DistanceType radius = 0;\n        DistanceType variance = 0;\n        DistanceType* mean = new DistanceType[veclen_];\n        memoryCounter_ += int(veclen_*sizeof(DistanceType));\n\n        memset(mean,0,veclen_*sizeof(DistanceType));\n\n        for (size_t i=0; i<size_; ++i) {\n            ElementType* vec = dataset_[indices[i]];\n            for (size_t j=0; j<veclen_; ++j) {\n                mean[j] += vec[j];\n            }\n            variance += distance_(vec, ZeroIterator<ElementType>(), veclen_);\n        }\n        for (size_t j=0; j<veclen_; ++j) {\n            mean[j] /= size_;\n        }\n        variance /= size_;\n        variance -= distance_(mean, ZeroIterator<ElementType>(), veclen_);\n\n        DistanceType tmp = 0;\n        for (int i=0; i<indices_length; ++i) {\n            tmp = distance_(mean, dataset_[indices[i]], veclen_);\n            if (tmp>radius) {\n                radius = tmp;\n            }\n        }\n\n        node->variance = variance;\n        node->radius = radius;\n        node->pivot = mean;\n    }\n\n\n    /**\n     * The method responsible with actually doing the recursive hierarchical\n     * clustering\n     *\n     * Params:\n     *     node = the node to cluster\n     *     indices = indices of the points belonging to the current node\n     *     branching = the branching factor to use in the clustering\n     *\n     * TODO: for 1-sized clusters don't store a cluster center (it's the same as the single cluster point)\n     */\n    void computeClustering(KMeansNodePtr node, int* indices, int indices_length, int branching, int level)\n    {\n        node->size = indices_length;\n        node->level = level;\n\n        if (indices_length < branching) {\n            node->indices = indices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            return;\n        }\n\n        int* centers_idx = new int[branching];\n        int centers_length;\n        (this->*chooseCenters)(branching, indices, indices_length, centers_idx, centers_length);\n\n        if (centers_length<branching) {\n            node->indices = indices;\n            std::sort(node->indices,node->indices+indices_length);\n            node->childs = NULL;\n            delete [] centers_idx;\n            return;\n        }\n\n\n        Matrix<double> dcenters(new double[branching*veclen_],branching,veclen_);\n        for (int i=0; i<centers_length; ++i) {\n            ElementType* vec = dataset_[centers_idx[i]];\n            for (size_t k=0; k<veclen_; ++k) {\n                dcenters[i][k] = double(vec[k]);\n            }\n        }\n        delete[] centers_idx;\n\n        std::vector<DistanceType> radiuses(branching);\n        int* count = new int[branching];\n        for (int i=0; i<branching; ++i) {\n            radiuses[i] = 0;\n            count[i] = 0;\n        }\n\n        //\tassign points to clusters\n        int* belongs_to = new int[indices_length];\n        for (int i=0; i<indices_length; ++i) {\n\n            DistanceType sq_dist = distance_(dataset_[indices[i]], dcenters[0], veclen_);\n            belongs_to[i] = 0;\n            for (int j=1; j<branching; ++j) {\n                DistanceType new_sq_dist = distance_(dataset_[indices[i]], dcenters[j], veclen_);\n                if (sq_dist>new_sq_dist) {\n                    belongs_to[i] = j;\n                    sq_dist = new_sq_dist;\n                }\n            }\n            if (sq_dist>radiuses[belongs_to[i]]) {\n                radiuses[belongs_to[i]] = sq_dist;\n            }\n            count[belongs_to[i]]++;\n        }\n\n        bool converged = false;\n        int iteration = 0;\n        while (!converged && iteration<iterations_) {\n            converged = true;\n            iteration++;\n\n            // compute the new cluster centers\n            for (int i=0; i<branching; ++i) {\n                memset(dcenters[i],0,sizeof(double)*veclen_);\n                radiuses[i] = 0;\n            }\n            for (int i=0; i<indices_length; ++i) {\n                ElementType* vec = dataset_[indices[i]];\n                double* center = dcenters[belongs_to[i]];\n                for (size_t k=0; k<veclen_; ++k) {\n                    center[k] += vec[k];\n                }\n            }\n            for (int i=0; i<branching; ++i) {\n                int cnt = count[i];\n                for (size_t k=0; k<veclen_; ++k) {\n                    dcenters[i][k] /= cnt;\n                }\n            }\n\n            // reassign points to clusters\n            for (int i=0; i<indices_length; ++i) {\n                DistanceType sq_dist = distance_(dataset_[indices[i]], dcenters[0], veclen_);\n                int new_centroid = 0;\n                for (int j=1; j<branching; ++j) {\n                    DistanceType new_sq_dist = distance_(dataset_[indices[i]], dcenters[j], veclen_);\n                    if (sq_dist>new_sq_dist) {\n                        new_centroid = j;\n                        sq_dist = new_sq_dist;\n                    }\n                }\n                if (sq_dist>radiuses[new_centroid]) {\n                    radiuses[new_centroid] = sq_dist;\n                }\n                if (new_centroid != belongs_to[i]) {\n                    count[belongs_to[i]]--;\n                    count[new_centroid]++;\n                    belongs_to[i] = new_centroid;\n\n                    converged = false;\n                }\n            }\n\n            for (int i=0; i<branching; ++i) {\n                // if one cluster converges to an empty cluster,\n                // move an element into that cluster\n                if (count[i]==0) {\n                    int j = (i+1)%branching;\n                    while (count[j]<=1) {\n                        j = (j+1)%branching;\n                    }\n\n                    for (int k=0; k<indices_length; ++k) {\n                        if (belongs_to[k]==j) {\n                            // for cluster j, we move the furthest element from the center to the empty cluster i\n                            if ( distance_(dataset_[indices[k]], dcenters[j], veclen_) == radiuses[j] ) {\n                                belongs_to[k] = i;\n                                count[j]--;\n                                count[i]++;\n                                break;\n                            }\n                        }\n                    }\n                    converged = false;\n                }\n            }\n\n        }\n\n        DistanceType** centers = new DistanceType*[branching];\n\n        for (int i=0; i<branching; ++i) {\n            centers[i] = new DistanceType[veclen_];\n            memoryCounter_ += (int)(veclen_*sizeof(DistanceType));\n            for (size_t k=0; k<veclen_; ++k) {\n                centers[i][k] = (DistanceType)dcenters[i][k];\n            }\n        }\n\n\n        // compute kmeans clustering for each of the resulting clusters\n        node->childs = pool_.allocate<KMeansNodePtr>(branching);\n        int start = 0;\n        int end = start;\n        for (int c=0; c<branching; ++c) {\n            int s = count[c];\n\n            DistanceType variance = 0;\n            DistanceType mean_radius =0;\n            for (int i=0; i<indices_length; ++i) {\n                if (belongs_to[i]==c) {\n                    DistanceType d = distance_(dataset_[indices[i]], ZeroIterator<ElementType>(), veclen_);\n                    variance += d;\n                    mean_radius += sqrt(d);\n                    std::swap(indices[i],indices[end]);\n                    std::swap(belongs_to[i],belongs_to[end]);\n                    end++;\n                }\n            }\n            variance /= s;\n            mean_radius /= s;\n            variance -= distance_(centers[c], ZeroIterator<ElementType>(), veclen_);\n\n            node->childs[c] = pool_.allocate<KMeansNode>();\n            node->childs[c]->radius = radiuses[c];\n            node->childs[c]->pivot = centers[c];\n            node->childs[c]->variance = variance;\n            node->childs[c]->mean_radius = mean_radius;\n            node->childs[c]->indices = NULL;\n            computeClustering(node->childs[c],indices+start, end-start, branching, level+1);\n            start=end;\n        }\n\n        delete[] dcenters.data;\n        delete[] centers;\n        delete[] count;\n        delete[] belongs_to;\n    }\n\n\n\n    /**\n     * Performs one descent in the hierarchical k-means tree. The branches not\n     * visited are stored in a priority queue.\n     *\n     * Params:\n     *      node = node to explore\n     *      result = container for the k-nearest neighbors found\n     *      vec = query points\n     *      checks = how many points in the dataset have been checked so far\n     *      maxChecks = maximum dataset points to checks\n     */\n\n\n    void findNN(KMeansNodePtr node, ResultSet<DistanceType>& result, const ElementType* vec, int& checks, int maxChecks,\n                Heap<BranchSt>* heap)\n    {\n        // Ignore those clusters that are too far away\n        {\n            DistanceType bsq = distance_(vec, node->pivot, veclen_);\n            DistanceType rsq = node->radius;\n            DistanceType wsq = result.worstDist();\n\n            DistanceType val = bsq-rsq-wsq;\n            DistanceType val2 = val*val-4*rsq*wsq;\n\n            //if (val>0) {\n            if ((val>0)&&(val2>0)) {\n                return;\n            }\n        }\n\n        if (node->childs==NULL) {\n            if (checks>=maxChecks) {\n                if (result.full()) return;\n            }\n            checks += node->size;\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                DistanceType dist = distance_(dataset_[index], vec, veclen_);\n                result.addPoint(dist, index);\n            }\n        }\n        else {\n            DistanceType* domain_distances = new DistanceType[branching_];\n            int closest_center = exploreNodeBranches(node, vec, domain_distances, heap);\n            delete[] domain_distances;\n            findNN(node->childs[closest_center],result,vec, checks, maxChecks, heap);\n        }\n    }\n\n    /**\n     * Helper function that computes the nearest childs of a node to a given query point.\n     * Params:\n     *     node = the node\n     *     q = the query point\n     *     distances = array with the distances to each child node.\n     * Returns:\n     */\n    int exploreNodeBranches(KMeansNodePtr node, const ElementType* q, DistanceType* domain_distances, Heap<BranchSt>* heap)\n    {\n\n        int best_index = 0;\n        domain_distances[best_index] = distance_(q, node->childs[best_index]->pivot, veclen_);\n        for (int i=1; i<branching_; ++i) {\n            domain_distances[i] = distance_(q, node->childs[i]->pivot, veclen_);\n            if (domain_distances[i]<domain_distances[best_index]) {\n                best_index = i;\n            }\n        }\n\n        //\t\tfloat* best_center = node->childs[best_index]->pivot;\n        for (int i=0; i<branching_; ++i) {\n            if (i != best_index) {\n                domain_distances[i] -= cb_index_*node->childs[i]->variance;\n\n                //\t\t\t\tfloat dist_to_border = getDistanceToBorder(node.childs[i].pivot,best_center,q);\n                //\t\t\t\tif (domain_distances[i]<dist_to_border) {\n                //\t\t\t\t\tdomain_distances[i] = dist_to_border;\n                //\t\t\t\t}\n                heap->insert(BranchSt(node->childs[i],domain_distances[i]));\n            }\n        }\n\n        return best_index;\n    }\n\n\n    /**\n     * Function the performs exact nearest neighbor search by traversing the entire tree.\n     */\n    void findExactNN(KMeansNodePtr node, ResultSet<DistanceType>& result, const ElementType* vec)\n    {\n        // Ignore those clusters that are too far away\n        {\n            DistanceType bsq = distance_(vec, node->pivot, veclen_);\n            DistanceType rsq = node->radius;\n            DistanceType wsq = result.worstDist();\n\n            DistanceType val = bsq-rsq-wsq;\n            DistanceType val2 = val*val-4*rsq*wsq;\n\n            //                  if (val>0) {\n            if ((val>0)&&(val2>0)) {\n                return;\n            }\n        }\n\n\n        if (node->childs==NULL) {\n            for (int i=0; i<node->size; ++i) {\n                int index = node->indices[i];\n                DistanceType dist = distance_(dataset_[index], vec, veclen_);\n                result.addPoint(dist, index);\n            }\n        }\n        else {\n            int* sort_indices = new int[branching_];\n\n            getCenterOrdering(node, vec, sort_indices);\n\n            for (int i=0; i<branching_; ++i) {\n                findExactNN(node->childs[sort_indices[i]],result,vec);\n            }\n\n            delete[] sort_indices;\n        }\n    }\n\n\n    /**\n     * Helper function.\n     *\n     * I computes the order in which to traverse the child nodes of a particular node.\n     */\n    void getCenterOrdering(KMeansNodePtr node, const ElementType* q, int* sort_indices)\n    {\n        DistanceType* domain_distances = new DistanceType[branching_];\n        for (int i=0; i<branching_; ++i) {\n            DistanceType dist = distance_(q, node->childs[i]->pivot, veclen_);\n\n            int j=0;\n            while (domain_distances[j]<dist && j<i) j++;\n            for (int k=i; k>j; --k) {\n                domain_distances[k] = domain_distances[k-1];\n                sort_indices[k] = sort_indices[k-1];\n            }\n            domain_distances[j] = dist;\n            sort_indices[j] = i;\n        }\n        delete[] domain_distances;\n    }\n\n    /**\n     * Method that computes the squared distance from the query point q\n     * from inside region with center c to the border between this\n     * region and the region with center p\n     */\n    DistanceType getDistanceToBorder(DistanceType* p, DistanceType* c, DistanceType* q)\n    {\n        DistanceType sum = 0;\n        DistanceType sum2 = 0;\n\n        for (int i=0; i<veclen_; ++i) {\n            DistanceType t = c[i]-p[i];\n            sum += t*(q[i]-(c[i]+p[i])/2);\n            sum2 += t*t;\n        }\n\n        return sum*sum/sum2;\n    }\n\n\n    /**\n     * Helper function the descends in the hierarchical k-means tree by spliting those clusters that minimize\n     * the overall variance of the clustering.\n     * Params:\n     *     root = root node\n     *     clusters = array with clusters centers (return value)\n     *     varianceValue = variance of the clustering (return value)\n     * Returns:\n     */\n    int getMinVarianceClusters(KMeansNodePtr root, KMeansNodePtr* clusters, int clusters_length, DistanceType& varianceValue)\n    {\n        int clusterCount = 1;\n        clusters[0] = root;\n\n        DistanceType meanVariance = root->variance*root->size;\n\n        while (clusterCount<clusters_length) {\n            DistanceType minVariance = (std::numeric_limits<DistanceType>::max)();\n            int splitIndex = -1;\n\n            for (int i=0; i<clusterCount; ++i) {\n                if (clusters[i]->childs != NULL) {\n\n                    DistanceType variance = meanVariance - clusters[i]->variance*clusters[i]->size;\n\n                    for (int j=0; j<branching_; ++j) {\n                        variance += clusters[i]->childs[j]->variance*clusters[i]->childs[j]->size;\n                    }\n                    if (variance<minVariance) {\n                        minVariance = variance;\n                        splitIndex = i;\n                    }\n                }\n            }\n\n            if (splitIndex==-1) break;\n            if ( (branching_+clusterCount-1) > clusters_length) break;\n\n            meanVariance = minVariance;\n\n            // split node\n            KMeansNodePtr toSplit = clusters[splitIndex];\n            clusters[splitIndex] = toSplit->childs[0];\n            for (int i=1; i<branching_; ++i) {\n                clusters[clusterCount++] = toSplit->childs[i];\n            }\n        }\n\n        varianceValue = meanVariance/root->size;\n        return clusterCount;\n    }\n\nprivate:\n    /** The branching factor used in the hierarchical k-means clustering */\n    int branching_;\n\n    /** Maximum number of iterations to use when performing k-means clustering */\n    int iterations_;\n\n    /** Algorithm for choosing the cluster centers */\n    flann_centers_init_t centers_init_;\n\n    /**\n     * Cluster border index. This is used in the tree search phase when determining\n     * the closest cluster to explore next. A zero value takes into account only\n     * the cluster centres, a value greater then zero also take into account the size\n     * of the cluster.\n     */\n    float cb_index_;\n\n    /**\n     * The dataset used by this index\n     */\n    const Matrix<ElementType> dataset_;\n\n    /** Index parameters */\n    IndexParams index_params_;\n\n    /**\n     * Number of features in the dataset.\n     */\n    size_t size_;\n\n    /**\n     * Length of each feature.\n     */\n    size_t veclen_;\n\n    /**\n     * The root node in the tree.\n     */\n    KMeansNodePtr root_;\n\n    /**\n     *  Array of indices to vectors in the dataset.\n     */\n    int* indices_;\n\n    /**\n     * The distance\n     */\n    Distance distance_;\n\n    /**\n     * Pooled memory allocator.\n     */\n    PooledAllocator pool_;\n\n    /**\n     * Memory occupied by the index.\n     */\n    int memoryCounter_;\n};\n\n}\n\n#endif //OPENCV_FLANN_KMEANS_INDEX_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/linear_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LINEAR_INDEX_H_\n#define OPENCV_FLANN_LINEAR_INDEX_H_\n\n#include \"general.h\"\n#include \"nn_index.h\"\n\nnamespace cvflann\n{\n\nstruct LinearIndexParams : public IndexParams\n{\n    LinearIndexParams()\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_LINEAR;\n    }\n};\n\ntemplate <typename Distance>\nclass LinearIndex : public NNIndex<Distance>\n{\npublic:\n\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n\n    LinearIndex(const Matrix<ElementType>& inputData, const IndexParams& params = LinearIndexParams(),\n                Distance d = Distance()) :\n        dataset_(inputData), index_params_(params), distance_(d)\n    {\n    }\n\n    LinearIndex(const LinearIndex&);\n    LinearIndex& operator=(const LinearIndex&);\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_LINEAR;\n    }\n\n\n    size_t size() const\n    {\n        return dataset_.rows;\n    }\n\n    size_t veclen() const\n    {\n        return dataset_.cols;\n    }\n\n\n    int usedMemory() const\n    {\n        return 0;\n    }\n\n    void buildIndex()\n    {\n        /* nothing to do here for linear search */\n    }\n\n    void saveIndex(FILE*)\n    {\n        /* nothing to do here for linear search */\n    }\n\n\n    void loadIndex(FILE*)\n    {\n        /* nothing to do here for linear search */\n\n        index_params_[\"algorithm\"] = getType();\n    }\n\n    void findNeighbors(ResultSet<DistanceType>& resultSet, const ElementType* vec, const SearchParams& /*searchParams*/)\n    {\n        ElementType* data = dataset_.data;\n        for (size_t i = 0; i < dataset_.rows; ++i, data += dataset_.cols) {\n            DistanceType dist = distance_(data, vec, dataset_.cols);\n            resultSet.addPoint(dist, (int)i);\n        }\n    }\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\nprivate:\n    /** The dataset */\n    const Matrix<ElementType> dataset_;\n    /** Index parameters */\n    IndexParams index_params_;\n    /** Index distance */\n    Distance distance_;\n\n};\n\n}\n\n#endif // OPENCV_FLANN_LINEAR_INDEX_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/logger.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LOGGER_H\n#define OPENCV_FLANN_LOGGER_H\n\n#include <stdio.h>\n#include <stdarg.h>\n\n#include \"defines.h\"\n\n\nnamespace cvflann\n{\n\nclass Logger\n{\n    Logger() : stream(stdout), logLevel(FLANN_LOG_WARN) {}\n\n    ~Logger()\n    {\n        if ((stream!=NULL)&&(stream!=stdout)) {\n            fclose(stream);\n        }\n    }\n\n    static Logger& instance()\n    {\n        static Logger logger;\n        return logger;\n    }\n\n    void _setDestination(const char* name)\n    {\n        if (name==NULL) {\n            stream = stdout;\n        }\n        else {\n            stream = fopen(name,\"w\");\n            if (stream == NULL) {\n                stream = stdout;\n            }\n        }\n    }\n\n    int _log(int level, const char* fmt, va_list arglist)\n    {\n        if (level > logLevel ) return -1;\n        int ret = vfprintf(stream, fmt, arglist);\n        return ret;\n    }\n\npublic:\n    /**\n     * Sets the logging level. All messages with lower priority will be ignored.\n     * @param level Logging level\n     */\n    static void setLevel(int level) { instance().logLevel = level; }\n\n    /**\n     * Sets the logging destination\n     * @param name Filename or NULL for console\n     */\n    static void setDestination(const char* name) { instance()._setDestination(name); }\n\n    /**\n     * Print log message\n     * @param level Log level\n     * @param fmt Message format\n     * @return\n     */\n    static int log(int level, const char* fmt, ...)\n    {\n        va_list arglist;\n        va_start(arglist, fmt);\n        int ret = instance()._log(level,fmt,arglist);\n        va_end(arglist);\n        return ret;\n    }\n\n#define LOG_METHOD(NAME,LEVEL) \\\n    static int NAME(const char* fmt, ...) \\\n    { \\\n        va_list ap; \\\n        va_start(ap, fmt); \\\n        int ret = instance()._log(LEVEL, fmt, ap); \\\n        va_end(ap); \\\n        return ret; \\\n    }\n\n    LOG_METHOD(fatal, FLANN_LOG_FATAL)\n    LOG_METHOD(error, FLANN_LOG_ERROR)\n    LOG_METHOD(warn, FLANN_LOG_WARN)\n    LOG_METHOD(info, FLANN_LOG_INFO)\n\nprivate:\n    FILE* stream;\n    int logLevel;\n};\n\n}\n\n#endif //OPENCV_FLANN_LOGGER_H\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/lsh_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LSH_INDEX_H_\n#define OPENCV_FLANN_LSH_INDEX_H_\n\n#include <algorithm>\n#include <cassert>\n#include <cstring>\n#include <map>\n#include <vector>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"heap.h\"\n#include \"lsh_table.h\"\n#include \"allocator.h\"\n#include \"random.h\"\n#include \"saving.h\"\n\nnamespace cvflann\n{\n\nstruct LshIndexParams : public IndexParams\n{\n    LshIndexParams(unsigned int table_number = 12, unsigned int key_size = 20, unsigned int multi_probe_level = 2)\n    {\n        (* this)[\"algorithm\"] = FLANN_INDEX_LSH;\n        // The number of hash tables to use\n        (*this)[\"table_number\"] = table_number;\n        // The length of the key in the hash tables\n        (*this)[\"key_size\"] = key_size;\n        // Number of levels to use in multi-probe (0 for standard LSH)\n        (*this)[\"multi_probe_level\"] = multi_probe_level;\n    }\n};\n\n/**\n * Randomized kd-tree index\n *\n * Contains the k-d trees and other information for indexing a set of points\n * for nearest-neighbor matching.\n */\ntemplate<typename Distance>\nclass LshIndex : public NNIndex<Distance>\n{\npublic:\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\n    /** Constructor\n     * @param input_data dataset with the input features\n     * @param params parameters passed to the LSH algorithm\n     * @param d the distance used\n     */\n    LshIndex(const Matrix<ElementType>& input_data, const IndexParams& params = LshIndexParams(),\n             Distance d = Distance()) :\n        dataset_(input_data), index_params_(params), distance_(d)\n    {\n        // cv::flann::IndexParams sets integer params as 'int', so it is used with get_param\n        // in place of 'unsigned int'\n        table_number_ = (unsigned int)get_param<int>(index_params_,\"table_number\",12);\n        key_size_ = (unsigned int)get_param<int>(index_params_,\"key_size\",20);\n        multi_probe_level_ = (unsigned int)get_param<int>(index_params_,\"multi_probe_level\",2);\n\n        feature_size_ = (unsigned)dataset_.cols;\n        fill_xor_mask(0, key_size_, multi_probe_level_, xor_masks_);\n    }\n\n\n    LshIndex(const LshIndex&);\n    LshIndex& operator=(const LshIndex&);\n\n    /**\n     * Builds the index\n     */\n    void buildIndex()\n    {\n        tables_.resize(table_number_);\n        for (unsigned int i = 0; i < table_number_; ++i) {\n            lsh::LshTable<ElementType>& table = tables_[i];\n            table = lsh::LshTable<ElementType>(feature_size_, key_size_);\n\n            // Add the features to the table\n            table.add(dataset_);\n        }\n    }\n\n    flann_algorithm_t getType() const\n    {\n        return FLANN_INDEX_LSH;\n    }\n\n\n    void saveIndex(FILE* stream)\n    {\n        save_value(stream,table_number_);\n        save_value(stream,key_size_);\n        save_value(stream,multi_probe_level_);\n        save_value(stream, dataset_);\n    }\n\n    void loadIndex(FILE* stream)\n    {\n        load_value(stream, table_number_);\n        load_value(stream, key_size_);\n        load_value(stream, multi_probe_level_);\n        load_value(stream, dataset_);\n        // Building the index is so fast we can afford not storing it\n        buildIndex();\n\n        index_params_[\"algorithm\"] = getType();\n        index_params_[\"table_number\"] = table_number_;\n        index_params_[\"key_size\"] = key_size_;\n        index_params_[\"multi_probe_level\"] = multi_probe_level_;\n    }\n\n    /**\n     *  Returns size of index.\n     */\n    size_t size() const\n    {\n        return dataset_.rows;\n    }\n\n    /**\n     * Returns the length of an index feature.\n     */\n    size_t veclen() const\n    {\n        return feature_size_;\n    }\n\n    /**\n     * Computes the index memory usage\n     * Returns: memory used by the index\n     */\n    int usedMemory() const\n    {\n        return (int)(dataset_.rows * sizeof(int));\n    }\n\n\n    IndexParams getParameters() const\n    {\n        return index_params_;\n    }\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n\n        KNNUniqueResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.clear();\n            std::fill_n(indices[i], knn, -1);\n            std::fill_n(dists[i], knn, std::numeric_limits<DistanceType>::max());\n            findNeighbors(resultSet, queries[i], params);\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices[i], dists[i], knn);\n            else resultSet.copy(indices[i], dists[i], knn);\n        }\n    }\n\n\n    /**\n     * Find set of nearest neighbors to vec. Their indices are stored inside\n     * the result object.\n     *\n     * Params:\n     *     result = the result object in which the indices of the nearest-neighbors are stored\n     *     vec = the vector for which to search the nearest neighbors\n     *     maxCheck = the maximum number of restarts (in a best-bin-first manner)\n     */\n    void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& /*searchParams*/)\n    {\n        getNeighbors(vec, result);\n    }\n\nprivate:\n    /** Defines the comparator on score and index\n     */\n    typedef std::pair<float, unsigned int> ScoreIndexPair;\n    struct SortScoreIndexPairOnSecond\n    {\n        bool operator()(const ScoreIndexPair& left, const ScoreIndexPair& right) const\n        {\n            return left.second < right.second;\n        }\n    };\n\n    /** Fills the different xor masks to use when getting the neighbors in multi-probe LSH\n     * @param key the key we build neighbors from\n     * @param lowest_index the lowest index of the bit set\n     * @param level the multi-probe level we are at\n     * @param xor_masks all the xor mask\n     */\n    void fill_xor_mask(lsh::BucketKey key, int lowest_index, unsigned int level,\n                       std::vector<lsh::BucketKey>& xor_masks)\n    {\n        xor_masks.push_back(key);\n        if (level == 0) return;\n        for (int index = lowest_index - 1; index >= 0; --index) {\n            // Create a new key\n            lsh::BucketKey new_key = key | (1 << index);\n            fill_xor_mask(new_key, index, level - 1, xor_masks);\n        }\n    }\n\n    /** Performs the approximate nearest-neighbor search.\n     * @param vec the feature to analyze\n     * @param do_radius flag indicating if we check the radius too\n     * @param radius the radius if it is a radius search\n     * @param do_k flag indicating if we limit the number of nn\n     * @param k_nn the number of nearest neighbors\n     * @param checked_average used for debugging\n     */\n    void getNeighbors(const ElementType* vec, bool /*do_radius*/, float radius, bool do_k, unsigned int k_nn,\n                      float& /*checked_average*/)\n    {\n        static std::vector<ScoreIndexPair> score_index_heap;\n\n        if (do_k) {\n            unsigned int worst_score = std::numeric_limits<unsigned int>::max();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n            for (; table != table_end; ++table) {\n                size_t key = table->getKey(vec);\n                std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n                std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n                for (; xor_mask != xor_mask_end; ++xor_mask) {\n                    size_t sub_key = key ^ (*xor_mask);\n                    const lsh::Bucket* bucket = table->getBucketFromKey(sub_key);\n                    if (bucket == 0) continue;\n\n                    // Go over each descriptor index\n                    std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                    std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                    DistanceType hamming_distance;\n\n                    // Process the rest of the candidates\n                    for (; training_index < last_training_index; ++training_index) {\n                        hamming_distance = distance_(vec, dataset_[*training_index], dataset_.cols);\n\n                        if (hamming_distance < worst_score) {\n                            // Insert the new element\n                            score_index_heap.push_back(ScoreIndexPair(hamming_distance, training_index));\n                            std::push_heap(score_index_heap.begin(), score_index_heap.end());\n\n                            if (score_index_heap.size() > (unsigned int)k_nn) {\n                                // Remove the highest distance value as we have too many elements\n                                std::pop_heap(score_index_heap.begin(), score_index_heap.end());\n                                score_index_heap.pop_back();\n                                // Keep track of the worst score\n                                worst_score = score_index_heap.front().first;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        else {\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n            typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n            for (; table != table_end; ++table) {\n                size_t key = table->getKey(vec);\n                std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n                std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n                for (; xor_mask != xor_mask_end; ++xor_mask) {\n                    size_t sub_key = key ^ (*xor_mask);\n                    const lsh::Bucket* bucket = table->getBucketFromKey(sub_key);\n                    if (bucket == 0) continue;\n\n                    // Go over each descriptor index\n                    std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                    std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                    DistanceType hamming_distance;\n\n                    // Process the rest of the candidates\n                    for (; training_index < last_training_index; ++training_index) {\n                        // Compute the Hamming distance\n                        hamming_distance = distance_(vec, dataset_[*training_index], dataset_.cols);\n                        if (hamming_distance < radius) score_index_heap.push_back(ScoreIndexPair(hamming_distance, training_index));\n                    }\n                }\n            }\n        }\n    }\n\n    /** Performs the approximate nearest-neighbor search.\n     * This is a slower version than the above as it uses the ResultSet\n     * @param vec the feature to analyze\n     */\n    void getNeighbors(const ElementType* vec, ResultSet<DistanceType>& result)\n    {\n        typename std::vector<lsh::LshTable<ElementType> >::const_iterator table = tables_.begin();\n        typename std::vector<lsh::LshTable<ElementType> >::const_iterator table_end = tables_.end();\n        for (; table != table_end; ++table) {\n            size_t key = table->getKey(vec);\n            std::vector<lsh::BucketKey>::const_iterator xor_mask = xor_masks_.begin();\n            std::vector<lsh::BucketKey>::const_iterator xor_mask_end = xor_masks_.end();\n            for (; xor_mask != xor_mask_end; ++xor_mask) {\n                size_t sub_key = key ^ (*xor_mask);\n                const lsh::Bucket* bucket = table->getBucketFromKey((lsh::BucketKey)sub_key);\n                if (bucket == 0) continue;\n\n                // Go over each descriptor index\n                std::vector<lsh::FeatureIndex>::const_iterator training_index = bucket->begin();\n                std::vector<lsh::FeatureIndex>::const_iterator last_training_index = bucket->end();\n                DistanceType hamming_distance;\n\n                // Process the rest of the candidates\n                for (; training_index < last_training_index; ++training_index) {\n                    // Compute the Hamming distance\n                    hamming_distance = distance_(vec, dataset_[*training_index], (int)dataset_.cols);\n                    result.addPoint(hamming_distance, *training_index);\n                }\n            }\n        }\n    }\n\n    /** The different hash tables */\n    std::vector<lsh::LshTable<ElementType> > tables_;\n\n    /** The data the LSH tables where built from */\n    Matrix<ElementType> dataset_;\n\n    /** The size of the features (as ElementType[]) */\n    unsigned int feature_size_;\n\n    IndexParams index_params_;\n\n    /** table number */\n    unsigned int table_number_;\n    /** key size */\n    unsigned int key_size_;\n    /** How far should we look for neighbors in multi-probe LSH */\n    unsigned int multi_probe_level_;\n\n    /** The XOR masks to apply to a key to get the neighboring buckets */\n    std::vector<lsh::BucketKey> xor_masks_;\n\n    Distance distance_;\n};\n}\n\n#endif //OPENCV_FLANN_LSH_INDEX_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/lsh_table.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n/***********************************************************************\n * Author: Vincent Rabaud\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_LSH_TABLE_H_\n#define OPENCV_FLANN_LSH_TABLE_H_\n\n#include <algorithm>\n#include <iostream>\n#include <iomanip>\n#include <limits.h>\n// TODO as soon as we use C++0x, use the code in USE_UNORDERED_MAP\n#ifdef __GXX_EXPERIMENTAL_CXX0X__\n#  define USE_UNORDERED_MAP 1\n#else\n#  define USE_UNORDERED_MAP 0\n#endif\n#if USE_UNORDERED_MAP\n#include <unordered_map>\n#else\n#include <map>\n#endif\n#include <math.h>\n#include <stddef.h>\n\n#include \"dynamic_bitset.h\"\n#include \"matrix.h\"\n\nnamespace cvflann\n{\n\nnamespace lsh\n{\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** What is stored in an LSH bucket\n */\ntypedef uint32_t FeatureIndex;\n/** The id from which we can get a bucket back in an LSH table\n */\ntypedef unsigned int BucketKey;\n\n/** A bucket in an LSH table\n */\ntypedef std::vector<FeatureIndex> Bucket;\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** POD for stats about an LSH table\n */\nstruct LshStats\n{\n    std::vector<unsigned int> bucket_sizes_;\n    size_t n_buckets_;\n    size_t bucket_size_mean_;\n    size_t bucket_size_median_;\n    size_t bucket_size_min_;\n    size_t bucket_size_max_;\n    size_t bucket_size_std_dev;\n    /** Each contained vector contains three value: beginning/end for interval, number of elements in the bin\n     */\n    std::vector<std::vector<unsigned int> > size_histogram_;\n};\n\n/** Overload the << operator for LshStats\n * @param out the streams\n * @param stats the stats to display\n * @return the streams\n */\ninline std::ostream& operator <<(std::ostream& out, const LshStats& stats)\n{\n    int w = 20;\n    out << \"Lsh Table Stats:\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"N buckets : \"\n    << stats.n_buckets_ << \"\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"mean size : \"\n    << std::setiosflags(std::ios::left) << stats.bucket_size_mean_ << \"\\n\" << std::setw(w)\n    << std::setiosflags(std::ios::right) << \"median size : \" << stats.bucket_size_median_ << \"\\n\" << std::setw(w)\n    << std::setiosflags(std::ios::right) << \"min size : \" << std::setiosflags(std::ios::left)\n    << stats.bucket_size_min_ << \"\\n\" << std::setw(w) << std::setiosflags(std::ios::right) << \"max size : \"\n    << std::setiosflags(std::ios::left) << stats.bucket_size_max_;\n\n    // Display the histogram\n    out << std::endl << std::setw(w) << std::setiosflags(std::ios::right) << \"histogram : \"\n    << std::setiosflags(std::ios::left);\n    for (std::vector<std::vector<unsigned int> >::const_iterator iterator = stats.size_histogram_.begin(), end =\n             stats.size_histogram_.end(); iterator != end; ++iterator) out << (*iterator)[0] << \"-\" << (*iterator)[1] << \": \" << (*iterator)[2] << \",  \";\n\n    return out;\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Lsh hash table. As its key is a sub-feature, and as usually\n * the size of it is pretty small, we keep it as a continuous memory array.\n * The value is an index in the corpus of features (we keep it as an unsigned\n * int for pure memory reasons, it could be a size_t)\n */\ntemplate<typename ElementType>\nclass LshTable\n{\npublic:\n    /** A container of all the feature indices. Optimized for space\n     */\n#if USE_UNORDERED_MAP\n    typedef std::unordered_map<BucketKey, Bucket> BucketsSpace;\n#else\n    typedef std::map<BucketKey, Bucket> BucketsSpace;\n#endif\n\n    /** A container of all the feature indices. Optimized for speed\n     */\n    typedef std::vector<Bucket> BucketsSpeed;\n\n    /** Default constructor\n     */\n    LshTable()\n    {\n    }\n\n    /** Default constructor\n     * Create the mask and allocate the memory\n     * @param feature_size is the size of the feature (considered as a ElementType[])\n     * @param key_size is the number of bits that are turned on in the feature\n     */\n    LshTable(unsigned int /*feature_size*/, unsigned int /*key_size*/)\n    {\n        std::cerr << \"LSH is not implemented for that type\" << std::endl;\n        assert(0);\n    }\n\n    /** Add a feature to the table\n     * @param value the value to store for that feature\n     * @param feature the feature itself\n     */\n    void add(unsigned int value, const ElementType* feature)\n    {\n        // Add the value to the corresponding bucket\n        BucketKey key = (lsh::BucketKey)getKey(feature);\n\n        switch (speed_level_) {\n        case kArray:\n            // That means we get the buckets from an array\n            buckets_speed_[key].push_back(value);\n            break;\n        case kBitsetHash:\n            // That means we can check the bitset for the presence of a key\n            key_bitset_.set(key);\n            buckets_space_[key].push_back(value);\n            break;\n        case kHash:\n        {\n            // That means we have to check for the hash table for the presence of a key\n            buckets_space_[key].push_back(value);\n            break;\n        }\n        }\n    }\n\n    /** Add a set of features to the table\n     * @param dataset the values to store\n     */\n    void add(Matrix<ElementType> dataset)\n    {\n#if USE_UNORDERED_MAP\n        buckets_space_.rehash((buckets_space_.size() + dataset.rows) * 1.2);\n#endif\n        // Add the features to the table\n        for (unsigned int i = 0; i < dataset.rows; ++i) add(i, dataset[i]);\n        // Now that the table is full, optimize it for speed/space\n        optimize();\n    }\n\n    /** Get a bucket given the key\n     * @param key\n     * @return\n     */\n    inline const Bucket* getBucketFromKey(BucketKey key) const\n    {\n        // Generate other buckets\n        switch (speed_level_) {\n        case kArray:\n            // That means we get the buckets from an array\n            return &buckets_speed_[key];\n            break;\n        case kBitsetHash:\n            // That means we can check the bitset for the presence of a key\n            if (key_bitset_.test(key)) return &buckets_space_.find(key)->second;\n            else return 0;\n            break;\n        case kHash:\n        {\n            // That means we have to check for the hash table for the presence of a key\n            BucketsSpace::const_iterator bucket_it, bucket_end = buckets_space_.end();\n            bucket_it = buckets_space_.find(key);\n            // Stop here if that bucket does not exist\n            if (bucket_it == bucket_end) return 0;\n            else return &bucket_it->second;\n            break;\n        }\n        }\n        return 0;\n    }\n\n    /** Compute the sub-signature of a feature\n     */\n    size_t getKey(const ElementType* /*feature*/) const\n    {\n        std::cerr << \"LSH is not implemented for that type\" << std::endl;\n        assert(0);\n        return 1;\n    }\n\n    /** Get statistics about the table\n     * @return\n     */\n    LshStats getStats() const;\n\nprivate:\n    /** defines the speed fo the implementation\n     * kArray uses a vector for storing data\n     * kBitsetHash uses a hash map but checks for the validity of a key with a bitset\n     * kHash uses a hash map only\n     */\n    enum SpeedLevel\n    {\n        kArray, kBitsetHash, kHash\n    };\n\n    /** Initialize some variables\n     */\n    void initialize(size_t key_size)\n    {\n        const size_t key_size_lower_bound = 1;\n        //a value (size_t(1) << key_size) must fit the size_t type so key_size has to be strictly less than size of size_t\n        const size_t key_size_upper_bound = std::min(sizeof(BucketKey) * CHAR_BIT + 1, sizeof(size_t) * CHAR_BIT);\n        if (key_size < key_size_lower_bound || key_size >= key_size_upper_bound)\n        {\n            std::stringstream errorMessage;\n            errorMessage << \"Invalid key_size (=\" << key_size << \"). Valid values for your system are \" << key_size_lower_bound << \" <= key_size < \" << key_size_upper_bound << \".\";\n            CV_Error(CV_StsBadArg, errorMessage.str());\n        }\n\n        speed_level_ = kHash;\n        key_size_ = (unsigned)key_size;\n    }\n\n    /** Optimize the table for speed/space\n     */\n    void optimize()\n    {\n        // If we are already using the fast storage, no need to do anything\n        if (speed_level_ == kArray) return;\n\n        // Use an array if it will be more than half full\n        if (buckets_space_.size() > ((size_t(1) << key_size_) / 2)) {\n            speed_level_ = kArray;\n            // Fill the array version of it\n            buckets_speed_.resize(size_t(1) << key_size_);\n            for (BucketsSpace::const_iterator key_bucket = buckets_space_.begin(); key_bucket != buckets_space_.end(); ++key_bucket) buckets_speed_[key_bucket->first] = key_bucket->second;\n\n            // Empty the hash table\n            buckets_space_.clear();\n            return;\n        }\n\n        // If the bitset is going to use less than 10% of the RAM of the hash map (at least 1 size_t for the key and two\n        // for the vector) or less than 512MB (key_size_ <= 30)\n        if (((std::max(buckets_space_.size(), buckets_speed_.size()) * CHAR_BIT * 3 * sizeof(BucketKey)) / 10\n             >= (size_t(1) << key_size_)) || (key_size_ <= 32)) {\n            speed_level_ = kBitsetHash;\n            key_bitset_.resize(size_t(1) << key_size_);\n            key_bitset_.reset();\n            // Try with the BucketsSpace\n            for (BucketsSpace::const_iterator key_bucket = buckets_space_.begin(); key_bucket != buckets_space_.end(); ++key_bucket) key_bitset_.set(key_bucket->first);\n        }\n        else {\n            speed_level_ = kHash;\n            key_bitset_.clear();\n        }\n    }\n\n    /** The vector of all the buckets if they are held for speed\n     */\n    BucketsSpeed buckets_speed_;\n\n    /** The hash table of all the buckets in case we cannot use the speed version\n     */\n    BucketsSpace buckets_space_;\n\n    /** What is used to store the data */\n    SpeedLevel speed_level_;\n\n    /** If the subkey is small enough, it will keep track of which subkeys are set through that bitset\n     * That is just a speedup so that we don't look in the hash table (which can be mush slower that checking a bitset)\n     */\n    DynamicBitset key_bitset_;\n\n    /** The size of the sub-signature in bits\n     */\n    unsigned int key_size_;\n\n    // Members only used for the unsigned char specialization\n    /** The mask to apply to a feature to get the hash key\n     * Only used in the unsigned char case\n     */\n    std::vector<size_t> mask_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Specialization for unsigned char\n\ntemplate<>\ninline LshTable<unsigned char>::LshTable(unsigned int feature_size, unsigned int subsignature_size)\n{\n    initialize(subsignature_size);\n    // Allocate the mask\n    mask_ = std::vector<size_t>((size_t)ceil((float)(feature_size * sizeof(char)) / (float)sizeof(size_t)), 0);\n\n    // A bit brutal but fast to code\n    std::vector<size_t> indices(feature_size * CHAR_BIT);\n    for (size_t i = 0; i < feature_size * CHAR_BIT; ++i) indices[i] = i;\n    std::random_shuffle(indices.begin(), indices.end());\n\n    // Generate a random set of order of subsignature_size_ bits\n    for (unsigned int i = 0; i < key_size_; ++i) {\n        size_t index = indices[i];\n\n        // Set that bit in the mask\n        size_t divisor = CHAR_BIT * sizeof(size_t);\n        size_t idx = index / divisor; //pick the right size_t index\n        mask_[idx] |= size_t(1) << (index % divisor); //use modulo to find the bit offset\n    }\n\n    // Set to 1 if you want to display the mask for debug\n#if 0\n    {\n        size_t bcount = 0;\n        BOOST_FOREACH(size_t mask_block, mask_){\n            out << std::setw(sizeof(size_t) * CHAR_BIT / 4) << std::setfill('0') << std::hex << mask_block\n                << std::endl;\n            bcount += __builtin_popcountll(mask_block);\n        }\n        out << \"bit count : \" << std::dec << bcount << std::endl;\n        out << \"mask size : \" << mask_.size() << std::endl;\n        return out;\n    }\n#endif\n}\n\n/** Return the Subsignature of a feature\n * @param feature the feature to analyze\n */\ntemplate<>\ninline size_t LshTable<unsigned char>::getKey(const unsigned char* feature) const\n{\n    // no need to check if T is dividable by sizeof(size_t) like in the Hamming\n    // distance computation as we have a mask\n    const size_t* feature_block_ptr = reinterpret_cast<const size_t*> ((const void*)feature);\n\n    // Figure out the subsignature of the feature\n    // Given the feature ABCDEF, and the mask 001011, the output will be\n    // 000CEF\n    size_t subsignature = 0;\n    size_t bit_index = 1;\n\n    for (std::vector<size_t>::const_iterator pmask_block = mask_.begin(); pmask_block != mask_.end(); ++pmask_block) {\n        // get the mask and signature blocks\n        size_t feature_block = *feature_block_ptr;\n        size_t mask_block = *pmask_block;\n        while (mask_block) {\n            // Get the lowest set bit in the mask block\n            size_t lowest_bit = mask_block & (-(ptrdiff_t)mask_block);\n            // Add it to the current subsignature if necessary\n            subsignature += (feature_block & lowest_bit) ? bit_index : 0;\n            // Reset the bit in the mask block\n            mask_block ^= lowest_bit;\n            // increment the bit index for the subsignature\n            bit_index <<= 1;\n        }\n        // Check the next feature block\n        ++feature_block_ptr;\n    }\n    return subsignature;\n}\n\ntemplate<>\ninline LshStats LshTable<unsigned char>::getStats() const\n{\n    LshStats stats;\n    stats.bucket_size_mean_ = 0;\n    if ((buckets_speed_.empty()) && (buckets_space_.empty())) {\n        stats.n_buckets_ = 0;\n        stats.bucket_size_median_ = 0;\n        stats.bucket_size_min_ = 0;\n        stats.bucket_size_max_ = 0;\n        return stats;\n    }\n\n    if (!buckets_speed_.empty()) {\n        for (BucketsSpeed::const_iterator pbucket = buckets_speed_.begin(); pbucket != buckets_speed_.end(); ++pbucket) {\n            stats.bucket_sizes_.push_back((lsh::FeatureIndex)pbucket->size());\n            stats.bucket_size_mean_ += pbucket->size();\n        }\n        stats.bucket_size_mean_ /= buckets_speed_.size();\n        stats.n_buckets_ = buckets_speed_.size();\n    }\n    else {\n        for (BucketsSpace::const_iterator x = buckets_space_.begin(); x != buckets_space_.end(); ++x) {\n            stats.bucket_sizes_.push_back((lsh::FeatureIndex)x->second.size());\n            stats.bucket_size_mean_ += x->second.size();\n        }\n        stats.bucket_size_mean_ /= buckets_space_.size();\n        stats.n_buckets_ = buckets_space_.size();\n    }\n\n    std::sort(stats.bucket_sizes_.begin(), stats.bucket_sizes_.end());\n\n    //  BOOST_FOREACH(int size, stats.bucket_sizes_)\n    //          std::cout << size << \" \";\n    //  std::cout << std::endl;\n    stats.bucket_size_median_ = stats.bucket_sizes_[stats.bucket_sizes_.size() / 2];\n    stats.bucket_size_min_ = stats.bucket_sizes_.front();\n    stats.bucket_size_max_ = stats.bucket_sizes_.back();\n\n    // TODO compute mean and std\n    /*float mean, stddev;\n       stats.bucket_size_mean_ = mean;\n       stats.bucket_size_std_dev = stddev;*/\n\n    // Include a histogram of the buckets\n    unsigned int bin_start = 0;\n    unsigned int bin_end = 20;\n    bool is_new_bin = true;\n    for (std::vector<unsigned int>::iterator iterator = stats.bucket_sizes_.begin(), end = stats.bucket_sizes_.end(); iterator\n         != end; )\n        if (*iterator < bin_end) {\n            if (is_new_bin) {\n                stats.size_histogram_.push_back(std::vector<unsigned int>(3, 0));\n                stats.size_histogram_.back()[0] = bin_start;\n                stats.size_histogram_.back()[1] = bin_end - 1;\n                is_new_bin = false;\n            }\n            ++stats.size_histogram_.back()[2];\n            ++iterator;\n        }\n        else {\n            bin_start += 20;\n            bin_end += 20;\n            is_new_bin = true;\n        }\n\n    return stats;\n}\n\n// End the two namespaces\n}\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n#endif /* OPENCV_FLANN_LSH_TABLE_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/matrix.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_DATASET_H_\n#define OPENCV_FLANN_DATASET_H_\n\n#include <stdio.h>\n\n#include \"general.h\"\n\nnamespace cvflann\n{\n\n/**\n * Class that implements a simple rectangular matrix stored in a memory buffer and\n * provides convenient matrix-like access using the [] operators.\n */\ntemplate <typename T>\nclass Matrix\n{\npublic:\n    typedef T type;\n\n    size_t rows;\n    size_t cols;\n    size_t stride;\n    T* data;\n\n    Matrix() : rows(0), cols(0), stride(0), data(NULL)\n    {\n    }\n\n    Matrix(T* data_, size_t rows_, size_t cols_, size_t stride_ = 0) :\n        rows(rows_), cols(cols_),  stride(stride_), data(data_)\n    {\n        if (stride==0) stride = cols;\n    }\n\n    /**\n     * Convenience function for deallocating the storage data.\n     */\n    FLANN_DEPRECATED void free()\n    {\n        fprintf(stderr, \"The cvflann::Matrix<T>::free() method is deprecated \"\n                \"and it does not do any memory deallocation any more.  You are\"\n                \"responsible for deallocating the matrix memory (by doing\"\n                \"'delete[] matrix.data' for example)\");\n    }\n\n    /**\n     * Operator that return a (pointer to a) row of the data.\n     */\n    T* operator[](size_t index) const\n    {\n        return data+index*stride;\n    }\n};\n\n\nclass UntypedMatrix\n{\npublic:\n    size_t rows;\n    size_t cols;\n    void* data;\n    flann_datatype_t type;\n\n    UntypedMatrix(void* data_, long rows_, long cols_) :\n        rows(rows_), cols(cols_), data(data_)\n    {\n    }\n\n    ~UntypedMatrix()\n    {\n    }\n\n\n    template<typename T>\n    Matrix<T> as()\n    {\n        return Matrix<T>((T*)data, rows, cols);\n    }\n};\n\n\n\n}\n\n#endif //OPENCV_FLANN_DATASET_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/miniflann.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef _OPENCV_MINIFLANN_HPP_\n#define _OPENCV_MINIFLANN_HPP_\n\n#ifdef __cplusplus\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/flann/defines.h\"\n\nnamespace cv\n{\n\nnamespace flann\n{\n\nstruct CV_EXPORTS IndexParams\n{\n    IndexParams();\n    ~IndexParams();\n\n    std::string getString(const std::string& key, const std::string& defaultVal=std::string()) const;\n    int getInt(const std::string& key, int defaultVal=-1) const;\n    double getDouble(const std::string& key, double defaultVal=-1) const;\n\n    void setString(const std::string& key, const std::string& value);\n    void setInt(const std::string& key, int value);\n    void setDouble(const std::string& key, double value);\n    void setFloat(const std::string& key, float value);\n    void setBool(const std::string& key, bool value);\n    void setAlgorithm(int value);\n\n    void getAll(std::vector<std::string>& names,\n                std::vector<int>& types,\n                std::vector<std::string>& strValues,\n                std::vector<double>& numValues) const;\n\n    void* params;\n};\n\nstruct CV_EXPORTS KDTreeIndexParams : public IndexParams\n{\n    KDTreeIndexParams(int trees=4);\n};\n\nstruct CV_EXPORTS LinearIndexParams : public IndexParams\n{\n    LinearIndexParams();\n};\n\nstruct CV_EXPORTS CompositeIndexParams : public IndexParams\n{\n    CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11,\n                         cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2 );\n};\n\nstruct CV_EXPORTS AutotunedIndexParams : public IndexParams\n{\n    AutotunedIndexParams(float target_precision = 0.8, float build_weight = 0.01,\n                         float memory_weight = 0, float sample_fraction = 0.1);\n};\n\nstruct CV_EXPORTS HierarchicalClusteringIndexParams : public IndexParams\n{\n    HierarchicalClusteringIndexParams(int branching = 32,\n                      cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, int trees = 4, int leaf_size = 100 );\n};\n\nstruct CV_EXPORTS KMeansIndexParams : public IndexParams\n{\n    KMeansIndexParams(int branching = 32, int iterations = 11,\n                      cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2 );\n};\n\nstruct CV_EXPORTS LshIndexParams : public IndexParams\n{\n    LshIndexParams(int table_number, int key_size, int multi_probe_level);\n};\n\nstruct CV_EXPORTS SavedIndexParams : public IndexParams\n{\n    SavedIndexParams(const std::string& filename);\n};\n\nstruct CV_EXPORTS SearchParams : public IndexParams\n{\n    SearchParams( int checks = 32, float eps = 0, bool sorted = true );\n};\n\nclass CV_EXPORTS_W Index\n{\npublic:\n    CV_WRAP Index();\n    CV_WRAP Index(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2);\n    virtual ~Index();\n\n    CV_WRAP virtual void build(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2);\n    CV_WRAP virtual void knnSearch(InputArray query, OutputArray indices,\n                   OutputArray dists, int knn, const SearchParams& params=SearchParams());\n\n    CV_WRAP virtual int radiusSearch(InputArray query, OutputArray indices,\n                             OutputArray dists, double radius, int maxResults,\n                             const SearchParams& params=SearchParams());\n\n    CV_WRAP virtual void save(const std::string& filename) const;\n    CV_WRAP virtual bool load(InputArray features, const std::string& filename);\n    CV_WRAP virtual void release();\n    CV_WRAP cvflann::flann_distance_t getDistance() const;\n    CV_WRAP cvflann::flann_algorithm_t getAlgorithm() const;\n\nprotected:\n    cvflann::flann_distance_t distType;\n    cvflann::flann_algorithm_t algo;\n    int featureType;\n    void* index;\n};\n\n} } // namespace cv::flann\n\n#endif // __cplusplus\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/nn_index.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_NNINDEX_H\n#define OPENCV_FLANN_NNINDEX_H\n\n#include <string>\n\n#include \"general.h\"\n#include \"matrix.h\"\n#include \"result_set.h\"\n#include \"params.h\"\n\nnamespace cvflann\n{\n\n/**\n * Nearest-neighbour index base class\n */\ntemplate <typename Distance>\nclass NNIndex\n{\n    typedef typename Distance::ElementType ElementType;\n    typedef typename Distance::ResultType DistanceType;\n\npublic:\n\n    virtual ~NNIndex() {}\n\n    /**\n     * \\brief Builds the index\n     */\n    virtual void buildIndex() = 0;\n\n    /**\n     * \\brief Perform k-nearest neighbor search\n     * \\param[in] queries The query points for which to find the nearest neighbors\n     * \\param[out] indices The indices of the nearest neighbors found\n     * \\param[out] dists Distances to the nearest neighbors found\n     * \\param[in] knn Number of nearest neighbors to return\n     * \\param[in] params Search parameters\n     */\n    virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)\n    {\n        assert(queries.cols == veclen());\n        assert(indices.rows >= queries.rows);\n        assert(dists.rows >= queries.rows);\n        assert(int(indices.cols) >= knn);\n        assert(int(dists.cols) >= knn);\n\n#if 0\n        KNNResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.init(indices[i], dists[i]);\n            findNeighbors(resultSet, queries[i], params);\n        }\n#else\n        KNNUniqueResultSet<DistanceType> resultSet(knn);\n        for (size_t i = 0; i < queries.rows; i++) {\n            resultSet.clear();\n            findNeighbors(resultSet, queries[i], params);\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices[i], dists[i], knn);\n            else resultSet.copy(indices[i], dists[i], knn);\n        }\n#endif\n    }\n\n    /**\n     * \\brief Perform radius search\n     * \\param[in] query The query point\n     * \\param[out] indices The indinces of the neighbors found within the given radius\n     * \\param[out] dists The distances to the nearest neighbors found\n     * \\param[in] radius The radius used for search\n     * \\param[in] params Search parameters\n     * \\returns Number of neighbors found\n     */\n    virtual int radiusSearch(const Matrix<ElementType>& query, Matrix<int>& indices, Matrix<DistanceType>& dists, float radius, const SearchParams& params)\n    {\n        if (query.rows != 1) {\n            fprintf(stderr, \"I can only search one feature at a time for range search\\n\");\n            return -1;\n        }\n        assert(query.cols == veclen());\n        assert(indices.cols == dists.cols);\n\n        int n = 0;\n        int* indices_ptr = NULL;\n        DistanceType* dists_ptr = NULL;\n        if (indices.cols > 0) {\n            n = (int)indices.cols;\n            indices_ptr = indices[0];\n            dists_ptr = dists[0];\n        }\n\n        RadiusUniqueResultSet<DistanceType> resultSet((DistanceType)radius);\n        resultSet.clear();\n        findNeighbors(resultSet, query[0], params);\n        if (n>0) {\n            if (get_param(params,\"sorted\",true)) resultSet.sortAndCopy(indices_ptr, dists_ptr, n);\n            else resultSet.copy(indices_ptr, dists_ptr, n);\n        }\n\n        return (int)resultSet.size();\n    }\n\n    /**\n     * \\brief Saves the index to a stream\n     * \\param stream The stream to save the index to\n     */\n    virtual void saveIndex(FILE* stream) = 0;\n\n    /**\n     * \\brief Loads the index from a stream\n     * \\param stream The stream from which the index is loaded\n     */\n    virtual void loadIndex(FILE* stream) = 0;\n\n    /**\n     * \\returns number of features in this index.\n     */\n    virtual size_t size() const = 0;\n\n    /**\n     * \\returns The dimensionality of the features in this index.\n     */\n    virtual size_t veclen() const = 0;\n\n    /**\n     * \\returns The amount of memory (in bytes) used by the index.\n     */\n    virtual int usedMemory() const = 0;\n\n    /**\n     * \\returns The index type (kdtree, kmeans,...)\n     */\n    virtual flann_algorithm_t getType() const = 0;\n\n    /**\n     * \\returns The index parameters\n     */\n    virtual IndexParams getParameters() const = 0;\n\n\n    /**\n     * \\brief Method that searches for nearest-neighbours\n     */\n    virtual void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams) = 0;\n};\n\n}\n\n#endif //OPENCV_FLANN_NNINDEX_H\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/object_factory.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_OBJECT_FACTORY_H_\n#define OPENCV_FLANN_OBJECT_FACTORY_H_\n\n#include <map>\n\nnamespace cvflann\n{\n\nclass CreatorNotFound\n{\n};\n\ntemplate<typename BaseClass,\n         typename UniqueIdType,\n         typename ObjectCreator = BaseClass* (*)()>\nclass ObjectFactory\n{\n    typedef ObjectFactory<BaseClass,UniqueIdType,ObjectCreator> ThisClass;\n    typedef std::map<UniqueIdType, ObjectCreator> ObjectRegistry;\n\n    // singleton class, private constructor\n    ObjectFactory() {}\n\npublic:\n\n    bool subscribe(UniqueIdType id, ObjectCreator creator)\n    {\n        if (object_registry.find(id) != object_registry.end()) return false;\n\n        object_registry[id] = creator;\n        return true;\n    }\n\n    bool unregister(UniqueIdType id)\n    {\n        return object_registry.erase(id) == 1;\n    }\n\n    ObjectCreator create(UniqueIdType id)\n    {\n        typename ObjectRegistry::const_iterator iter = object_registry.find(id);\n\n        if (iter == object_registry.end()) {\n            throw CreatorNotFound();\n        }\n\n        return iter->second;\n    }\n\n    static ThisClass& instance()\n    {\n        static ThisClass the_factory;\n        return the_factory;\n    }\nprivate:\n    ObjectRegistry object_registry;\n};\n\n}\n\n#endif /* OPENCV_FLANN_OBJECT_FACTORY_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/params.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2011  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2011  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_PARAMS_H_\n#define OPENCV_FLANN_PARAMS_H_\n\n#include \"any.h\"\n#include \"general.h\"\n#include <iostream>\n#include <map>\n\n\nnamespace cvflann\n{\n\ntypedef std::map<std::string, any> IndexParams;\n\nstruct SearchParams : public IndexParams\n{\n    SearchParams(int checks = 32, float eps = 0, bool sorted = true )\n    {\n        // how many leafs to visit when searching for neighbours (-1 for unlimited)\n        (*this)[\"checks\"] = checks;\n        // search for eps-approximate neighbours (default: 0)\n        (*this)[\"eps\"] = eps;\n        // only for radius search, require neighbours sorted by distance (default: true)\n        (*this)[\"sorted\"] = sorted;\n    }\n};\n\n\ntemplate<typename T>\nT get_param(const IndexParams& params, std::string name, const T& default_value)\n{\n    IndexParams::const_iterator it = params.find(name);\n    if (it != params.end()) {\n        return it->second.cast<T>();\n    }\n    else {\n        return default_value;\n    }\n}\n\ntemplate<typename T>\nT get_param(const IndexParams& params, std::string name)\n{\n    IndexParams::const_iterator it = params.find(name);\n    if (it != params.end()) {\n        return it->second.cast<T>();\n    }\n    else {\n        throw FLANNException(std::string(\"Missing parameter '\")+name+std::string(\"' in the parameters given\"));\n    }\n}\n\ninline void print_params(const IndexParams& params)\n{\n    IndexParams::const_iterator it;\n\n    for(it=params.begin(); it!=params.end(); ++it) {\n        std::cout << it->first << \" : \" << it->second << std::endl;\n    }\n}\n\n\n\n}\n\n\n#endif /* OPENCV_FLANN_PARAMS_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/random.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_RANDOM_H\n#define OPENCV_FLANN_RANDOM_H\n\n#include <algorithm>\n#include <cstdlib>\n#include <vector>\n\n#include \"general.h\"\n\nnamespace cvflann\n{\n\n/**\n * Seeds the random number generator\n *  @param seed Random seed\n */\ninline void seed_random(unsigned int seed)\n{\n    srand(seed);\n}\n\n/*\n * Generates a random double value.\n */\n/**\n * Generates a random double value.\n * @param high Upper limit\n * @param low Lower limit\n * @return Random double value\n */\ninline double rand_double(double high = 1.0, double low = 0)\n{\n    return low + ((high-low) * (std::rand() / (RAND_MAX + 1.0)));\n}\n\n/**\n * Generates a random integer value.\n * @param high Upper limit\n * @param low Lower limit\n * @return Random integer value\n */\ninline int rand_int(int high = RAND_MAX, int low = 0)\n{\n    return low + (int) ( double(high-low) * (std::rand() / (RAND_MAX + 1.0)));\n}\n\n/**\n * Random number generator that returns a distinct number from\n * the [0,n) interval each time.\n */\nclass UniqueRandom\n{\n    std::vector<int> vals_;\n    int size_;\n    int counter_;\n\npublic:\n    /**\n     * Constructor.\n     * @param n Size of the interval from which to generate\n     * @return\n     */\n    UniqueRandom(int n)\n    {\n        init(n);\n    }\n\n    /**\n     * Initializes the number generator.\n     * @param n the size of the interval from which to generate random numbers.\n     */\n    void init(int n)\n    {\n        // create and initialize an array of size n\n        vals_.resize(n);\n        size_ = n;\n        for (int i = 0; i < size_; ++i) vals_[i] = i;\n\n        // shuffle the elements in the array\n        std::random_shuffle(vals_.begin(), vals_.end());\n\n        counter_ = 0;\n    }\n\n    /**\n     * Return a distinct random integer in greater or equal to 0 and less\n     * than 'n' on each call. It should be called maximum 'n' times.\n     * Returns: a random integer\n     */\n    int next()\n    {\n        if (counter_ == size_) {\n            return -1;\n        }\n        else {\n            return vals_[counter_++];\n        }\n    }\n};\n\n}\n\n#endif //OPENCV_FLANN_RANDOM_H\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/result_set.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_RESULTSET_H\n#define OPENCV_FLANN_RESULTSET_H\n\n#include <algorithm>\n#include <cstring>\n#include <iostream>\n#include <limits>\n#include <set>\n#include <vector>\n\nnamespace cvflann\n{\n\n/* This record represents a branch point when finding neighbors in\n    the tree.  It contains a record of the minimum distance to the query\n    point, as well as the node at which the search resumes.\n */\n\ntemplate <typename T, typename DistanceType>\nstruct BranchStruct\n{\n    T node;           /* Tree node at which search resumes */\n    DistanceType mindist;     /* Minimum distance to query for all nodes below. */\n\n    BranchStruct() {}\n    BranchStruct(const T& aNode, DistanceType dist) : node(aNode), mindist(dist) {}\n\n    bool operator<(const BranchStruct<T, DistanceType>& rhs) const\n    {\n        return mindist<rhs.mindist;\n    }\n};\n\n\ntemplate <typename DistanceType>\nclass ResultSet\n{\npublic:\n    virtual ~ResultSet() {}\n\n    virtual bool full() const = 0;\n\n    virtual void addPoint(DistanceType dist, int index) = 0;\n\n    virtual DistanceType worstDist() const = 0;\n\n};\n\n/**\n * KNNSimpleResultSet does not ensure that the element it holds are unique.\n * Is used in those cases where the nearest neighbour algorithm used does not\n * attempt to insert the same element multiple times.\n */\ntemplate <typename DistanceType>\nclass KNNSimpleResultSet : public ResultSet<DistanceType>\n{\n    int* indices;\n    DistanceType* dists;\n    int capacity;\n    int count;\n    DistanceType worst_distance_;\n\npublic:\n    KNNSimpleResultSet(int capacity_) : capacity(capacity_), count(0)\n    {\n    }\n\n    void init(int* indices_, DistanceType* dists_)\n    {\n        indices = indices_;\n        dists = dists_;\n        count = 0;\n        worst_distance_ = (std::numeric_limits<DistanceType>::max)();\n        dists[capacity-1] = worst_distance_;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return count == capacity;\n    }\n\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist >= worst_distance_) return;\n        int i;\n        for (i=count; i>0; --i) {\n#ifdef FLANN_FIRST_MATCH\n            if ( (dists[i-1]>dist) || ((dist==dists[i-1])&&(indices[i-1]>index)) )\n#else\n            if (dists[i-1]>dist)\n#endif\n            {\n                if (i<capacity) {\n                    dists[i] = dists[i-1];\n                    indices[i] = indices[i-1];\n                }\n            }\n            else break;\n        }\n        if (count < capacity) ++count;\n        dists[i] = dist;\n        indices[i] = index;\n        worst_distance_ = dists[capacity-1];\n    }\n\n    DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\n};\n\n/**\n * K-Nearest neighbour result set. Ensures that the elements inserted are unique\n */\ntemplate <typename DistanceType>\nclass KNNResultSet : public ResultSet<DistanceType>\n{\n    int* indices;\n    DistanceType* dists;\n    int capacity;\n    int count;\n    DistanceType worst_distance_;\n\npublic:\n    KNNResultSet(int capacity_) : capacity(capacity_), count(0)\n    {\n    }\n\n    void init(int* indices_, DistanceType* dists_)\n    {\n        indices = indices_;\n        dists = dists_;\n        count = 0;\n        worst_distance_ = (std::numeric_limits<DistanceType>::max)();\n        dists[capacity-1] = worst_distance_;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return count == capacity;\n    }\n\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist >= worst_distance_) return;\n        int i;\n        for (i = count; i > 0; --i) {\n#ifdef FLANN_FIRST_MATCH\n            if ( (dists[i-1]<=dist) && ((dist!=dists[i-1])||(indices[i-1]<=index)) )\n#else\n            if (dists[i-1]<=dist)\n#endif\n            {\n                // Check for duplicate indices\n                int j = i - 1;\n                while ((j >= 0) && (dists[j] == dist)) {\n                    if (indices[j] == index) {\n                        return;\n                    }\n                    --j;\n                }\n                break;\n            }\n        }\n\n        if (count < capacity) ++count;\n        for (int j = count-1; j > i; --j) {\n            dists[j] = dists[j-1];\n            indices[j] = indices[j-1];\n        }\n        dists[i] = dist;\n        indices[i] = index;\n        worst_distance_ = dists[capacity-1];\n    }\n\n    DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\n};\n\n\n/**\n * A result-set class used when performing a radius based search.\n */\ntemplate <typename DistanceType>\nclass RadiusResultSet : public ResultSet<DistanceType>\n{\n    DistanceType radius;\n    int* indices;\n    DistanceType* dists;\n    size_t capacity;\n    size_t count;\n\npublic:\n    RadiusResultSet(DistanceType radius_, int* indices_, DistanceType* dists_, int capacity_) :\n        radius(radius_), indices(indices_), dists(dists_), capacity(capacity_)\n    {\n        init();\n    }\n\n    ~RadiusResultSet()\n    {\n    }\n\n    void init()\n    {\n        count = 0;\n    }\n\n    size_t size() const\n    {\n        return count;\n    }\n\n    bool full() const\n    {\n        return true;\n    }\n\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist<radius) {\n            if ((capacity>0)&&(count < capacity)) {\n                dists[count] = dist;\n                indices[count] = index;\n            }\n            count++;\n        }\n    }\n\n    DistanceType worstDist() const\n    {\n        return radius;\n    }\n\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors\n * Faster than KNNResultSet as it uses a binary heap and does not maintain two arrays\n */\ntemplate<typename DistanceType>\nclass UniqueResultSet : public ResultSet<DistanceType>\n{\npublic:\n    struct DistIndex\n    {\n        DistIndex(DistanceType dist, unsigned int index) :\n            dist_(dist), index_(index)\n        {\n        }\n        bool operator<(const DistIndex dist_index) const\n        {\n            return (dist_ < dist_index.dist_) || ((dist_ == dist_index.dist_) && index_ < dist_index.index_);\n        }\n        DistanceType dist_;\n        unsigned int index_;\n    };\n\n    /** Default cosntructor */\n    UniqueResultSet() :\n        worst_distance_(std::numeric_limits<DistanceType>::max())\n    {\n    }\n\n    /** Check the status of the set\n     * @return true if we have k NN\n     */\n    inline bool full() const\n    {\n        return is_full_;\n    }\n\n    /** Remove all elements in the set\n     */\n    virtual void clear() = 0;\n\n    /** Copy the set to two C arrays\n     * @param indices pointer to a C array of indices\n     * @param dist pointer to a C array of distances\n     * @param n_neighbors the number of neighbors to copy\n     */\n    virtual void copy(int* indices, DistanceType* dist, int n_neighbors = -1) const\n    {\n        if (n_neighbors < 0) {\n            for (typename std::set<DistIndex>::const_iterator dist_index = dist_indices_.begin(), dist_index_end =\n                     dist_indices_.end(); dist_index != dist_index_end; ++dist_index, ++indices, ++dist) {\n                *indices = dist_index->index_;\n                *dist = dist_index->dist_;\n            }\n        }\n        else {\n            int i = 0;\n            for (typename std::set<DistIndex>::const_iterator dist_index = dist_indices_.begin(), dist_index_end =\n                     dist_indices_.end(); (dist_index != dist_index_end) && (i < n_neighbors); ++dist_index, ++indices, ++dist, ++i) {\n                *indices = dist_index->index_;\n                *dist = dist_index->dist_;\n            }\n        }\n    }\n\n    /** Copy the set to two C arrays but sort it according to the distance first\n     * @param indices pointer to a C array of indices\n     * @param dist pointer to a C array of distances\n     * @param n_neighbors the number of neighbors to copy\n     */\n    virtual void sortAndCopy(int* indices, DistanceType* dist, int n_neighbors = -1) const\n    {\n        copy(indices, dist, n_neighbors);\n    }\n\n    /** The number of neighbors in the set\n     * @return\n     */\n    size_t size() const\n    {\n        return dist_indices_.size();\n    }\n\n    /** The distance of the furthest neighbor\n     * If we don't have enough neighbors, it returns the max possible value\n     * @return\n     */\n    inline DistanceType worstDist() const\n    {\n        return worst_distance_;\n    }\nprotected:\n    /** Flag to say if the set is full */\n    bool is_full_;\n\n    /** The worst distance found so far */\n    DistanceType worst_distance_;\n\n    /** The best candidates so far */\n    std::set<DistIndex> dist_indices_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors\n * Faster than KNNResultSet as it uses a binary heap and does not maintain two arrays\n */\ntemplate<typename DistanceType>\nclass KNNUniqueResultSet : public UniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param capacity the number of neighbors to store at max\n     */\n    KNNUniqueResultSet(unsigned int capacity) : capacity_(capacity)\n    {\n        this->is_full_ = false;\n        this->clear();\n    }\n\n    /** Add a possible candidate to the best neighbors\n     * @param dist distance for that neighbor\n     * @param index index of that neighbor\n     */\n    inline void addPoint(DistanceType dist, int index)\n    {\n        // Don't do anything if we are worse than the worst\n        if (dist >= worst_distance_) return;\n        dist_indices_.insert(DistIndex(dist, index));\n\n        if (is_full_) {\n            if (dist_indices_.size() > capacity_) {\n                dist_indices_.erase(*dist_indices_.rbegin());\n                worst_distance_ = dist_indices_.rbegin()->dist_;\n            }\n        }\n        else if (dist_indices_.size() == capacity_) {\n            is_full_ = true;\n            worst_distance_ = dist_indices_.rbegin()->dist_;\n        }\n    }\n\n    /** Remove all elements in the set\n     */\n    void clear()\n    {\n        dist_indices_.clear();\n        worst_distance_ = std::numeric_limits<DistanceType>::max();\n        is_full_ = false;\n    }\n\nprotected:\n    typedef typename UniqueResultSet<DistanceType>::DistIndex DistIndex;\n    using UniqueResultSet<DistanceType>::is_full_;\n    using UniqueResultSet<DistanceType>::worst_distance_;\n    using UniqueResultSet<DistanceType>::dist_indices_;\n\n    /** The number of neighbors to keep */\n    unsigned int capacity_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the radius nearest neighbors\n * It is more accurate than RadiusResult as it is not limited in the number of neighbors\n */\ntemplate<typename DistanceType>\nclass RadiusUniqueResultSet : public UniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param capacity the number of neighbors to store at max\n     */\n    RadiusUniqueResultSet(DistanceType radius) :\n        radius_(radius)\n    {\n        is_full_ = true;\n    }\n\n    /** Add a possible candidate to the best neighbors\n     * @param dist distance for that neighbor\n     * @param index index of that neighbor\n     */\n    void addPoint(DistanceType dist, int index)\n    {\n        if (dist <= radius_) dist_indices_.insert(DistIndex(dist, index));\n    }\n\n    /** Remove all elements in the set\n     */\n    inline void clear()\n    {\n        dist_indices_.clear();\n    }\n\n\n    /** Check the status of the set\n     * @return alwys false\n     */\n    inline bool full() const\n    {\n        return true;\n    }\n\n    /** The distance of the furthest neighbor\n     * If we don't have enough neighbors, it returns the max possible value\n     * @return\n     */\n    inline DistanceType worstDist() const\n    {\n        return radius_;\n    }\nprivate:\n    typedef typename UniqueResultSet<DistanceType>::DistIndex DistIndex;\n    using UniqueResultSet<DistanceType>::dist_indices_;\n    using UniqueResultSet<DistanceType>::is_full_;\n\n    /** The furthest distance a neighbor can be */\n    DistanceType radius_;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/** Class that holds the k NN neighbors within a radius distance\n */\ntemplate<typename DistanceType>\nclass KNNRadiusUniqueResultSet : public KNNUniqueResultSet<DistanceType>\n{\npublic:\n    /** Constructor\n     * @param capacity the number of neighbors to store at max\n     */\n    KNNRadiusUniqueResultSet(unsigned int capacity, DistanceType radius)\n    {\n        this->capacity_ = capacity;\n        this->radius_ = radius;\n        this->dist_indices_.reserve(capacity_);\n        this->clear();\n    }\n\n    /** Remove all elements in the set\n     */\n    void clear()\n    {\n        dist_indices_.clear();\n        worst_distance_ = radius_;\n        is_full_ = false;\n    }\nprivate:\n    using KNNUniqueResultSet<DistanceType>::dist_indices_;\n    using KNNUniqueResultSet<DistanceType>::is_full_;\n    using KNNUniqueResultSet<DistanceType>::worst_distance_;\n\n    /** The maximum number of neighbors to consider */\n    unsigned int capacity_;\n\n    /** The maximum distance of a neighbor */\n    DistanceType radius_;\n};\n}\n\n#endif //OPENCV_FLANN_RESULTSET_H\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/sampling.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n\n#ifndef OPENCV_FLANN_SAMPLING_H_\n#define OPENCV_FLANN_SAMPLING_H_\n\n#include \"matrix.h\"\n#include \"random.h\"\n\nnamespace cvflann\n{\n\ntemplate<typename T>\nMatrix<T> random_sample(Matrix<T>& srcMatrix, long size, bool remove = false)\n{\n    Matrix<T> newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols);\n\n    T* src,* dest;\n    for (long i=0; i<size; ++i) {\n        long r = rand_int((int)(srcMatrix.rows-i));\n        dest = newSet[i];\n        src = srcMatrix[r];\n        std::copy(src, src+srcMatrix.cols, dest);\n        if (remove) {\n            src = srcMatrix[srcMatrix.rows-i-1];\n            dest = srcMatrix[r];\n            std::copy(src, src+srcMatrix.cols, dest);\n        }\n    }\n    if (remove) {\n        srcMatrix.rows -= size;\n    }\n    return newSet;\n}\n\ntemplate<typename T>\nMatrix<T> random_sample(const Matrix<T>& srcMatrix, size_t size)\n{\n    UniqueRandom rand((int)srcMatrix.rows);\n    Matrix<T> newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols);\n\n    T* src,* dest;\n    for (size_t i=0; i<size; ++i) {\n        long r = rand.next();\n        dest = newSet[i];\n        src = srcMatrix[r];\n        std::copy(src, src+srcMatrix.cols, dest);\n    }\n    return newSet;\n}\n\n} // namespace\n\n\n#endif /* OPENCV_FLANN_SAMPLING_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/saving.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All 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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE NNIndexGOODS 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#ifndef OPENCV_FLANN_SAVING_H_\n#define OPENCV_FLANN_SAVING_H_\n\n#include <cstring>\n#include <vector>\n\n#include \"general.h\"\n#include \"nn_index.h\"\n\n#ifdef FLANN_SIGNATURE_\n#undef FLANN_SIGNATURE_\n#endif\n#define FLANN_SIGNATURE_ \"FLANN_INDEX\"\n\nnamespace cvflann\n{\n\ntemplate <typename T>\nstruct Datatype {};\ntemplate<>\nstruct Datatype<char> { static flann_datatype_t type() { return FLANN_INT8; } };\ntemplate<>\nstruct Datatype<short> { static flann_datatype_t type() { return FLANN_INT16; } };\ntemplate<>\nstruct Datatype<int> { static flann_datatype_t type() { return FLANN_INT32; } };\ntemplate<>\nstruct Datatype<unsigned char> { static flann_datatype_t type() { return FLANN_UINT8; } };\ntemplate<>\nstruct Datatype<unsigned short> { static flann_datatype_t type() { return FLANN_UINT16; } };\ntemplate<>\nstruct Datatype<unsigned int> { static flann_datatype_t type() { return FLANN_UINT32; } };\ntemplate<>\nstruct Datatype<float> { static flann_datatype_t type() { return FLANN_FLOAT32; } };\ntemplate<>\nstruct Datatype<double> { static flann_datatype_t type() { return FLANN_FLOAT64; } };\n\n\n/**\n * Structure representing the index header.\n */\nstruct IndexHeader\n{\n    char signature[16];\n    char version[16];\n    flann_datatype_t data_type;\n    flann_algorithm_t index_type;\n    size_t rows;\n    size_t cols;\n};\n\n/**\n * Saves index header to stream\n *\n * @param stream - Stream to save to\n * @param index - The index to save\n */\ntemplate<typename Distance>\nvoid save_header(FILE* stream, const NNIndex<Distance>& index)\n{\n    IndexHeader header;\n    memset(header.signature, 0, sizeof(header.signature));\n    strcpy(header.signature, FLANN_SIGNATURE_);\n    memset(header.version, 0, sizeof(header.version));\n    strcpy(header.version, FLANN_VERSION_);\n    header.data_type = Datatype<typename Distance::ElementType>::type();\n    header.index_type = index.getType();\n    header.rows = index.size();\n    header.cols = index.veclen();\n\n    std::fwrite(&header, sizeof(header),1,stream);\n}\n\n\n/**\n *\n * @param stream - Stream to load from\n * @return Index header\n */\ninline IndexHeader load_header(FILE* stream)\n{\n    IndexHeader header;\n    size_t read_size = fread(&header,sizeof(header),1,stream);\n\n    if (read_size!=(size_t)1) {\n        throw FLANNException(\"Invalid index file, cannot read\");\n    }\n\n    if (strcmp(header.signature,FLANN_SIGNATURE_)!=0) {\n        throw FLANNException(\"Invalid index file, wrong signature\");\n    }\n\n    return header;\n\n}\n\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const T& value, size_t count = 1)\n{\n    fwrite(&value, sizeof(value),count, stream);\n}\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const cvflann::Matrix<T>& value)\n{\n    fwrite(&value, sizeof(value),1, stream);\n    fwrite(value.data, sizeof(T),value.rows*value.cols, stream);\n}\n\ntemplate<typename T>\nvoid save_value(FILE* stream, const std::vector<T>& value)\n{\n    size_t size = value.size();\n    fwrite(&size, sizeof(size_t), 1, stream);\n    fwrite(&value[0], sizeof(T), size, stream);\n}\n\ntemplate<typename T>\nvoid load_value(FILE* stream, T& value, size_t count = 1)\n{\n    size_t read_cnt = fread(&value, sizeof(value), count, stream);\n    if (read_cnt != count) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\ntemplate<typename T>\nvoid load_value(FILE* stream, cvflann::Matrix<T>& value)\n{\n    size_t read_cnt = fread(&value, sizeof(value), 1, stream);\n    if (read_cnt != 1) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n    value.data = new T[value.rows*value.cols];\n    read_cnt = fread(value.data, sizeof(T), value.rows*value.cols, stream);\n    if (read_cnt != (size_t)(value.rows*value.cols)) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\n\ntemplate<typename T>\nvoid load_value(FILE* stream, std::vector<T>& value)\n{\n    size_t size;\n    size_t read_cnt = fread(&size, sizeof(size_t), 1, stream);\n    if (read_cnt!=1) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n    value.resize(size);\n    read_cnt = fread(&value[0], sizeof(T), size, stream);\n    if (read_cnt != size) {\n        throw FLANNException(\"Cannot read from file\");\n    }\n}\n\n}\n\n#endif /* OPENCV_FLANN_SAVING_H_ */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/simplex_downhill.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n#define OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n\nnamespace cvflann\n{\n\n/**\n    Adds val to array vals (and point to array points) and keeping the arrays sorted by vals.\n */\ntemplate <typename T>\nvoid addValue(int pos, float val, float* vals, T* point, T* points, int n)\n{\n    vals[pos] = val;\n    for (int i=0; i<n; ++i) {\n        points[pos*n+i] = point[i];\n    }\n\n    // bubble down\n    int j=pos;\n    while (j>0 && vals[j]<vals[j-1]) {\n        swap(vals[j],vals[j-1]);\n        for (int i=0; i<n; ++i) {\n            swap(points[j*n+i],points[(j-1)*n+i]);\n        }\n        --j;\n    }\n}\n\n\n/**\n    Simplex downhill optimization function.\n    Preconditions: points is a 2D mattrix of size (n+1) x n\n                    func is the cost function taking n an array of n params and returning float\n                    vals is the cost function in the n+1 simplex points, if NULL it will be computed\n\n    Postcondition: returns optimum value and points[0..n] are the optimum parameters\n */\ntemplate <typename T, typename F>\nfloat optimizeSimplexDownhill(T* points, int n, F func, float* vals = NULL )\n{\n    const int MAX_ITERATIONS = 10;\n\n    assert(n>0);\n\n    T* p_o = new T[n];\n    T* p_r = new T[n];\n    T* p_e = new T[n];\n\n    int alpha = 1;\n\n    int iterations = 0;\n\n    bool ownVals = false;\n    if (vals == NULL) {\n        ownVals = true;\n        vals = new float[n+1];\n        for (int i=0; i<n+1; ++i) {\n            float val = func(points+i*n);\n            addValue(i, val, vals, points+i*n, points, n);\n        }\n    }\n    int nn = n*n;\n\n    while (true) {\n\n        if (iterations++ > MAX_ITERATIONS) break;\n\n        // compute average of simplex points (except the highest point)\n        for (int j=0; j<n; ++j) {\n            p_o[j] = 0;\n            for (int i=0; i<n; ++i) {\n                p_o[i] += points[j*n+i];\n            }\n        }\n        for (int i=0; i<n; ++i) {\n            p_o[i] /= n;\n        }\n\n        bool converged = true;\n        for (int i=0; i<n; ++i) {\n            if (p_o[i] != points[nn+i]) {\n                converged = false;\n            }\n        }\n        if (converged) break;\n\n        // trying a reflection\n        for (int i=0; i<n; ++i) {\n            p_r[i] = p_o[i] + alpha*(p_o[i]-points[nn+i]);\n        }\n        float val_r = func(p_r);\n\n        if ((val_r>=vals[0])&&(val_r<vals[n])) {\n            // reflection between second highest and lowest\n            // add it to the simplex\n            Logger::info(\"Choosing reflection\\n\");\n            addValue(n, val_r,vals, p_r, points, n);\n            continue;\n        }\n\n        if (val_r<vals[0]) {\n            // value is smaller than smalest in simplex\n\n            // expand some more to see if it drops further\n            for (int i=0; i<n; ++i) {\n                p_e[i] = 2*p_r[i]-p_o[i];\n            }\n            float val_e = func(p_e);\n\n            if (val_e<val_r) {\n                Logger::info(\"Choosing reflection and expansion\\n\");\n                addValue(n, val_e,vals,p_e,points,n);\n            }\n            else {\n                Logger::info(\"Choosing reflection\\n\");\n                addValue(n, val_r,vals,p_r,points,n);\n            }\n            continue;\n        }\n        if (val_r>=vals[n]) {\n            for (int i=0; i<n; ++i) {\n                p_e[i] = (p_o[i]+points[nn+i])/2;\n            }\n            float val_e = func(p_e);\n\n            if (val_e<vals[n]) {\n                Logger::info(\"Choosing contraction\\n\");\n                addValue(n,val_e,vals,p_e,points,n);\n                continue;\n            }\n        }\n        {\n            Logger::info(\"Full contraction\\n\");\n            for (int j=1; j<=n; ++j) {\n                for (int i=0; i<n; ++i) {\n                    points[j*n+i] = (points[j*n+i]+points[i])/2;\n                }\n                float val = func(points+j*n);\n                addValue(j,val,vals,points+j*n,points,n);\n            }\n        }\n    }\n\n    float bestVal = vals[0];\n\n    delete[] p_r;\n    delete[] p_o;\n    delete[] p_e;\n    if (ownVals) delete[] vals;\n\n    return bestVal;\n}\n\n}\n\n#endif //OPENCV_FLANN_SIMPLEX_DOWNHILL_H_\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/flann/timer.h",
    "content": "/***********************************************************************\n * Software License Agreement (BSD License)\n *\n * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.\n * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.\n *\n * THE BSD LICENSE\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 * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *************************************************************************/\n\n#ifndef OPENCV_FLANN_TIMER_H\n#define OPENCV_FLANN_TIMER_H\n\n#include <time.h>\n\n\nnamespace cvflann\n{\n\n/**\n * A start-stop timer class.\n *\n * Can be used to time portions of code.\n */\nclass StartStopTimer\n{\n    clock_t startTime;\n\npublic:\n    /**\n     * Value of the timer.\n     */\n    double value;\n\n\n    /**\n     * Constructor.\n     */\n    StartStopTimer()\n    {\n        reset();\n    }\n\n    /**\n     * Starts the timer.\n     */\n    void start()\n    {\n        startTime = clock();\n    }\n\n    /**\n     * Stops the timer and updates timer value.\n     */\n    void stop()\n    {\n        clock_t stopTime = clock();\n        value += ( (double)stopTime - startTime) / CLOCKS_PER_SEC;\n    }\n\n    /**\n     * Resets the timer value to 0.\n     */\n    void reset()\n    {\n        value = 0;\n    }\n\n};\n\n}\n\n#endif // FLANN_TIMER_H\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/highgui/cap_ios.h",
    "content": "/*  For iOS video I/O\n *  by Eduard Feicho on 29/07/12\n *  Copyright 2012. All 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 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\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n */\n\n#import <UIKit/UIKit.h>\n#import <Accelerate/Accelerate.h>\n#import <AVFoundation/AVFoundation.h>\n#import <ImageIO/ImageIO.h>\n#include \"opencv2/core/core.hpp\"\n\n/////////////////////////////////////// CvAbstractCamera /////////////////////////////////////\n\n@class CvAbstractCamera;\n\n@interface CvAbstractCamera : NSObject\n{\n    AVCaptureSession* captureSession;\n    AVCaptureConnection* videoCaptureConnection;\n    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;\n\n    UIDeviceOrientation currentDeviceOrientation;\n\n    BOOL cameraAvailable;\n    BOOL captureSessionLoaded;\n    BOOL running;\n    BOOL useAVCaptureVideoPreviewLayer;\n\n    AVCaptureDevicePosition defaultAVCaptureDevicePosition;\n    AVCaptureVideoOrientation defaultAVCaptureVideoOrientation;\n    NSString *const defaultAVCaptureSessionPreset;\n\n    int defaultFPS;\n\n    UIView* parentView;\n\n    int imageWidth;\n    int imageHeight;\n}\n\n@property (nonatomic, retain) AVCaptureSession* captureSession;\n@property (nonatomic, retain) AVCaptureConnection* videoCaptureConnection;\n\n@property (nonatomic, readonly) BOOL running;\n@property (nonatomic, readonly) BOOL captureSessionLoaded;\n\n@property (nonatomic, assign) int defaultFPS;\n@property (nonatomic, assign) AVCaptureDevicePosition defaultAVCaptureDevicePosition;\n@property (nonatomic, assign) AVCaptureVideoOrientation defaultAVCaptureVideoOrientation;\n@property (nonatomic, assign) BOOL useAVCaptureVideoPreviewLayer;\n@property (nonatomic, strong) NSString *const defaultAVCaptureSessionPreset;\n\n@property (nonatomic, assign) int imageWidth;\n@property (nonatomic, assign) int imageHeight;\n\n@property (nonatomic, retain) UIView* parentView;\n\n- (void)start;\n- (void)stop;\n- (void)switchCameras;\n\n- (id)initWithParentView:(UIView*)parent;\n\n- (void)createCaptureOutput;\n- (void)createVideoPreviewLayer;\n- (void)updateOrientation;\n\n- (void)lockFocus;\n- (void)unlockFocus;\n- (void)lockExposure;\n- (void)unlockExposure;\n- (void)lockBalance;\n- (void)unlockBalance;\n\n@end\n\n///////////////////////////////// CvVideoCamera ///////////////////////////////////////////\n\n@class CvVideoCamera;\n\n@protocol CvVideoCameraDelegate <NSObject>\n\n#ifdef __cplusplus\n// delegate method for processing image frames\n- (void)processImage:(cv::Mat&)image;\n#endif\n\n@end\n\n@interface CvVideoCamera : CvAbstractCamera<AVCaptureVideoDataOutputSampleBufferDelegate>\n{\n    AVCaptureVideoDataOutput *videoDataOutput;\n\n    dispatch_queue_t videoDataOutputQueue;\n    CALayer *customPreviewLayer;\n\n    BOOL grayscaleMode;\n\n    BOOL recordVideo;\n    BOOL rotateVideo;\n    AVAssetWriterInput* recordAssetWriterInput;\n    AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor;\n    AVAssetWriter* recordAssetWriter;\n\n    CMTime lastSampleTime;\n\n}\n\n@property (nonatomic, assign) id<CvVideoCameraDelegate> delegate;\n@property (nonatomic, assign) BOOL grayscaleMode;\n\n@property (nonatomic, assign) BOOL recordVideo;\n@property (nonatomic, assign) BOOL rotateVideo;\n@property (nonatomic, retain) AVAssetWriterInput* recordAssetWriterInput;\n@property (nonatomic, retain) AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor;\n@property (nonatomic, retain) AVAssetWriter* recordAssetWriter;\n\n- (void)adjustLayoutToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;\n- (void)layoutPreviewLayer;\n- (void)saveVideo;\n- (NSURL *)videoFileURL;\n\n\n@end\n\n///////////////////////////////// CvPhotoCamera ///////////////////////////////////////////\n\n@class CvPhotoCamera;\n\n@protocol CvPhotoCameraDelegate <NSObject>\n\n- (void)photoCamera:(CvPhotoCamera*)photoCamera capturedImage:(UIImage *)image;\n- (void)photoCameraCancel:(CvPhotoCamera*)photoCamera;\n\n@end\n\n@interface CvPhotoCamera : CvAbstractCamera\n{\n    AVCaptureStillImageOutput *stillImageOutput;\n}\n\n@property (nonatomic, assign) id<CvPhotoCameraDelegate> delegate;\n\n- (void)takePicture;\n\n@end\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/highgui/highgui.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HIGHGUI_HPP__\n#define __OPENCV_HIGHGUI_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/highgui/highgui_c.h\"\n\n#ifdef __cplusplus\n\nstruct CvCapture;\nstruct CvVideoWriter;\n\nnamespace cv\n{\n\nenum {\n    // Flags for namedWindow\n    WINDOW_NORMAL   = CV_WINDOW_NORMAL,   // the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size\n    WINDOW_AUTOSIZE = CV_WINDOW_AUTOSIZE, // the user cannot resize the window, the size is constrainted by the image displayed\n    WINDOW_OPENGL   = CV_WINDOW_OPENGL,   // window with opengl support\n\n    // Flags for set / getWindowProperty\n    WND_PROP_FULLSCREEN   = CV_WND_PROP_FULLSCREEN,  // fullscreen property\n    WND_PROP_AUTOSIZE     = CV_WND_PROP_AUTOSIZE,    // autosize property\n    WND_PROP_ASPECT_RATIO = CV_WND_PROP_ASPECTRATIO, // window's aspect ration\n    WND_PROP_OPENGL       = CV_WND_PROP_OPENGL       // opengl support\n};\n\nCV_EXPORTS_W void namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE);\nCV_EXPORTS_W void destroyWindow(const string& winname);\nCV_EXPORTS_W void destroyAllWindows();\n\nCV_EXPORTS_W int startWindowThread();\n\nCV_EXPORTS_W int waitKey(int delay = 0);\n\nCV_EXPORTS_W void imshow(const string& winname, InputArray mat);\n\nCV_EXPORTS_W void resizeWindow(const string& winname, int width, int height);\nCV_EXPORTS_W void moveWindow(const string& winname, int x, int y);\n\nCV_EXPORTS_W void setWindowProperty(const string& winname, int prop_id, double prop_value);//YV\nCV_EXPORTS_W double getWindowProperty(const string& winname, int prop_id);//YV\n\nenum\n{\n    EVENT_MOUSEMOVE      =0,\n    EVENT_LBUTTONDOWN    =1,\n    EVENT_RBUTTONDOWN    =2,\n    EVENT_MBUTTONDOWN    =3,\n    EVENT_LBUTTONUP      =4,\n    EVENT_RBUTTONUP      =5,\n    EVENT_MBUTTONUP      =6,\n    EVENT_LBUTTONDBLCLK  =7,\n    EVENT_RBUTTONDBLCLK  =8,\n    EVENT_MBUTTONDBLCLK  =9\n};\n\nenum\n{\n    EVENT_FLAG_LBUTTON   =1,\n    EVENT_FLAG_RBUTTON   =2,\n    EVENT_FLAG_MBUTTON   =4,\n    EVENT_FLAG_CTRLKEY   =8,\n    EVENT_FLAG_SHIFTKEY  =16,\n    EVENT_FLAG_ALTKEY    =32\n};\n\ntypedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);\n\n//! assigns callback for mouse events\nCV_EXPORTS void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata = 0);\n\n\ntypedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);\n\nCV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname,\n                              int* value, int count,\n                              TrackbarCallback onChange = 0,\n                              void* userdata = 0);\n\nCV_EXPORTS_W int getTrackbarPos(const string& trackbarname, const string& winname);\nCV_EXPORTS_W void setTrackbarPos(const string& trackbarname, const string& winname, int pos);\n\n// OpenGL support\n\ntypedef void (*OpenGlDrawCallback)(void* userdata);\nCV_EXPORTS void setOpenGlDrawCallback(const string& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0);\n\nCV_EXPORTS void setOpenGlContext(const string& winname);\n\nCV_EXPORTS void updateWindow(const string& winname);\n\n// < Deperecated\nCV_EXPORTS void pointCloudShow(const string& winname, const GlCamera& camera, const GlArrays& arr);\nCV_EXPORTS void pointCloudShow(const string& winname, const GlCamera& camera, InputArray points, InputArray colors = noArray());\n// >\n\n//Only for Qt\n\nCV_EXPORTS CvFont fontQt(const string& nameFont, int pointSize=-1,\n                         Scalar color=Scalar::all(0), int weight=CV_FONT_NORMAL,\n                         int style=CV_STYLE_NORMAL, int spacing=0);\nCV_EXPORTS void addText( const Mat& img, const string& text, Point org, CvFont font);\n\nCV_EXPORTS void displayOverlay(const string& winname, const string& text, int delayms CV_DEFAULT(0));\nCV_EXPORTS void displayStatusBar(const string& winname, const string& text, int delayms CV_DEFAULT(0));\n\nCV_EXPORTS void saveWindowParameters(const string& windowName);\nCV_EXPORTS void loadWindowParameters(const string& windowName);\nCV_EXPORTS  int startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);\nCV_EXPORTS  void stopLoop();\n\ntypedef void (CV_CDECL *ButtonCallback)(int state, void* userdata);\nCV_EXPORTS int createButton( const string& bar_name, ButtonCallback on_change,\n                             void* userdata=NULL, int type=CV_PUSH_BUTTON,\n                             bool initial_button_state=0);\n\n//-------------------------\n\nenum\n{\n    // 8bit, color or not\n    IMREAD_UNCHANGED  =-1,\n    // 8bit, gray\n    IMREAD_GRAYSCALE  =0,\n    // ?, color\n    IMREAD_COLOR      =1,\n    // any depth, ?\n    IMREAD_ANYDEPTH   =2,\n    // ?, any color\n    IMREAD_ANYCOLOR   =4\n};\n\nenum\n{\n    IMWRITE_JPEG_QUALITY =1,\n    IMWRITE_PNG_COMPRESSION =16,\n    IMWRITE_PNG_STRATEGY =17,\n    IMWRITE_PNG_BILEVEL =18,\n    IMWRITE_PNG_STRATEGY_DEFAULT =0,\n    IMWRITE_PNG_STRATEGY_FILTERED =1,\n    IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2,\n    IMWRITE_PNG_STRATEGY_RLE =3,\n    IMWRITE_PNG_STRATEGY_FIXED =4,\n    IMWRITE_PXM_BINARY =32\n};\n\nCV_EXPORTS_W Mat imread( const string& filename, int flags=1 );\nCV_EXPORTS_W bool imwrite( const string& filename, InputArray img,\n              const vector<int>& params=vector<int>());\nCV_EXPORTS_W Mat imdecode( InputArray buf, int flags );\nCV_EXPORTS Mat imdecode( InputArray buf, int flags, Mat* dst );\nCV_EXPORTS_W bool imencode( const string& ext, InputArray img,\n                            CV_OUT vector<uchar>& buf,\n                            const vector<int>& params=vector<int>());\n\n#ifndef CV_NO_VIDEO_CAPTURE_CPP_API\n\ntemplate<> void CV_EXPORTS Ptr<CvCapture>::delete_obj();\ntemplate<> void CV_EXPORTS Ptr<CvVideoWriter>::delete_obj();\n\nclass CV_EXPORTS_W VideoCapture\n{\npublic:\n    CV_WRAP VideoCapture();\n    CV_WRAP VideoCapture(const string& filename);\n    CV_WRAP VideoCapture(int device);\n\n    virtual ~VideoCapture();\n    CV_WRAP virtual bool open(const string& filename);\n    CV_WRAP virtual bool open(int device);\n    CV_WRAP virtual bool isOpened() const;\n    CV_WRAP virtual void release();\n\n    CV_WRAP virtual bool grab();\n    CV_WRAP virtual bool retrieve(CV_OUT Mat& image, int channel=0);\n    virtual VideoCapture& operator >> (CV_OUT Mat& image);\n    CV_WRAP virtual bool read(CV_OUT Mat& image);\n\n    CV_WRAP virtual bool set(int propId, double value);\n    CV_WRAP virtual double get(int propId);\n\nprotected:\n    Ptr<CvCapture> cap;\n};\n\n\nclass CV_EXPORTS_W VideoWriter\n{\npublic:\n    CV_WRAP VideoWriter();\n    CV_WRAP VideoWriter(const string& filename, int fourcc, double fps,\n                Size frameSize, bool isColor=true);\n\n    virtual ~VideoWriter();\n    CV_WRAP virtual bool open(const string& filename, int fourcc, double fps,\n                      Size frameSize, bool isColor=true);\n    CV_WRAP virtual bool isOpened() const;\n    CV_WRAP virtual void release();\n    virtual VideoWriter& operator << (const Mat& image);\n    CV_WRAP virtual void write(const Mat& image);\n\nprotected:\n    Ptr<CvVideoWriter> writer;\n};\n\n#endif\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/highgui/highgui_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_HIGHGUI_H__\n#define __OPENCV_HIGHGUI_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/****************************************************************************************\\\n*                                  Basic GUI functions                                   *\n\\****************************************************************************************/\n//YV\n//-----------New for Qt\n/* For font */\nenum {  CV_FONT_LIGHT           = 25,//QFont::Light,\n        CV_FONT_NORMAL          = 50,//QFont::Normal,\n        CV_FONT_DEMIBOLD        = 63,//QFont::DemiBold,\n        CV_FONT_BOLD            = 75,//QFont::Bold,\n        CV_FONT_BLACK           = 87 //QFont::Black\n};\n\nenum {  CV_STYLE_NORMAL         = 0,//QFont::StyleNormal,\n        CV_STYLE_ITALIC         = 1,//QFont::StyleItalic,\n        CV_STYLE_OBLIQUE        = 2 //QFont::StyleOblique\n};\n/* ---------*/\n\n//for color cvScalar(blue_component, green_component, red\\_component[, alpha_component])\n//and alpha= 0 <-> 0xFF (not transparent <-> transparent)\nCVAPI(CvFont) cvFontQt(const char* nameFont, int pointSize CV_DEFAULT(-1), CvScalar color CV_DEFAULT(cvScalarAll(0)), int weight CV_DEFAULT(CV_FONT_NORMAL),  int style CV_DEFAULT(CV_STYLE_NORMAL), int spacing CV_DEFAULT(0));\n\nCVAPI(void) cvAddText(const CvArr* img, const char* text, CvPoint org, CvFont *arg2);\n\nCVAPI(void) cvDisplayOverlay(const char* name, const char* text, int delayms CV_DEFAULT(0));\nCVAPI(void) cvDisplayStatusBar(const char* name, const char* text, int delayms CV_DEFAULT(0));\n\nCVAPI(void) cvSaveWindowParameters(const char* name);\nCVAPI(void) cvLoadWindowParameters(const char* name);\nCVAPI(int) cvStartLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);\nCVAPI(void) cvStopLoop( void );\n\ntypedef void (CV_CDECL *CvButtonCallback)(int state, void* userdata);\nenum {CV_PUSH_BUTTON = 0, CV_CHECKBOX = 1, CV_RADIOBOX = 2};\nCVAPI(int) cvCreateButton( const char* button_name CV_DEFAULT(NULL),CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL) , int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0));\n//----------------------\n\n\n/* this function is used to set some external parameters in case of X Window */\nCVAPI(int) cvInitSystem( int argc, char** argv );\n\nCVAPI(int) cvStartWindowThread( void );\n\n// ---------  YV ---------\nenum\n{\n    //These 3 flags are used by cvSet/GetWindowProperty\n    CV_WND_PROP_FULLSCREEN = 0, //to change/get window's fullscreen property\n    CV_WND_PROP_AUTOSIZE   = 1, //to change/get window's autosize property\n    CV_WND_PROP_ASPECTRATIO= 2, //to change/get window's aspectratio property\n    CV_WND_PROP_OPENGL     = 3, //to change/get window's opengl support\n\n    //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty\n    CV_WINDOW_NORMAL       = 0x00000000, //the user can resize the window (no constraint)  / also use to switch a fullscreen window to a normal size\n    CV_WINDOW_AUTOSIZE     = 0x00000001, //the user cannot resize the window, the size is constrainted by the image displayed\n    CV_WINDOW_OPENGL       = 0x00001000, //window with opengl support\n\n    //Those flags are only for Qt\n    CV_GUI_EXPANDED         = 0x00000000, //status bar and tool bar\n    CV_GUI_NORMAL           = 0x00000010, //old fashious way\n\n    //These 3 flags are used by cvNamedWindow and cvSet/GetWindowProperty\n    CV_WINDOW_FULLSCREEN   = 1,//change the window to fullscreen\n    CV_WINDOW_FREERATIO    = 0x00000100,//the image expends as much as it can (no ratio constraint)\n    CV_WINDOW_KEEPRATIO    = 0x00000000//the ration image is respected.\n};\n\n/* create window */\nCVAPI(int) cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );\n\n/* Set and Get Property of the window */\nCVAPI(void) cvSetWindowProperty(const char* name, int prop_id, double prop_value);\nCVAPI(double) cvGetWindowProperty(const char* name, int prop_id);\n\n/* display image within window (highgui windows remember their content) */\nCVAPI(void) cvShowImage( const char* name, const CvArr* image );\n\n/* resize/move window */\nCVAPI(void) cvResizeWindow( const char* name, int width, int height );\nCVAPI(void) cvMoveWindow( const char* name, int x, int y );\n\n\n/* destroy window and all the trackers associated with it */\nCVAPI(void) cvDestroyWindow( const char* name );\n\nCVAPI(void) cvDestroyAllWindows(void);\n\n/* get native window handle (HWND in case of Win32 and Widget in case of X Window) */\nCVAPI(void*) cvGetWindowHandle( const char* name );\n\n/* get name of highgui window given its native handle */\nCVAPI(const char*) cvGetWindowName( void* window_handle );\n\n\ntypedef void (CV_CDECL *CvTrackbarCallback)(int pos);\n\n/* create trackbar and display it on top of given window, set callback */\nCVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name,\n                             int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL));\n\ntypedef void (CV_CDECL *CvTrackbarCallback2)(int pos, void* userdata);\n\nCVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name,\n                              int* value, int count, CvTrackbarCallback2 on_change,\n                              void* userdata CV_DEFAULT(0));\n\n/* retrieve or set trackbar position */\nCVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name );\nCVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );\n\nenum\n{\n    CV_EVENT_MOUSEMOVE      =0,\n    CV_EVENT_LBUTTONDOWN    =1,\n    CV_EVENT_RBUTTONDOWN    =2,\n    CV_EVENT_MBUTTONDOWN    =3,\n    CV_EVENT_LBUTTONUP      =4,\n    CV_EVENT_RBUTTONUP      =5,\n    CV_EVENT_MBUTTONUP      =6,\n    CV_EVENT_LBUTTONDBLCLK  =7,\n    CV_EVENT_RBUTTONDBLCLK  =8,\n    CV_EVENT_MBUTTONDBLCLK  =9\n};\n\nenum\n{\n    CV_EVENT_FLAG_LBUTTON   =1,\n    CV_EVENT_FLAG_RBUTTON   =2,\n    CV_EVENT_FLAG_MBUTTON   =4,\n    CV_EVENT_FLAG_CTRLKEY   =8,\n    CV_EVENT_FLAG_SHIFTKEY  =16,\n    CV_EVENT_FLAG_ALTKEY    =32\n};\n\ntypedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param);\n\n/* assign callback for mouse events */\nCVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,\n                                void* param CV_DEFAULT(NULL));\n\nenum\n{\n/* 8bit, color or not */\n    CV_LOAD_IMAGE_UNCHANGED  =-1,\n/* 8bit, gray */\n    CV_LOAD_IMAGE_GRAYSCALE  =0,\n/* ?, color */\n    CV_LOAD_IMAGE_COLOR      =1,\n/* any depth, ? */\n    CV_LOAD_IMAGE_ANYDEPTH   =2,\n/* ?, any color */\n    CV_LOAD_IMAGE_ANYCOLOR   =4\n};\n\n/* load image from file\n  iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED\n  overrides the other flags\n  using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED\n  unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit\n*/\nCVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\nCVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\n\nenum\n{\n    CV_IMWRITE_JPEG_QUALITY =1,\n    CV_IMWRITE_PNG_COMPRESSION =16,\n    CV_IMWRITE_PNG_STRATEGY =17,\n    CV_IMWRITE_PNG_BILEVEL =18,\n    CV_IMWRITE_PNG_STRATEGY_DEFAULT =0,\n    CV_IMWRITE_PNG_STRATEGY_FILTERED =1,\n    CV_IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2,\n    CV_IMWRITE_PNG_STRATEGY_RLE =3,\n    CV_IMWRITE_PNG_STRATEGY_FIXED =4,\n    CV_IMWRITE_PXM_BINARY =32\n};\n\n/* save image to file */\nCVAPI(int) cvSaveImage( const char* filename, const CvArr* image,\n                        const int* params CV_DEFAULT(0) );\n\n/* decode image stored in the buffer */\nCVAPI(IplImage*) cvDecodeImage( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\nCVAPI(CvMat*) cvDecodeImageM( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));\n\n/* encode image and store the result as a byte vector (single-row 8uC1 matrix) */\nCVAPI(CvMat*) cvEncodeImage( const char* ext, const CvArr* image,\n                             const int* params CV_DEFAULT(0) );\n\nenum\n{\n    CV_CVTIMG_FLIP      =1,\n    CV_CVTIMG_SWAP_RB   =2\n};\n\n/* utility function: convert one image to another with optional vertical flip */\nCVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0));\n\n/* wait for key event infinitely (delay<=0) or for \"delay\" milliseconds */\nCVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));\n\n// OpenGL support\n\ntypedef void (CV_CDECL *CvOpenGlDrawCallback)(void* userdata);\nCVAPI(void) cvSetOpenGlDrawCallback(const char* window_name, CvOpenGlDrawCallback callback, void* userdata CV_DEFAULT(NULL));\n\nCVAPI(void) cvSetOpenGlContext(const char* window_name);\nCVAPI(void) cvUpdateWindow(const char* window_name);\n\n\n/****************************************************************************************\\\n*                         Working with Video Files and Cameras                           *\n\\****************************************************************************************/\n\n/* \"black box\" capture structure */\ntypedef struct CvCapture CvCapture;\n\n/* start capturing frames from video file */\nCVAPI(CvCapture*) cvCreateFileCapture( const char* filename );\n\nenum\n{\n    CV_CAP_ANY      =0,     // autodetect\n\n    CV_CAP_MIL      =100,   // MIL proprietary drivers\n\n    CV_CAP_VFW      =200,   // platform native\n    CV_CAP_V4L      =200,\n    CV_CAP_V4L2     =200,\n\n    CV_CAP_FIREWARE =300,   // IEEE 1394 drivers\n    CV_CAP_FIREWIRE =300,\n    CV_CAP_IEEE1394 =300,\n    CV_CAP_DC1394   =300,\n    CV_CAP_CMU1394  =300,\n\n    CV_CAP_STEREO   =400,   // TYZX proprietary drivers\n    CV_CAP_TYZX     =400,\n    CV_TYZX_LEFT    =400,\n    CV_TYZX_RIGHT   =401,\n    CV_TYZX_COLOR   =402,\n    CV_TYZX_Z       =403,\n\n    CV_CAP_QT       =500,   // QuickTime\n\n    CV_CAP_UNICAP   =600,   // Unicap drivers\n\n    CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)\n    CV_CAP_MSMF     =1400,  // Microsoft Media Foundation (via videoInput)\n\n    CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK\n\n    CV_CAP_OPENNI   =900,   // OpenNI (for Kinect)\n    CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)\n\n    CV_CAP_ANDROID  =1000,  // Android\n    CV_CAP_ANDROID_BACK =CV_CAP_ANDROID+99, // Android back camera\n    CV_CAP_ANDROID_FRONT =CV_CAP_ANDROID+98, // Android front camera\n\n    CV_CAP_XIAPI    =1100,   // XIMEA Camera API\n\n    CV_CAP_AVFOUNDATION = 1200,  // AVFoundation framework for iOS (OS X Lion will have the same API)\n\n    CV_CAP_GIGANETIX = 1300,  // Smartek Giganetix GigEVisionSDK\n\n    CV_CAP_INTELPERC = 1500 // Intel Perceptual Computing SDK\n};\n\n/* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */\nCVAPI(CvCapture*) cvCreateCameraCapture( int index );\n\n/* grab a frame, return 1 on success, 0 on fail.\n  this function is thought to be fast               */\nCVAPI(int) cvGrabFrame( CvCapture* capture );\n\n/* get the frame grabbed with cvGrabFrame(..)\n  This function may apply some frame processing like\n  frame decompression, flipping etc.\n  !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */\nCVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture, int streamIdx CV_DEFAULT(0) );\n\n/* Just a combination of cvGrabFrame and cvRetrieveFrame\n   !!!DO NOT RELEASE or MODIFY the retrieved frame!!!      */\nCVAPI(IplImage*) cvQueryFrame( CvCapture* capture );\n\n/* stop capturing/reading and free resources */\nCVAPI(void) cvReleaseCapture( CvCapture** capture );\n\nenum\n{\n    // modes of the controlling registers (can be: auto, manual, auto single push, absolute Latter allowed with any other mode)\n    // every feature can have only one mode turned on at a time\n    CV_CAP_PROP_DC1394_OFF         = -4,  //turn the feature off (not controlled manually nor automatically)\n    CV_CAP_PROP_DC1394_MODE_MANUAL = -3, //set automatically when a value of the feature is set by the user\n    CV_CAP_PROP_DC1394_MODE_AUTO = -2,\n    CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1,\n    CV_CAP_PROP_POS_MSEC       =0,\n    CV_CAP_PROP_POS_FRAMES     =1,\n    CV_CAP_PROP_POS_AVI_RATIO  =2,\n    CV_CAP_PROP_FRAME_WIDTH    =3,\n    CV_CAP_PROP_FRAME_HEIGHT   =4,\n    CV_CAP_PROP_FPS            =5,\n    CV_CAP_PROP_FOURCC         =6,\n    CV_CAP_PROP_FRAME_COUNT    =7,\n    CV_CAP_PROP_FORMAT         =8,\n    CV_CAP_PROP_MODE           =9,\n    CV_CAP_PROP_BRIGHTNESS    =10,\n    CV_CAP_PROP_CONTRAST      =11,\n    CV_CAP_PROP_SATURATION    =12,\n    CV_CAP_PROP_HUE           =13,\n    CV_CAP_PROP_GAIN          =14,\n    CV_CAP_PROP_EXPOSURE      =15,\n    CV_CAP_PROP_CONVERT_RGB   =16,\n    CV_CAP_PROP_WHITE_BALANCE_BLUE_U =17,\n    CV_CAP_PROP_RECTIFICATION =18,\n    CV_CAP_PROP_MONOCROME     =19,\n    CV_CAP_PROP_SHARPNESS     =20,\n    CV_CAP_PROP_AUTO_EXPOSURE =21, // exposure control done by camera,\n                                   // user can adjust refernce level\n                                   // using this feature\n    CV_CAP_PROP_GAMMA         =22,\n    CV_CAP_PROP_TEMPERATURE   =23,\n    CV_CAP_PROP_TRIGGER       =24,\n    CV_CAP_PROP_TRIGGER_DELAY =25,\n    CV_CAP_PROP_WHITE_BALANCE_RED_V =26,\n    CV_CAP_PROP_ZOOM          =27,\n    CV_CAP_PROP_FOCUS         =28,\n    CV_CAP_PROP_GUID          =29,\n    CV_CAP_PROP_ISO_SPEED     =30,\n    CV_CAP_PROP_MAX_DC1394    =31,\n    CV_CAP_PROP_BACKLIGHT     =32,\n    CV_CAP_PROP_PAN           =33,\n    CV_CAP_PROP_TILT          =34,\n    CV_CAP_PROP_ROLL          =35,\n    CV_CAP_PROP_IRIS          =36,\n    CV_CAP_PROP_SETTINGS      =37,\n\n    CV_CAP_PROP_AUTOGRAB      =1024, // property for highgui class CvCapture_Android only\n    CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING=1025, // readonly, tricky property, returns cpnst char* indeed\n    CV_CAP_PROP_PREVIEW_FORMAT=1026, // readonly, tricky property, returns cpnst char* indeed\n\n    // OpenNI map generators\n    CV_CAP_OPENNI_DEPTH_GENERATOR = 1 << 31,\n    CV_CAP_OPENNI_IMAGE_GENERATOR = 1 << 30,\n    CV_CAP_OPENNI_GENERATORS_MASK = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_OPENNI_IMAGE_GENERATOR,\n\n    // Properties of cameras available through OpenNI interfaces\n    CV_CAP_PROP_OPENNI_OUTPUT_MODE     = 100,\n    CV_CAP_PROP_OPENNI_FRAME_MAX_DEPTH = 101, // in mm\n    CV_CAP_PROP_OPENNI_BASELINE        = 102, // in mm\n    CV_CAP_PROP_OPENNI_FOCAL_LENGTH    = 103, // in pixels\n    CV_CAP_PROP_OPENNI_REGISTRATION    = 104, // flag\n    CV_CAP_PROP_OPENNI_REGISTRATION_ON = CV_CAP_PROP_OPENNI_REGISTRATION, // flag that synchronizes the remapping depth map to image map\n                                                                          // by changing depth generator's view point (if the flag is \"on\") or\n                                                                          // sets this view point to its normal one (if the flag is \"off\").\n    CV_CAP_PROP_OPENNI_APPROX_FRAME_SYNC = 105,\n    CV_CAP_PROP_OPENNI_MAX_BUFFER_SIZE   = 106,\n    CV_CAP_PROP_OPENNI_CIRCLE_BUFFER     = 107,\n    CV_CAP_PROP_OPENNI_MAX_TIME_DURATION = 108,\n\n    CV_CAP_PROP_OPENNI_GENERATOR_PRESENT = 109,\n\n    CV_CAP_OPENNI_IMAGE_GENERATOR_PRESENT         = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_GENERATOR_PRESENT,\n    CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE     = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_OUTPUT_MODE,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_BASELINE        = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_BASELINE,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH    = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_FOCAL_LENGTH,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION    = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION,\n    CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION,\n\n    // Properties of cameras available through GStreamer interface\n    CV_CAP_GSTREAMER_QUEUE_LENGTH   = 200, // default is 1\n    CV_CAP_PROP_PVAPI_MULTICASTIP   = 300, // ip for anable multicast master mode. 0 for disable multicast\n\n    // Properties of cameras available through XIMEA SDK interface\n    CV_CAP_PROP_XI_DOWNSAMPLING  = 400,      // Change image resolution by binning or skipping.\n    CV_CAP_PROP_XI_DATA_FORMAT   = 401,       // Output data format.\n    CV_CAP_PROP_XI_OFFSET_X      = 402,      // Horizontal offset from the origin to the area of interest (in pixels).\n    CV_CAP_PROP_XI_OFFSET_Y      = 403,      // Vertical offset from the origin to the area of interest (in pixels).\n    CV_CAP_PROP_XI_TRG_SOURCE    = 404,      // Defines source of trigger.\n    CV_CAP_PROP_XI_TRG_SOFTWARE  = 405,      // Generates an internal trigger. PRM_TRG_SOURCE must be set to TRG_SOFTWARE.\n    CV_CAP_PROP_XI_GPI_SELECTOR  = 406,      // Selects general purpose input\n    CV_CAP_PROP_XI_GPI_MODE      = 407,      // Set general purpose input mode\n    CV_CAP_PROP_XI_GPI_LEVEL     = 408,      // Get general purpose level\n    CV_CAP_PROP_XI_GPO_SELECTOR  = 409,      // Selects general purpose output\n    CV_CAP_PROP_XI_GPO_MODE      = 410,      // Set general purpose output mode\n    CV_CAP_PROP_XI_LED_SELECTOR  = 411,      // Selects camera signalling LED\n    CV_CAP_PROP_XI_LED_MODE      = 412,      // Define camera signalling LED functionality\n    CV_CAP_PROP_XI_MANUAL_WB     = 413,      // Calculates White Balance(must be called during acquisition)\n    CV_CAP_PROP_XI_AUTO_WB       = 414,      // Automatic white balance\n    CV_CAP_PROP_XI_AEAG          = 415,      // Automatic exposure/gain\n    CV_CAP_PROP_XI_EXP_PRIORITY  = 416,      // Exposure priority (0.5 - exposure 50%, gain 50%).\n    CV_CAP_PROP_XI_AE_MAX_LIMIT  = 417,      // Maximum limit of exposure in AEAG procedure\n    CV_CAP_PROP_XI_AG_MAX_LIMIT  = 418,      // Maximum limit of gain in AEAG procedure\n    CV_CAP_PROP_XI_AEAG_LEVEL    = 419,       // Average intensity of output signal AEAG should achieve(in %)\n    CV_CAP_PROP_XI_TIMEOUT       = 420,       // Image capture timeout in milliseconds\n\n    // Properties for Android cameras\n    CV_CAP_PROP_ANDROID_FLASH_MODE = 8001,\n    CV_CAP_PROP_ANDROID_FOCUS_MODE = 8002,\n    CV_CAP_PROP_ANDROID_WHITE_BALANCE = 8003,\n    CV_CAP_PROP_ANDROID_ANTIBANDING = 8004,\n    CV_CAP_PROP_ANDROID_FOCAL_LENGTH = 8005,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_NEAR = 8006,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_OPTIMAL = 8007,\n    CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_FAR = 8008,\n    CV_CAP_PROP_ANDROID_EXPOSE_LOCK = 8009,\n    CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK = 8010,\n\n    // Properties of cameras available through AVFOUNDATION interface\n    CV_CAP_PROP_IOS_DEVICE_FOCUS = 9001,\n    CV_CAP_PROP_IOS_DEVICE_EXPOSURE = 9002,\n    CV_CAP_PROP_IOS_DEVICE_FLASH = 9003,\n    CV_CAP_PROP_IOS_DEVICE_WHITEBALANCE = 9004,\n    CV_CAP_PROP_IOS_DEVICE_TORCH = 9005,\n\n    // Properties of cameras available through Smartek Giganetix Ethernet Vision interface\n    /* --- Vladimir Litvinenko (litvinenko.vladimir@gmail.com) --- */\n    CV_CAP_PROP_GIGA_FRAME_OFFSET_X = 10001,\n    CV_CAP_PROP_GIGA_FRAME_OFFSET_Y = 10002,\n    CV_CAP_PROP_GIGA_FRAME_WIDTH_MAX = 10003,\n    CV_CAP_PROP_GIGA_FRAME_HEIGH_MAX = 10004,\n    CV_CAP_PROP_GIGA_FRAME_SENS_WIDTH = 10005,\n    CV_CAP_PROP_GIGA_FRAME_SENS_HEIGH = 10006,\n\n    CV_CAP_PROP_INTELPERC_PROFILE_COUNT               = 11001,\n    CV_CAP_PROP_INTELPERC_PROFILE_IDX                 = 11002,\n    CV_CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE  = 11003,\n    CV_CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE      = 11004,\n    CV_CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD  = 11005,\n    CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_HORZ     = 11006,\n    CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_VERT     = 11007,\n\n    // Intel PerC streams\n    CV_CAP_INTELPERC_DEPTH_GENERATOR = 1 << 29,\n    CV_CAP_INTELPERC_IMAGE_GENERATOR = 1 << 28,\n    CV_CAP_INTELPERC_GENERATORS_MASK = CV_CAP_INTELPERC_DEPTH_GENERATOR + CV_CAP_INTELPERC_IMAGE_GENERATOR\n};\n\nenum\n{\n    // Data given from depth generator.\n    CV_CAP_OPENNI_DEPTH_MAP                 = 0, // Depth values in mm (CV_16UC1)\n    CV_CAP_OPENNI_POINT_CLOUD_MAP           = 1, // XYZ in meters (CV_32FC3)\n    CV_CAP_OPENNI_DISPARITY_MAP             = 2, // Disparity in pixels (CV_8UC1)\n    CV_CAP_OPENNI_DISPARITY_MAP_32F         = 3, // Disparity in pixels (CV_32FC1)\n    CV_CAP_OPENNI_VALID_DEPTH_MASK          = 4, // CV_8UC1\n\n    // Data given from RGB image generator.\n    CV_CAP_OPENNI_BGR_IMAGE                 = 5,\n    CV_CAP_OPENNI_GRAY_IMAGE                = 6\n};\n\n// Supported output modes of OpenNI image generator\nenum\n{\n    CV_CAP_OPENNI_VGA_30HZ     = 0,\n    CV_CAP_OPENNI_SXGA_15HZ    = 1,\n    CV_CAP_OPENNI_SXGA_30HZ    = 2,\n    CV_CAP_OPENNI_QVGA_30HZ    = 3,\n    CV_CAP_OPENNI_QVGA_60HZ    = 4\n};\n\n//supported by Android camera output formats\nenum\n{\n    CV_CAP_ANDROID_COLOR_FRAME_BGR = 0, //BGR\n    CV_CAP_ANDROID_COLOR_FRAME = CV_CAP_ANDROID_COLOR_FRAME_BGR,\n    CV_CAP_ANDROID_GREY_FRAME  = 1,  //Y\n    CV_CAP_ANDROID_COLOR_FRAME_RGB = 2,\n    CV_CAP_ANDROID_COLOR_FRAME_BGRA = 3,\n    CV_CAP_ANDROID_COLOR_FRAME_RGBA = 4\n};\n\n// supported Android camera flash modes\nenum\n{\n    CV_CAP_ANDROID_FLASH_MODE_AUTO = 0,\n    CV_CAP_ANDROID_FLASH_MODE_OFF,\n    CV_CAP_ANDROID_FLASH_MODE_ON,\n    CV_CAP_ANDROID_FLASH_MODE_RED_EYE,\n    CV_CAP_ANDROID_FLASH_MODE_TORCH\n};\n\n// supported Android camera focus modes\nenum\n{\n    CV_CAP_ANDROID_FOCUS_MODE_AUTO = 0,\n    CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_PICTURE,\n    CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_VIDEO,\n    CV_CAP_ANDROID_FOCUS_MODE_EDOF,\n    CV_CAP_ANDROID_FOCUS_MODE_FIXED,\n    CV_CAP_ANDROID_FOCUS_MODE_INFINITY,\n    CV_CAP_ANDROID_FOCUS_MODE_MACRO\n};\n\n// supported Android camera white balance modes\nenum\n{\n    CV_CAP_ANDROID_WHITE_BALANCE_AUTO = 0,\n    CV_CAP_ANDROID_WHITE_BALANCE_CLOUDY_DAYLIGHT,\n    CV_CAP_ANDROID_WHITE_BALANCE_DAYLIGHT,\n    CV_CAP_ANDROID_WHITE_BALANCE_FLUORESCENT,\n    CV_CAP_ANDROID_WHITE_BALANCE_INCANDESCENT,\n    CV_CAP_ANDROID_WHITE_BALANCE_SHADE,\n    CV_CAP_ANDROID_WHITE_BALANCE_TWILIGHT,\n    CV_CAP_ANDROID_WHITE_BALANCE_WARM_FLUORESCENT\n};\n\n// supported Android camera antibanding modes\nenum\n{\n    CV_CAP_ANDROID_ANTIBANDING_50HZ = 0,\n    CV_CAP_ANDROID_ANTIBANDING_60HZ,\n    CV_CAP_ANDROID_ANTIBANDING_AUTO,\n    CV_CAP_ANDROID_ANTIBANDING_OFF\n};\n\nenum\n{\n    CV_CAP_INTELPERC_DEPTH_MAP              = 0, // Each pixel is a 16-bit integer. The value indicates the distance from an object to the camera's XY plane or the Cartesian depth.\n    CV_CAP_INTELPERC_UVDEPTH_MAP            = 1, // Each pixel contains two 32-bit floating point values in the range of 0-1, representing the mapping of depth coordinates to the color coordinates.\n    CV_CAP_INTELPERC_IR_MAP                 = 2, // Each pixel is a 16-bit integer. The value indicates the intensity of the reflected laser beam.\n    CV_CAP_INTELPERC_IMAGE                  = 3\n};\n\n/* retrieve or set capture properties */\nCVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id );\nCVAPI(int)    cvSetCaptureProperty( CvCapture* capture, int property_id, double value );\n\n// Return the type of the capturer (eg, CV_CAP_V4W, CV_CAP_UNICAP), which is unknown if created with CV_CAP_ANY\nCVAPI(int)    cvGetCaptureDomain( CvCapture* capture);\n\n/* \"black box\" video file writer structure */\ntypedef struct CvVideoWriter CvVideoWriter;\n\n#define CV_FOURCC_MACRO(c1, c2, c3, c4) (((c1) & 255) + (((c2) & 255) << 8) + (((c3) & 255) << 16) + (((c4) & 255) << 24))\n\nCV_INLINE int CV_FOURCC(char c1, char c2, char c3, char c4)\n{\n    return CV_FOURCC_MACRO(c1, c2, c3, c4);\n}\n\n#define CV_FOURCC_PROMPT -1  /* Open Codec Selection Dialog (Windows only) */\n#define CV_FOURCC_DEFAULT CV_FOURCC('I', 'Y', 'U', 'V') /* Use default codec for specified filename (Linux only) */\n\n/* initialize video file writer */\nCVAPI(CvVideoWriter*) cvCreateVideoWriter( const char* filename, int fourcc,\n                                           double fps, CvSize frame_size,\n                                           int is_color CV_DEFAULT(1));\n\n//CVAPI(CvVideoWriter*) cvCreateImageSequenceWriter( const char* filename,\n//                                                   int is_color CV_DEFAULT(1));\n\n/* write frame to video file */\nCVAPI(int) cvWriteFrame( CvVideoWriter* writer, const IplImage* image );\n\n/* close video file writer */\nCVAPI(void) cvReleaseVideoWriter( CvVideoWriter** writer );\n\n/****************************************************************************************\\\n*                              Obsolete functions/synonyms                               *\n\\****************************************************************************************/\n\n#define cvCaptureFromFile cvCreateFileCapture\n#define cvCaptureFromCAM cvCreateCameraCapture\n#define cvCaptureFromAVI cvCaptureFromFile\n#define cvCreateAVIWriter cvCreateVideoWriter\n#define cvWriteToAVI cvWriteFrame\n#define cvAddSearchPath(path)\n#define cvvInitSystem cvInitSystem\n#define cvvNamedWindow cvNamedWindow\n#define cvvShowImage cvShowImage\n#define cvvResizeWindow cvResizeWindow\n#define cvvDestroyWindow cvDestroyWindow\n#define cvvCreateTrackbar cvCreateTrackbar\n#define cvvLoadImage(name) cvLoadImage((name),1)\n#define cvvSaveImage cvSaveImage\n#define cvvAddSearchPath cvAddSearchPath\n#define cvvWaitKey(name) cvWaitKey(0)\n#define cvvWaitKeyEx(name,delay) cvWaitKey(delay)\n#define cvvConvertImage cvConvertImage\n#define HG_AUTOSIZE CV_WINDOW_AUTOSIZE\n#define set_preprocess_func cvSetPreprocessFuncWin32\n#define set_postprocess_func cvSetPostprocessFuncWin32\n\n#if defined WIN32 || defined _WIN32\n\nCVAPI(void) cvSetPreprocessFuncWin32_(const void* callback);\nCVAPI(void) cvSetPostprocessFuncWin32_(const void* callback);\n#define cvSetPreprocessFuncWin32(callback) cvSetPreprocessFuncWin32_((const void*)(callback))\n#define cvSetPostprocessFuncWin32(callback) cvSetPostprocessFuncWin32_((const void*)(callback))\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/highgui/ios.h",
    "content": "\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#include \"opencv2/core/core.hpp\"\n#import \"opencv2/highgui/cap_ios.h\"\n\nUIImage* MatToUIImage(const cv::Mat& image);\nvoid UIImageToMat(const UIImage* image,\n                         cv::Mat& m, bool alphaExist = false);\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/imgproc/imgproc.hpp",
    "content": "/*! \\file imgproc.hpp\n \\brief The Image Processing\n */\n\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_HPP__\n#define __OPENCV_IMGPROC_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/types_c.h\"\n\n#ifdef __cplusplus\n\n/*! \\namespace cv\n Namespace where all the C++ OpenCV functionality resides\n */\nnamespace cv\n{\n\n//! various border interpolation methods\nenum { BORDER_REPLICATE=IPL_BORDER_REPLICATE, BORDER_CONSTANT=IPL_BORDER_CONSTANT,\n       BORDER_REFLECT=IPL_BORDER_REFLECT, BORDER_WRAP=IPL_BORDER_WRAP,\n       BORDER_REFLECT_101=IPL_BORDER_REFLECT_101, BORDER_REFLECT101=BORDER_REFLECT_101,\n       BORDER_TRANSPARENT=IPL_BORDER_TRANSPARENT,\n       BORDER_DEFAULT=BORDER_REFLECT_101, BORDER_ISOLATED=16 };\n\n//! 1D interpolation function: returns coordinate of the \"donor\" pixel for the specified location p.\nCV_EXPORTS_W int borderInterpolate( int p, int len, int borderType );\n\n/*!\n The Base Class for 1D or Row-wise Filters\n\n This is the base class for linear or non-linear filters that process 1D data.\n In particular, such filters are used for the \"horizontal\" filtering parts in separable filters.\n\n Several functions in OpenCV return Ptr<BaseRowFilter> for the specific types of filters,\n and those pointers can be used directly or within cv::FilterEngine.\n*/\nclass CV_EXPORTS BaseRowFilter\n{\npublic:\n    //! the default constructor\n    BaseRowFilter();\n    //! the destructor\n    virtual ~BaseRowFilter();\n    //! the filtering operator. Must be overrided in the derived classes. The horizontal border interpolation is done outside of the class.\n    virtual void operator()(const uchar* src, uchar* dst,\n                            int width, int cn) = 0;\n    int ksize, anchor;\n};\n\n\n/*!\n The Base Class for Column-wise Filters\n\n This is the base class for linear or non-linear filters that process columns of 2D arrays.\n Such filters are used for the \"vertical\" filtering parts in separable filters.\n\n Several functions in OpenCV return Ptr<BaseColumnFilter> for the specific types of filters,\n and those pointers can be used directly or within cv::FilterEngine.\n\n Unlike cv::BaseRowFilter, cv::BaseColumnFilter may have some context information,\n i.e. box filter keeps the sliding sum of elements. To reset the state BaseColumnFilter::reset()\n must be called (e.g. the method is called by cv::FilterEngine)\n */\nclass CV_EXPORTS BaseColumnFilter\n{\npublic:\n    //! the default constructor\n    BaseColumnFilter();\n    //! the destructor\n    virtual ~BaseColumnFilter();\n    //! the filtering operator. Must be overrided in the derived classes. The vertical border interpolation is done outside of the class.\n    virtual void operator()(const uchar** src, uchar* dst, int dststep,\n                            int dstcount, int width) = 0;\n    //! resets the internal buffers, if any\n    virtual void reset();\n    int ksize, anchor;\n};\n\n/*!\n The Base Class for Non-Separable 2D Filters.\n\n This is the base class for linear or non-linear 2D filters.\n\n Several functions in OpenCV return Ptr<BaseFilter> for the specific types of filters,\n and those pointers can be used directly or within cv::FilterEngine.\n\n Similar to cv::BaseColumnFilter, the class may have some context information,\n that should be reset using BaseFilter::reset() method before processing the new array.\n*/\nclass CV_EXPORTS BaseFilter\n{\npublic:\n    //! the default constructor\n    BaseFilter();\n    //! the destructor\n    virtual ~BaseFilter();\n    //! the filtering operator. The horizontal and the vertical border interpolation is done outside of the class.\n    virtual void operator()(const uchar** src, uchar* dst, int dststep,\n                            int dstcount, int width, int cn) = 0;\n    //! resets the internal buffers, if any\n    virtual void reset();\n    Size ksize;\n    Point anchor;\n};\n\n/*!\n The Main Class for Image Filtering.\n\n The class can be used to apply an arbitrary filtering operation to an image.\n It contains all the necessary intermediate buffers, it computes extrapolated values\n of the \"virtual\" pixels outside of the image etc.\n Pointers to the initialized cv::FilterEngine instances\n are returned by various OpenCV functions, such as cv::createSeparableLinearFilter(),\n cv::createLinearFilter(), cv::createGaussianFilter(), cv::createDerivFilter(),\n cv::createBoxFilter() and cv::createMorphologyFilter().\n\n Using the class you can process large images by parts and build complex pipelines\n that include filtering as some of the stages. If all you need is to apply some pre-defined\n filtering operation, you may use cv::filter2D(), cv::erode(), cv::dilate() etc.\n functions that create FilterEngine internally.\n\n Here is the example on how to use the class to implement Laplacian operator, which is the sum of\n second-order derivatives. More complex variant for different types is implemented in cv::Laplacian().\n\n \\code\n void laplace_f(const Mat& src, Mat& dst)\n {\n     CV_Assert( src.type() == CV_32F );\n     // make sure the destination array has the proper size and type\n     dst.create(src.size(), src.type());\n\n     // get the derivative and smooth kernels for d2I/dx2.\n     // for d2I/dy2 we could use the same kernels, just swapped\n     Mat kd, ks;\n     getSobelKernels( kd, ks, 2, 0, ksize, false, ktype );\n\n     // let's process 10 source rows at once\n     int DELTA = std::min(10, src.rows);\n     Ptr<FilterEngine> Fxx = createSeparableLinearFilter(src.type(),\n     dst.type(), kd, ks, Point(-1,-1), 0, borderType, borderType, Scalar() );\n     Ptr<FilterEngine> Fyy = createSeparableLinearFilter(src.type(),\n     dst.type(), ks, kd, Point(-1,-1), 0, borderType, borderType, Scalar() );\n\n     int y = Fxx->start(src), dsty = 0, dy = 0;\n     Fyy->start(src);\n     const uchar* sptr = src.data + y*src.step;\n\n     // allocate the buffers for the spatial image derivatives;\n     // the buffers need to have more than DELTA rows, because at the\n     // last iteration the output may take max(kd.rows-1,ks.rows-1)\n     // rows more than the input.\n     Mat Ixx( DELTA + kd.rows - 1, src.cols, dst.type() );\n     Mat Iyy( DELTA + kd.rows - 1, src.cols, dst.type() );\n\n     // inside the loop we always pass DELTA rows to the filter\n     // (note that the \"proceed\" method takes care of possibe overflow, since\n     // it was given the actual image height in the \"start\" method)\n     // on output we can get:\n     //  * < DELTA rows (the initial buffer accumulation stage)\n     //  * = DELTA rows (settled state in the middle)\n     //  * > DELTA rows (then the input image is over, but we generate\n     //                  \"virtual\" rows using the border mode and filter them)\n     // this variable number of output rows is dy.\n     // dsty is the current output row.\n     // sptr is the pointer to the first input row in the portion to process\n     for( ; dsty < dst.rows; sptr += DELTA*src.step, dsty += dy )\n     {\n         Fxx->proceed( sptr, (int)src.step, DELTA, Ixx.data, (int)Ixx.step );\n         dy = Fyy->proceed( sptr, (int)src.step, DELTA, d2y.data, (int)Iyy.step );\n         if( dy > 0 )\n         {\n             Mat dstripe = dst.rowRange(dsty, dsty + dy);\n             add(Ixx.rowRange(0, dy), Iyy.rowRange(0, dy), dstripe);\n         }\n     }\n }\n \\endcode\n*/\nclass CV_EXPORTS FilterEngine\n{\npublic:\n    //! the default constructor\n    FilterEngine();\n    //! the full constructor. Either _filter2D or both _rowFilter and _columnFilter must be non-empty.\n    FilterEngine(const Ptr<BaseFilter>& _filter2D,\n                 const Ptr<BaseRowFilter>& _rowFilter,\n                 const Ptr<BaseColumnFilter>& _columnFilter,\n                 int srcType, int dstType, int bufType,\n                 int _rowBorderType=BORDER_REPLICATE,\n                 int _columnBorderType=-1,\n                 const Scalar& _borderValue=Scalar());\n    //! the destructor\n    virtual ~FilterEngine();\n    //! reinitializes the engine. The previously assigned filters are released.\n    void init(const Ptr<BaseFilter>& _filter2D,\n              const Ptr<BaseRowFilter>& _rowFilter,\n              const Ptr<BaseColumnFilter>& _columnFilter,\n              int srcType, int dstType, int bufType,\n              int _rowBorderType=BORDER_REPLICATE, int _columnBorderType=-1,\n              const Scalar& _borderValue=Scalar());\n    //! starts filtering of the specified ROI of an image of size wholeSize.\n    virtual int start(Size wholeSize, Rect roi, int maxBufRows=-1);\n    //! starts filtering of the specified ROI of the specified image.\n    virtual int start(const Mat& src, const Rect& srcRoi=Rect(0,0,-1,-1),\n                      bool isolated=false, int maxBufRows=-1);\n    //! processes the next srcCount rows of the image.\n    virtual int proceed(const uchar* src, int srcStep, int srcCount,\n                        uchar* dst, int dstStep);\n    //! applies filter to the specified ROI of the image. if srcRoi=(0,0,-1,-1), the whole image is filtered.\n    virtual void apply( const Mat& src, Mat& dst,\n                        const Rect& srcRoi=Rect(0,0,-1,-1),\n                        Point dstOfs=Point(0,0),\n                        bool isolated=false);\n    //! returns true if the filter is separable\n    bool isSeparable() const { return (const BaseFilter*)filter2D == 0; }\n    //! returns the number\n    int remainingInputRows() const;\n    int remainingOutputRows() const;\n\n    int srcType, dstType, bufType;\n    Size ksize;\n    Point anchor;\n    int maxWidth;\n    Size wholeSize;\n    Rect roi;\n    int dx1, dx2;\n    int rowBorderType, columnBorderType;\n    vector<int> borderTab;\n    int borderElemSize;\n    vector<uchar> ringBuf;\n    vector<uchar> srcRow;\n    vector<uchar> constBorderValue;\n    vector<uchar> constBorderRow;\n    int bufStep, startY, startY0, endY, rowCount, dstY;\n    vector<uchar*> rows;\n\n    Ptr<BaseFilter> filter2D;\n    Ptr<BaseRowFilter> rowFilter;\n    Ptr<BaseColumnFilter> columnFilter;\n};\n\n//! type of the kernel\nenum { KERNEL_GENERAL=0, KERNEL_SYMMETRICAL=1, KERNEL_ASYMMETRICAL=2,\n       KERNEL_SMOOTH=4, KERNEL_INTEGER=8 };\n\n//! returns type (one of KERNEL_*) of 1D or 2D kernel specified by its coefficients.\nCV_EXPORTS int getKernelType(InputArray kernel, Point anchor);\n\n//! returns the primitive row filter with the specified kernel\nCV_EXPORTS Ptr<BaseRowFilter> getLinearRowFilter(int srcType, int bufType,\n                                            InputArray kernel, int anchor,\n                                            int symmetryType);\n\n//! returns the primitive column filter with the specified kernel\nCV_EXPORTS Ptr<BaseColumnFilter> getLinearColumnFilter(int bufType, int dstType,\n                                            InputArray kernel, int anchor,\n                                            int symmetryType, double delta=0,\n                                            int bits=0);\n\n//! returns 2D filter with the specified kernel\nCV_EXPORTS Ptr<BaseFilter> getLinearFilter(int srcType, int dstType,\n                                           InputArray kernel,\n                                           Point anchor=Point(-1,-1),\n                                           double delta=0, int bits=0);\n\n//! returns the separable linear filter engine\nCV_EXPORTS Ptr<FilterEngine> createSeparableLinearFilter(int srcType, int dstType,\n                          InputArray rowKernel, InputArray columnKernel,\n                          Point anchor=Point(-1,-1), double delta=0,\n                          int rowBorderType=BORDER_DEFAULT,\n                          int columnBorderType=-1,\n                          const Scalar& borderValue=Scalar());\n\n//! returns the non-separable linear filter engine\nCV_EXPORTS Ptr<FilterEngine> createLinearFilter(int srcType, int dstType,\n                 InputArray kernel, Point _anchor=Point(-1,-1),\n                 double delta=0, int rowBorderType=BORDER_DEFAULT,\n                 int columnBorderType=-1, const Scalar& borderValue=Scalar());\n\n//! returns the Gaussian kernel with the specified parameters\nCV_EXPORTS_W Mat getGaussianKernel( int ksize, double sigma, int ktype=CV_64F );\n\n//! returns the Gaussian filter engine\nCV_EXPORTS Ptr<FilterEngine> createGaussianFilter( int type, Size ksize,\n                                    double sigma1, double sigma2=0,\n                                    int borderType=BORDER_DEFAULT);\n//! initializes kernels of the generalized Sobel operator\nCV_EXPORTS_W void getDerivKernels( OutputArray kx, OutputArray ky,\n                                   int dx, int dy, int ksize,\n                                   bool normalize=false, int ktype=CV_32F );\n//! returns filter engine for the generalized Sobel operator\nCV_EXPORTS Ptr<FilterEngine> createDerivFilter( int srcType, int dstType,\n                                        int dx, int dy, int ksize,\n                                        int borderType=BORDER_DEFAULT );\n//! returns horizontal 1D box filter\nCV_EXPORTS Ptr<BaseRowFilter> getRowSumFilter(int srcType, int sumType,\n                                              int ksize, int anchor=-1);\n//! returns vertical 1D box filter\nCV_EXPORTS Ptr<BaseColumnFilter> getColumnSumFilter( int sumType, int dstType,\n                                                     int ksize, int anchor=-1,\n                                                     double scale=1);\n//! returns box filter engine\nCV_EXPORTS Ptr<FilterEngine> createBoxFilter( int srcType, int dstType, Size ksize,\n                                              Point anchor=Point(-1,-1),\n                                              bool normalize=true,\n                                              int borderType=BORDER_DEFAULT);\n\n//! returns the Gabor kernel with the specified parameters\nCV_EXPORTS_W Mat getGaborKernel( Size ksize, double sigma, double theta, double lambd,\n                                 double gamma, double psi=CV_PI*0.5, int ktype=CV_64F );\n\n//! type of morphological operation\nenum { MORPH_ERODE=CV_MOP_ERODE, MORPH_DILATE=CV_MOP_DILATE,\n       MORPH_OPEN=CV_MOP_OPEN, MORPH_CLOSE=CV_MOP_CLOSE,\n       MORPH_GRADIENT=CV_MOP_GRADIENT, MORPH_TOPHAT=CV_MOP_TOPHAT,\n       MORPH_BLACKHAT=CV_MOP_BLACKHAT };\n\n//! returns horizontal 1D morphological filter\nCV_EXPORTS Ptr<BaseRowFilter> getMorphologyRowFilter(int op, int type, int ksize, int anchor=-1);\n//! returns vertical 1D morphological filter\nCV_EXPORTS Ptr<BaseColumnFilter> getMorphologyColumnFilter(int op, int type, int ksize, int anchor=-1);\n//! returns 2D morphological filter\nCV_EXPORTS Ptr<BaseFilter> getMorphologyFilter(int op, int type, InputArray kernel,\n                                               Point anchor=Point(-1,-1));\n\n//! returns \"magic\" border value for erosion and dilation. It is automatically transformed to Scalar::all(-DBL_MAX) for dilation.\nstatic inline Scalar morphologyDefaultBorderValue() { return Scalar::all(DBL_MAX); }\n\n//! returns morphological filter engine. Only MORPH_ERODE and MORPH_DILATE are supported.\nCV_EXPORTS Ptr<FilterEngine> createMorphologyFilter(int op, int type, InputArray kernel,\n                    Point anchor=Point(-1,-1), int rowBorderType=BORDER_CONSTANT,\n                    int columnBorderType=-1,\n                    const Scalar& borderValue=morphologyDefaultBorderValue());\n\n//! shape of the structuring element\nenum { MORPH_RECT=0, MORPH_CROSS=1, MORPH_ELLIPSE=2 };\n//! returns structuring element of the specified shape and size\nCV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1));\n\ntemplate<> CV_EXPORTS void Ptr<IplConvKernel>::delete_obj();\n\n//! copies 2D array to a larger destination array with extrapolation of the outer part of src using the specified border mode\nCV_EXPORTS_W void copyMakeBorder( InputArray src, OutputArray dst,\n                                int top, int bottom, int left, int right,\n                                int borderType, const Scalar& value=Scalar() );\n\n//! smooths the image using median filter.\nCV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );\n//! smooths the image using Gaussian filter.\nCV_EXPORTS_W void GaussianBlur( InputArray src,\n                                               OutputArray dst, Size ksize,\n                                               double sigmaX, double sigmaY=0,\n                                               int borderType=BORDER_DEFAULT );\n//! smooths the image using bilateral filter\nCV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,\n                                   double sigmaColor, double sigmaSpace,\n                                   int borderType=BORDER_DEFAULT );\n//! smooths the image using adaptive bilateral filter\nCV_EXPORTS_W void adaptiveBilateralFilter( InputArray src, OutputArray dst, Size ksize,\n                                           double sigmaSpace, double maxSigmaColor = 20.0, Point anchor=Point(-1, -1),\n                                           int borderType=BORDER_DEFAULT );\n//! smooths the image using the box filter. Each pixel is processed in O(1) time\nCV_EXPORTS_W void boxFilter( InputArray src, OutputArray dst, int ddepth,\n                             Size ksize, Point anchor=Point(-1,-1),\n                             bool normalize=true,\n                             int borderType=BORDER_DEFAULT );\n//! a synonym for normalized box filter\nCV_EXPORTS_W void blur( InputArray src, OutputArray dst,\n                        Size ksize, Point anchor=Point(-1,-1),\n                        int borderType=BORDER_DEFAULT );\n\n//! applies non-separable 2D linear filter to the image\nCV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,\n                            InputArray kernel, Point anchor=Point(-1,-1),\n                            double delta=0, int borderType=BORDER_DEFAULT );\n\n//! applies separable 2D linear filter to the image\nCV_EXPORTS_W void sepFilter2D( InputArray src, OutputArray dst, int ddepth,\n                               InputArray kernelX, InputArray kernelY,\n                               Point anchor=Point(-1,-1),\n                               double delta=0, int borderType=BORDER_DEFAULT );\n\n//! applies generalized Sobel operator to the image\nCV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth,\n                         int dx, int dy, int ksize=3,\n                         double scale=1, double delta=0,\n                         int borderType=BORDER_DEFAULT );\n\n//! applies the vertical or horizontal Scharr operator to the image\nCV_EXPORTS_W void Scharr( InputArray src, OutputArray dst, int ddepth,\n                          int dx, int dy, double scale=1, double delta=0,\n                          int borderType=BORDER_DEFAULT );\n\n//! applies Laplacian operator to the image\nCV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,\n                             int ksize=1, double scale=1, double delta=0,\n                             int borderType=BORDER_DEFAULT );\n\n//! applies Canny edge detector and produces the edge map.\nCV_EXPORTS_W void Canny( InputArray image, OutputArray edges,\n                         double threshold1, double threshold2,\n                         int apertureSize=3, bool L2gradient=false );\n\n//! computes minimum eigen value of 2x2 derivative covariation matrix at each pixel - the cornerness criteria\nCV_EXPORTS_W void cornerMinEigenVal( InputArray src, OutputArray dst,\n                                   int blockSize, int ksize=3,\n                                   int borderType=BORDER_DEFAULT );\n\n//! computes Harris cornerness criteria at each image pixel\nCV_EXPORTS_W void cornerHarris( InputArray src, OutputArray dst, int blockSize,\n                                int ksize, double k,\n                                int borderType=BORDER_DEFAULT );\n\n// low-level function for computing eigenvalues and eigenvectors of 2x2 matrices\nCV_EXPORTS void eigen2x2( const float* a, float* e, int n );\n\n//! computes both eigenvalues and the eigenvectors of 2x2 derivative covariation matrix  at each pixel. The output is stored as 6-channel matrix.\nCV_EXPORTS_W void cornerEigenValsAndVecs( InputArray src, OutputArray dst,\n                                          int blockSize, int ksize,\n                                          int borderType=BORDER_DEFAULT );\n\n//! computes another complex cornerness criteria at each pixel\nCV_EXPORTS_W void preCornerDetect( InputArray src, OutputArray dst, int ksize,\n                                   int borderType=BORDER_DEFAULT );\n\n//! adjusts the corner locations with sub-pixel accuracy to maximize the certain cornerness criteria\nCV_EXPORTS_W void cornerSubPix( InputArray image, InputOutputArray corners,\n                                Size winSize, Size zeroZone,\n                                TermCriteria criteria );\n\n//! finds the strong enough corners where the cornerMinEigenVal() or cornerHarris() report the local maxima\nCV_EXPORTS_W void goodFeaturesToTrack( InputArray image, OutputArray corners,\n                                     int maxCorners, double qualityLevel, double minDistance,\n                                     InputArray mask=noArray(), int blockSize=3,\n                                     bool useHarrisDetector=false, double k=0.04 );\n\n//! finds lines in the black-n-white image using the standard or pyramid Hough transform\nCV_EXPORTS_W void HoughLines( InputArray image, OutputArray lines,\n                              double rho, double theta, int threshold,\n                              double srn=0, double stn=0 );\n\n//! finds line segments in the black-n-white image using probabilistic Hough transform\nCV_EXPORTS_W void HoughLinesP( InputArray image, OutputArray lines,\n                               double rho, double theta, int threshold,\n                               double minLineLength=0, double maxLineGap=0 );\n\n//! finds circles in the grayscale image using 2+1 gradient Hough transform\nCV_EXPORTS_W void HoughCircles( InputArray image, OutputArray circles,\n                               int method, double dp, double minDist,\n                               double param1=100, double param2=100,\n                               int minRadius=0, int maxRadius=0 );\n\nenum\n{\n    GHT_POSITION = 0,\n    GHT_SCALE = 1,\n    GHT_ROTATION = 2\n};\n\n//! finds arbitrary template in the grayscale image using Generalized Hough Transform\n//! Ballard, D.H. (1981). Generalizing the Hough transform to detect arbitrary shapes. Pattern Recognition 13 (2): 111-122.\n//! Guil, N., González-Linares, J.M. and Zapata, E.L. (1999). Bidimensional shape detection using an invariant approach. Pattern Recognition 32 (6): 1025-1038.\nclass CV_EXPORTS GeneralizedHough : public Algorithm\n{\npublic:\n    static Ptr<GeneralizedHough> create(int method);\n\n    virtual ~GeneralizedHough();\n\n    //! set template to search\n    void setTemplate(InputArray templ, int cannyThreshold = 100, Point templCenter = Point(-1, -1));\n    void setTemplate(InputArray edges, InputArray dx, InputArray dy, Point templCenter = Point(-1, -1));\n\n    //! find template on image\n    void detect(InputArray image, OutputArray positions, OutputArray votes = cv::noArray(), int cannyThreshold = 100);\n    void detect(InputArray edges, InputArray dx, InputArray dy, OutputArray positions, OutputArray votes = cv::noArray());\n\n    void release();\n\nprotected:\n    virtual void setTemplateImpl(const Mat& edges, const Mat& dx, const Mat& dy, Point templCenter) = 0;\n    virtual void detectImpl(const Mat& edges, const Mat& dx, const Mat& dy, OutputArray positions, OutputArray votes) = 0;\n    virtual void releaseImpl() = 0;\n\nprivate:\n    Mat edges_, dx_, dy_;\n};\n\n//! erodes the image (applies the local minimum operator)\nCV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,\n                         Point anchor=Point(-1,-1), int iterations=1,\n                         int borderType=BORDER_CONSTANT,\n                         const Scalar& borderValue=morphologyDefaultBorderValue() );\n\n//! dilates the image (applies the local maximum operator)\nCV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,\n                          Point anchor=Point(-1,-1), int iterations=1,\n                          int borderType=BORDER_CONSTANT,\n                          const Scalar& borderValue=morphologyDefaultBorderValue() );\n\n//! applies an advanced morphological operation to the image\nCV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,\n                                int op, InputArray kernel,\n                                Point anchor=Point(-1,-1), int iterations=1,\n                                int borderType=BORDER_CONSTANT,\n                                const Scalar& borderValue=morphologyDefaultBorderValue() );\n\n//! interpolation algorithm\nenum\n{\n    INTER_NEAREST=CV_INTER_NN, //!< nearest neighbor interpolation\n    INTER_LINEAR=CV_INTER_LINEAR, //!< bilinear interpolation\n    INTER_CUBIC=CV_INTER_CUBIC, //!< bicubic interpolation\n    INTER_AREA=CV_INTER_AREA, //!< area-based (or super) interpolation\n    INTER_LANCZOS4=CV_INTER_LANCZOS4, //!< Lanczos interpolation over 8x8 neighborhood\n    INTER_MAX=7,\n    WARP_INVERSE_MAP=CV_WARP_INVERSE_MAP\n};\n\n//! resizes the image\nCV_EXPORTS_W void resize( InputArray src, OutputArray dst,\n                          Size dsize, double fx=0, double fy=0,\n                          int interpolation=INTER_LINEAR );\n\n//! warps the image using affine transformation\nCV_EXPORTS_W void warpAffine( InputArray src, OutputArray dst,\n                              InputArray M, Size dsize,\n                              int flags=INTER_LINEAR,\n                              int borderMode=BORDER_CONSTANT,\n                              const Scalar& borderValue=Scalar());\n\n//! warps the image using perspective transformation\nCV_EXPORTS_W void warpPerspective( InputArray src, OutputArray dst,\n                                   InputArray M, Size dsize,\n                                   int flags=INTER_LINEAR,\n                                   int borderMode=BORDER_CONSTANT,\n                                   const Scalar& borderValue=Scalar());\n\nenum\n{\n    INTER_BITS=5, INTER_BITS2=INTER_BITS*2,\n    INTER_TAB_SIZE=(1<<INTER_BITS),\n    INTER_TAB_SIZE2=INTER_TAB_SIZE*INTER_TAB_SIZE\n};\n\n//! warps the image using the precomputed maps. The maps are stored in either floating-point or integer fixed-point format\nCV_EXPORTS_W void remap( InputArray src, OutputArray dst,\n                         InputArray map1, InputArray map2,\n                         int interpolation, int borderMode=BORDER_CONSTANT,\n                         const Scalar& borderValue=Scalar());\n\n//! converts maps for remap from floating-point to fixed-point format or backwards\nCV_EXPORTS_W void convertMaps( InputArray map1, InputArray map2,\n                               OutputArray dstmap1, OutputArray dstmap2,\n                               int dstmap1type, bool nninterpolation=false );\n\n//! returns 2x3 affine transformation matrix for the planar rotation.\nCV_EXPORTS_W Mat getRotationMatrix2D( Point2f center, double angle, double scale );\n//! returns 3x3 perspective transformation for the corresponding 4 point pairs.\nCV_EXPORTS Mat getPerspectiveTransform( const Point2f src[], const Point2f dst[] );\n//! returns 2x3 affine transformation for the corresponding 3 point pairs.\nCV_EXPORTS Mat getAffineTransform( const Point2f src[], const Point2f dst[] );\n//! computes 2x3 affine transformation matrix that is inverse to the specified 2x3 affine transformation.\nCV_EXPORTS_W void invertAffineTransform( InputArray M, OutputArray iM );\n\nCV_EXPORTS_W Mat getPerspectiveTransform( InputArray src, InputArray dst );\nCV_EXPORTS_W Mat getAffineTransform( InputArray src, InputArray dst );\n\n//! extracts rectangle from the image at sub-pixel location\nCV_EXPORTS_W void getRectSubPix( InputArray image, Size patchSize,\n                                 Point2f center, OutputArray patch, int patchType=-1 );\n\n//! computes the integral image\nCV_EXPORTS_W void integral( InputArray src, OutputArray sum, int sdepth=-1 );\n\n//! computes the integral image and integral for the squared image\nCV_EXPORTS_AS(integral2) void integral( InputArray src, OutputArray sum,\n                                        OutputArray sqsum, int sdepth=-1 );\n//! computes the integral image, integral for the squared image and the tilted integral image\nCV_EXPORTS_AS(integral3) void integral( InputArray src, OutputArray sum,\n                                        OutputArray sqsum, OutputArray tilted,\n                                        int sdepth=-1 );\n\n//! adds image to the accumulator (dst += src). Unlike cv::add, dst and src can have different types.\nCV_EXPORTS_W void accumulate( InputArray src, InputOutputArray dst,\n                              InputArray mask=noArray() );\n//! adds squared src image to the accumulator (dst += src*src).\nCV_EXPORTS_W void accumulateSquare( InputArray src, InputOutputArray dst,\n                                    InputArray mask=noArray() );\n//! adds product of the 2 images to the accumulator (dst += src1*src2).\nCV_EXPORTS_W void accumulateProduct( InputArray src1, InputArray src2,\n                                     InputOutputArray dst, InputArray mask=noArray() );\n//! updates the running average (dst = dst*(1-alpha) + src*alpha)\nCV_EXPORTS_W void accumulateWeighted( InputArray src, InputOutputArray dst,\n                                      double alpha, InputArray mask=noArray() );\n\n//! computes PSNR image/video quality metric\nCV_EXPORTS_W double PSNR(InputArray src1, InputArray src2);\n\nCV_EXPORTS_W Point2d phaseCorrelate(InputArray src1, InputArray src2,\n                                  InputArray window = noArray());\nCV_EXPORTS_W Point2d phaseCorrelateRes(InputArray src1, InputArray src2,\n                                    InputArray window, CV_OUT double* response = 0);\nCV_EXPORTS_W void createHanningWindow(OutputArray dst, Size winSize, int type);\n\n//! type of the threshold operation\nenum { THRESH_BINARY=CV_THRESH_BINARY, THRESH_BINARY_INV=CV_THRESH_BINARY_INV,\n       THRESH_TRUNC=CV_THRESH_TRUNC, THRESH_TOZERO=CV_THRESH_TOZERO,\n       THRESH_TOZERO_INV=CV_THRESH_TOZERO_INV, THRESH_MASK=CV_THRESH_MASK,\n       THRESH_OTSU=CV_THRESH_OTSU };\n\n//! applies fixed threshold to the image\nCV_EXPORTS_W double threshold( InputArray src, OutputArray dst,\n                               double thresh, double maxval, int type );\n\n//! adaptive threshold algorithm\nenum { ADAPTIVE_THRESH_MEAN_C=0, ADAPTIVE_THRESH_GAUSSIAN_C=1 };\n\n//! applies variable (adaptive) threshold to the image\nCV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,\n                                     double maxValue, int adaptiveMethod,\n                                     int thresholdType, int blockSize, double C );\n\n//! smooths and downsamples the image\nCV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,\n                           const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );\n//! upsamples and smoothes the image\nCV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,\n                         const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );\n\n//! builds the gaussian pyramid using pyrDown() as a basic operation\nCV_EXPORTS void buildPyramid( InputArray src, OutputArrayOfArrays dst,\n                              int maxlevel, int borderType=BORDER_DEFAULT );\n\n//! corrects lens distortion for the given camera matrix and distortion coefficients\nCV_EXPORTS_W void undistort( InputArray src, OutputArray dst,\n                             InputArray cameraMatrix,\n                             InputArray distCoeffs,\n                             InputArray newCameraMatrix=noArray() );\n\n//! initializes maps for cv::remap() to correct lens distortion and optionally rectify the image\nCV_EXPORTS_W void initUndistortRectifyMap( InputArray cameraMatrix, InputArray distCoeffs,\n                           InputArray R, InputArray newCameraMatrix,\n                           Size size, int m1type, OutputArray map1, OutputArray map2 );\n\nenum\n{\n    PROJ_SPHERICAL_ORTHO = 0,\n    PROJ_SPHERICAL_EQRECT = 1\n};\n\n//! initializes maps for cv::remap() for wide-angle\nCV_EXPORTS_W float initWideAngleProjMap( InputArray cameraMatrix, InputArray distCoeffs,\n                                         Size imageSize, int destImageWidth,\n                                         int m1type, OutputArray map1, OutputArray map2,\n                                         int projType=PROJ_SPHERICAL_EQRECT, double alpha=0);\n\n//! returns the default new camera matrix (by default it is the same as cameraMatrix unless centerPricipalPoint=true)\nCV_EXPORTS_W Mat getDefaultNewCameraMatrix( InputArray cameraMatrix, Size imgsize=Size(),\n                                            bool centerPrincipalPoint=false );\n\n//! returns points' coordinates after lens distortion correction\nCV_EXPORTS_W void undistortPoints( InputArray src, OutputArray dst,\n                                   InputArray cameraMatrix, InputArray distCoeffs,\n                                   InputArray R=noArray(), InputArray P=noArray());\n\ntemplate<> CV_EXPORTS void Ptr<CvHistogram>::delete_obj();\n\n//! computes the joint dense histogram for a set of images.\nCV_EXPORTS void calcHist( const Mat* images, int nimages,\n                          const int* channels, InputArray mask,\n                          OutputArray hist, int dims, const int* histSize,\n                          const float** ranges, bool uniform=true, bool accumulate=false );\n\n//! computes the joint sparse histogram for a set of images.\nCV_EXPORTS void calcHist( const Mat* images, int nimages,\n                          const int* channels, InputArray mask,\n                          SparseMat& hist, int dims,\n                          const int* histSize, const float** ranges,\n                          bool uniform=true, bool accumulate=false );\n\nCV_EXPORTS_W void calcHist( InputArrayOfArrays images,\n                            const vector<int>& channels,\n                            InputArray mask, OutputArray hist,\n                            const vector<int>& histSize,\n                            const vector<float>& ranges,\n                            bool accumulate=false );\n\n//! computes back projection for the set of images\nCV_EXPORTS void calcBackProject( const Mat* images, int nimages,\n                                 const int* channels, InputArray hist,\n                                 OutputArray backProject, const float** ranges,\n                                 double scale=1, bool uniform=true );\n\n//! computes back projection for the set of images\nCV_EXPORTS void calcBackProject( const Mat* images, int nimages,\n                                 const int* channels, const SparseMat& hist,\n                                 OutputArray backProject, const float** ranges,\n                                 double scale=1, bool uniform=true );\n\nCV_EXPORTS_W void calcBackProject( InputArrayOfArrays images, const vector<int>& channels,\n                                   InputArray hist, OutputArray dst,\n                                   const vector<float>& ranges,\n                                   double scale );\n\n/*CV_EXPORTS void calcBackProjectPatch( const Mat* images, int nimages, const int* channels,\n                                      InputArray hist, OutputArray dst, Size patchSize,\n                                      int method, double factor=1 );\n\nCV_EXPORTS_W void calcBackProjectPatch( InputArrayOfArrays images, const vector<int>& channels,\n                                        InputArray hist, OutputArray dst, Size patchSize,\n                                        int method, double factor=1 );*/\n\n//! compares two histograms stored in dense arrays\nCV_EXPORTS_W double compareHist( InputArray H1, InputArray H2, int method );\n\n//! compares two histograms stored in sparse arrays\nCV_EXPORTS double compareHist( const SparseMat& H1, const SparseMat& H2, int method );\n\n//! normalizes the grayscale image brightness and contrast by normalizing its histogram\nCV_EXPORTS_W void equalizeHist( InputArray src, OutputArray dst );\n\nclass CV_EXPORTS_W CLAHE : public Algorithm\n{\npublic:\n    CV_WRAP virtual void apply(InputArray src, OutputArray dst) = 0;\n\n    CV_WRAP virtual void setClipLimit(double clipLimit) = 0;\n    CV_WRAP virtual double getClipLimit() const = 0;\n\n    CV_WRAP virtual void setTilesGridSize(Size tileGridSize) = 0;\n    CV_WRAP virtual Size getTilesGridSize() const = 0;\n\n    CV_WRAP virtual void collectGarbage() = 0;\n};\nCV_EXPORTS_W Ptr<CLAHE> createCLAHE(double clipLimit = 40.0, Size tileGridSize = Size(8, 8));\n\nCV_EXPORTS float EMD( InputArray signature1, InputArray signature2,\n                      int distType, InputArray cost=noArray(),\n                      float* lowerBound=0, OutputArray flow=noArray() );\n\n//! segments the image using watershed algorithm\nCV_EXPORTS_W void watershed( InputArray image, InputOutputArray markers );\n\n//! filters image using meanshift algorithm\nCV_EXPORTS_W void pyrMeanShiftFiltering( InputArray src, OutputArray dst,\n                                         double sp, double sr, int maxLevel=1,\n                                         TermCriteria termcrit=TermCriteria(\n                                            TermCriteria::MAX_ITER+TermCriteria::EPS,5,1) );\n\n//! class of the pixel in GrabCut algorithm\nenum\n{\n    GC_BGD    = 0,  //!< background\n    GC_FGD    = 1,  //!< foreground\n    GC_PR_BGD = 2,  //!< most probably background\n    GC_PR_FGD = 3   //!< most probably foreground\n};\n\n//! GrabCut algorithm flags\nenum\n{\n    GC_INIT_WITH_RECT  = 0,\n    GC_INIT_WITH_MASK  = 1,\n    GC_EVAL            = 2\n};\n\n//! segments the image using GrabCut algorithm\nCV_EXPORTS_W void grabCut( InputArray img, InputOutputArray mask, Rect rect,\n                           InputOutputArray bgdModel, InputOutputArray fgdModel,\n                           int iterCount, int mode = GC_EVAL );\n\nenum\n{\n    DIST_LABEL_CCOMP = 0,\n    DIST_LABEL_PIXEL = 1\n};\n\n//! builds the discrete Voronoi diagram\nCV_EXPORTS_AS(distanceTransformWithLabels) void distanceTransform( InputArray src, OutputArray dst,\n                                     OutputArray labels, int distanceType, int maskSize,\n                                     int labelType=DIST_LABEL_CCOMP );\n\n//! computes the distance transform map\nCV_EXPORTS_W void distanceTransform( InputArray src, OutputArray dst,\n                                     int distanceType, int maskSize );\n\nenum { FLOODFILL_FIXED_RANGE = 1 << 16, FLOODFILL_MASK_ONLY = 1 << 17 };\n\n//! fills the semi-uniform image region starting from the specified seed point\nCV_EXPORTS int floodFill( InputOutputArray image,\n                          Point seedPoint, Scalar newVal, CV_OUT Rect* rect=0,\n                          Scalar loDiff=Scalar(), Scalar upDiff=Scalar(),\n                          int flags=4 );\n\n//! fills the semi-uniform image region and/or the mask starting from the specified seed point\nCV_EXPORTS_W int floodFill( InputOutputArray image, InputOutputArray mask,\n                            Point seedPoint, Scalar newVal, CV_OUT Rect* rect=0,\n                            Scalar loDiff=Scalar(), Scalar upDiff=Scalar(),\n                            int flags=4 );\n\n\nenum\n{\n    COLOR_BGR2BGRA    =0,\n    COLOR_RGB2RGBA    =COLOR_BGR2BGRA,\n\n    COLOR_BGRA2BGR    =1,\n    COLOR_RGBA2RGB    =COLOR_BGRA2BGR,\n\n    COLOR_BGR2RGBA    =2,\n    COLOR_RGB2BGRA    =COLOR_BGR2RGBA,\n\n    COLOR_RGBA2BGR    =3,\n    COLOR_BGRA2RGB    =COLOR_RGBA2BGR,\n\n    COLOR_BGR2RGB     =4,\n    COLOR_RGB2BGR     =COLOR_BGR2RGB,\n\n    COLOR_BGRA2RGBA   =5,\n    COLOR_RGBA2BGRA   =COLOR_BGRA2RGBA,\n\n    COLOR_BGR2GRAY    =6,\n    COLOR_RGB2GRAY    =7,\n    COLOR_GRAY2BGR    =8,\n    COLOR_GRAY2RGB    =COLOR_GRAY2BGR,\n    COLOR_GRAY2BGRA   =9,\n    COLOR_GRAY2RGBA   =COLOR_GRAY2BGRA,\n    COLOR_BGRA2GRAY   =10,\n    COLOR_RGBA2GRAY   =11,\n\n    COLOR_BGR2BGR565  =12,\n    COLOR_RGB2BGR565  =13,\n    COLOR_BGR5652BGR  =14,\n    COLOR_BGR5652RGB  =15,\n    COLOR_BGRA2BGR565 =16,\n    COLOR_RGBA2BGR565 =17,\n    COLOR_BGR5652BGRA =18,\n    COLOR_BGR5652RGBA =19,\n\n    COLOR_GRAY2BGR565 =20,\n    COLOR_BGR5652GRAY =21,\n\n    COLOR_BGR2BGR555  =22,\n    COLOR_RGB2BGR555  =23,\n    COLOR_BGR5552BGR  =24,\n    COLOR_BGR5552RGB  =25,\n    COLOR_BGRA2BGR555 =26,\n    COLOR_RGBA2BGR555 =27,\n    COLOR_BGR5552BGRA =28,\n    COLOR_BGR5552RGBA =29,\n\n    COLOR_GRAY2BGR555 =30,\n    COLOR_BGR5552GRAY =31,\n\n    COLOR_BGR2XYZ     =32,\n    COLOR_RGB2XYZ     =33,\n    COLOR_XYZ2BGR     =34,\n    COLOR_XYZ2RGB     =35,\n\n    COLOR_BGR2YCrCb   =36,\n    COLOR_RGB2YCrCb   =37,\n    COLOR_YCrCb2BGR   =38,\n    COLOR_YCrCb2RGB   =39,\n\n    COLOR_BGR2HSV     =40,\n    COLOR_RGB2HSV     =41,\n\n    COLOR_BGR2Lab     =44,\n    COLOR_RGB2Lab     =45,\n\n    COLOR_BayerBG2BGR =46,\n    COLOR_BayerGB2BGR =47,\n    COLOR_BayerRG2BGR =48,\n    COLOR_BayerGR2BGR =49,\n\n    COLOR_BayerBG2RGB =COLOR_BayerRG2BGR,\n    COLOR_BayerGB2RGB =COLOR_BayerGR2BGR,\n    COLOR_BayerRG2RGB =COLOR_BayerBG2BGR,\n    COLOR_BayerGR2RGB =COLOR_BayerGB2BGR,\n\n    COLOR_BGR2Luv     =50,\n    COLOR_RGB2Luv     =51,\n    COLOR_BGR2HLS     =52,\n    COLOR_RGB2HLS     =53,\n\n    COLOR_HSV2BGR     =54,\n    COLOR_HSV2RGB     =55,\n\n    COLOR_Lab2BGR     =56,\n    COLOR_Lab2RGB     =57,\n    COLOR_Luv2BGR     =58,\n    COLOR_Luv2RGB     =59,\n    COLOR_HLS2BGR     =60,\n    COLOR_HLS2RGB     =61,\n\n    COLOR_BayerBG2BGR_VNG =62,\n    COLOR_BayerGB2BGR_VNG =63,\n    COLOR_BayerRG2BGR_VNG =64,\n    COLOR_BayerGR2BGR_VNG =65,\n\n    COLOR_BayerBG2RGB_VNG =COLOR_BayerRG2BGR_VNG,\n    COLOR_BayerGB2RGB_VNG =COLOR_BayerGR2BGR_VNG,\n    COLOR_BayerRG2RGB_VNG =COLOR_BayerBG2BGR_VNG,\n    COLOR_BayerGR2RGB_VNG =COLOR_BayerGB2BGR_VNG,\n\n    COLOR_BGR2HSV_FULL = 66,\n    COLOR_RGB2HSV_FULL = 67,\n    COLOR_BGR2HLS_FULL = 68,\n    COLOR_RGB2HLS_FULL = 69,\n\n    COLOR_HSV2BGR_FULL = 70,\n    COLOR_HSV2RGB_FULL = 71,\n    COLOR_HLS2BGR_FULL = 72,\n    COLOR_HLS2RGB_FULL = 73,\n\n    COLOR_LBGR2Lab     = 74,\n    COLOR_LRGB2Lab     = 75,\n    COLOR_LBGR2Luv     = 76,\n    COLOR_LRGB2Luv     = 77,\n\n    COLOR_Lab2LBGR     = 78,\n    COLOR_Lab2LRGB     = 79,\n    COLOR_Luv2LBGR     = 80,\n    COLOR_Luv2LRGB     = 81,\n\n    COLOR_BGR2YUV      = 82,\n    COLOR_RGB2YUV      = 83,\n    COLOR_YUV2BGR      = 84,\n    COLOR_YUV2RGB      = 85,\n\n    COLOR_BayerBG2GRAY = 86,\n    COLOR_BayerGB2GRAY = 87,\n    COLOR_BayerRG2GRAY = 88,\n    COLOR_BayerGR2GRAY = 89,\n\n    //YUV 4:2:0 formats family\n    COLOR_YUV2RGB_NV12 = 90,\n    COLOR_YUV2BGR_NV12 = 91,\n    COLOR_YUV2RGB_NV21 = 92,\n    COLOR_YUV2BGR_NV21 = 93,\n    COLOR_YUV420sp2RGB = COLOR_YUV2RGB_NV21,\n    COLOR_YUV420sp2BGR = COLOR_YUV2BGR_NV21,\n\n    COLOR_YUV2RGBA_NV12 = 94,\n    COLOR_YUV2BGRA_NV12 = 95,\n    COLOR_YUV2RGBA_NV21 = 96,\n    COLOR_YUV2BGRA_NV21 = 97,\n    COLOR_YUV420sp2RGBA = COLOR_YUV2RGBA_NV21,\n    COLOR_YUV420sp2BGRA = COLOR_YUV2BGRA_NV21,\n\n    COLOR_YUV2RGB_YV12 = 98,\n    COLOR_YUV2BGR_YV12 = 99,\n    COLOR_YUV2RGB_IYUV = 100,\n    COLOR_YUV2BGR_IYUV = 101,\n    COLOR_YUV2RGB_I420 = COLOR_YUV2RGB_IYUV,\n    COLOR_YUV2BGR_I420 = COLOR_YUV2BGR_IYUV,\n    COLOR_YUV420p2RGB = COLOR_YUV2RGB_YV12,\n    COLOR_YUV420p2BGR = COLOR_YUV2BGR_YV12,\n\n    COLOR_YUV2RGBA_YV12 = 102,\n    COLOR_YUV2BGRA_YV12 = 103,\n    COLOR_YUV2RGBA_IYUV = 104,\n    COLOR_YUV2BGRA_IYUV = 105,\n    COLOR_YUV2RGBA_I420 = COLOR_YUV2RGBA_IYUV,\n    COLOR_YUV2BGRA_I420 = COLOR_YUV2BGRA_IYUV,\n    COLOR_YUV420p2RGBA = COLOR_YUV2RGBA_YV12,\n    COLOR_YUV420p2BGRA = COLOR_YUV2BGRA_YV12,\n\n    COLOR_YUV2GRAY_420 = 106,\n    COLOR_YUV2GRAY_NV21 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_NV12 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_YV12 = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_IYUV = COLOR_YUV2GRAY_420,\n    COLOR_YUV2GRAY_I420 = COLOR_YUV2GRAY_420,\n    COLOR_YUV420sp2GRAY = COLOR_YUV2GRAY_420,\n    COLOR_YUV420p2GRAY = COLOR_YUV2GRAY_420,\n\n    //YUV 4:2:2 formats family\n    COLOR_YUV2RGB_UYVY = 107,\n    COLOR_YUV2BGR_UYVY = 108,\n    //COLOR_YUV2RGB_VYUY = 109,\n    //COLOR_YUV2BGR_VYUY = 110,\n    COLOR_YUV2RGB_Y422 = COLOR_YUV2RGB_UYVY,\n    COLOR_YUV2BGR_Y422 = COLOR_YUV2BGR_UYVY,\n    COLOR_YUV2RGB_UYNV = COLOR_YUV2RGB_UYVY,\n    COLOR_YUV2BGR_UYNV = COLOR_YUV2BGR_UYVY,\n\n    COLOR_YUV2RGBA_UYVY = 111,\n    COLOR_YUV2BGRA_UYVY = 112,\n    //COLOR_YUV2RGBA_VYUY = 113,\n    //COLOR_YUV2BGRA_VYUY = 114,\n    COLOR_YUV2RGBA_Y422 = COLOR_YUV2RGBA_UYVY,\n    COLOR_YUV2BGRA_Y422 = COLOR_YUV2BGRA_UYVY,\n    COLOR_YUV2RGBA_UYNV = COLOR_YUV2RGBA_UYVY,\n    COLOR_YUV2BGRA_UYNV = COLOR_YUV2BGRA_UYVY,\n\n    COLOR_YUV2RGB_YUY2 = 115,\n    COLOR_YUV2BGR_YUY2 = 116,\n    COLOR_YUV2RGB_YVYU = 117,\n    COLOR_YUV2BGR_YVYU = 118,\n    COLOR_YUV2RGB_YUYV = COLOR_YUV2RGB_YUY2,\n    COLOR_YUV2BGR_YUYV = COLOR_YUV2BGR_YUY2,\n    COLOR_YUV2RGB_YUNV = COLOR_YUV2RGB_YUY2,\n    COLOR_YUV2BGR_YUNV = COLOR_YUV2BGR_YUY2,\n\n    COLOR_YUV2RGBA_YUY2 = 119,\n    COLOR_YUV2BGRA_YUY2 = 120,\n    COLOR_YUV2RGBA_YVYU = 121,\n    COLOR_YUV2BGRA_YVYU = 122,\n    COLOR_YUV2RGBA_YUYV = COLOR_YUV2RGBA_YUY2,\n    COLOR_YUV2BGRA_YUYV = COLOR_YUV2BGRA_YUY2,\n    COLOR_YUV2RGBA_YUNV = COLOR_YUV2RGBA_YUY2,\n    COLOR_YUV2BGRA_YUNV = COLOR_YUV2BGRA_YUY2,\n\n    COLOR_YUV2GRAY_UYVY = 123,\n    COLOR_YUV2GRAY_YUY2 = 124,\n    //COLOR_YUV2GRAY_VYUY = COLOR_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_Y422 = COLOR_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_UYNV = COLOR_YUV2GRAY_UYVY,\n    COLOR_YUV2GRAY_YVYU = COLOR_YUV2GRAY_YUY2,\n    COLOR_YUV2GRAY_YUYV = COLOR_YUV2GRAY_YUY2,\n    COLOR_YUV2GRAY_YUNV = COLOR_YUV2GRAY_YUY2,\n\n    // alpha premultiplication\n    COLOR_RGBA2mRGBA = 125,\n    COLOR_mRGBA2RGBA = 126,\n\n    COLOR_RGB2YUV_I420 = 127,\n    COLOR_BGR2YUV_I420 = 128,\n    COLOR_RGB2YUV_IYUV = COLOR_RGB2YUV_I420,\n    COLOR_BGR2YUV_IYUV = COLOR_BGR2YUV_I420,\n\n    COLOR_RGBA2YUV_I420 = 129,\n    COLOR_BGRA2YUV_I420 = 130,\n    COLOR_RGBA2YUV_IYUV = COLOR_RGBA2YUV_I420,\n    COLOR_BGRA2YUV_IYUV = COLOR_BGRA2YUV_I420,\n    COLOR_RGB2YUV_YV12  = 131,\n    COLOR_BGR2YUV_YV12  = 132,\n    COLOR_RGBA2YUV_YV12 = 133,\n    COLOR_BGRA2YUV_YV12 = 134,\n\n    COLOR_COLORCVT_MAX  = 135\n};\n\n\n//! converts image from one color space to another\nCV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 );\n\n//! raster image moments\nclass CV_EXPORTS_W_MAP Moments\n{\npublic:\n    //! the default constructor\n    Moments();\n    //! the full constructor\n    Moments(double m00, double m10, double m01, double m20, double m11,\n            double m02, double m30, double m21, double m12, double m03 );\n    //! the conversion from CvMoments\n    Moments( const CvMoments& moments );\n    //! the conversion to CvMoments\n    operator CvMoments() const;\n\n    //! spatial moments\n    CV_PROP_RW double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03;\n    //! central moments\n    CV_PROP_RW double  mu20, mu11, mu02, mu30, mu21, mu12, mu03;\n    //! central normalized moments\n    CV_PROP_RW double  nu20, nu11, nu02, nu30, nu21, nu12, nu03;\n};\n\n//! computes moments of the rasterized shape or a vector of points\nCV_EXPORTS_W Moments moments( InputArray array, bool binaryImage=false );\n\n//! computes 7 Hu invariants from the moments\nCV_EXPORTS void HuMoments( const Moments& moments, double hu[7] );\nCV_EXPORTS_W void HuMoments( const Moments& m, CV_OUT OutputArray hu );\n\n//! type of the template matching operation\nenum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 };\n\n//! computes the proximity map for the raster template and the image where the template is searched for\nCV_EXPORTS_W void matchTemplate( InputArray image, InputArray templ,\n                                 OutputArray result, int method );\n\n//! mode of the contour retrieval algorithm\nenum\n{\n    RETR_EXTERNAL=CV_RETR_EXTERNAL, //!< retrieve only the most external (top-level) contours\n    RETR_LIST=CV_RETR_LIST, //!< retrieve all the contours without any hierarchical information\n    RETR_CCOMP=CV_RETR_CCOMP, //!< retrieve the connected components (that can possibly be nested)\n    RETR_TREE=CV_RETR_TREE, //!< retrieve all the contours and the whole hierarchy\n    RETR_FLOODFILL=CV_RETR_FLOODFILL\n};\n\n//! the contour approximation algorithm\nenum\n{\n    CHAIN_APPROX_NONE=CV_CHAIN_APPROX_NONE,\n    CHAIN_APPROX_SIMPLE=CV_CHAIN_APPROX_SIMPLE,\n    CHAIN_APPROX_TC89_L1=CV_CHAIN_APPROX_TC89_L1,\n    CHAIN_APPROX_TC89_KCOS=CV_CHAIN_APPROX_TC89_KCOS\n};\n\n//! retrieves contours and the hierarchical information from black-n-white image.\nCV_EXPORTS_W void findContours( InputOutputArray image, OutputArrayOfArrays contours,\n                              OutputArray hierarchy, int mode,\n                              int method, Point offset=Point());\n\n//! retrieves contours from black-n-white image.\nCV_EXPORTS void findContours( InputOutputArray image, OutputArrayOfArrays contours,\n                              int mode, int method, Point offset=Point());\n\n//! draws contours in the image\nCV_EXPORTS_W void drawContours( InputOutputArray image, InputArrayOfArrays contours,\n                              int contourIdx, const Scalar& color,\n                              int thickness=1, int lineType=8,\n                              InputArray hierarchy=noArray(),\n                              int maxLevel=INT_MAX, Point offset=Point() );\n\n//! approximates contour or a curve using Douglas-Peucker algorithm\nCV_EXPORTS_W void approxPolyDP( InputArray curve,\n                                OutputArray approxCurve,\n                                double epsilon, bool closed );\n\n//! computes the contour perimeter (closed=true) or a curve length\nCV_EXPORTS_W double arcLength( InputArray curve, bool closed );\n//! computes the bounding rectangle for a contour\nCV_EXPORTS_W Rect boundingRect( InputArray points );\n//! computes the contour area\nCV_EXPORTS_W double contourArea( InputArray contour, bool oriented=false );\n//! computes the minimal rotated rectangle for a set of points\nCV_EXPORTS_W RotatedRect minAreaRect( InputArray points );\n//! computes the minimal enclosing circle for a set of points\nCV_EXPORTS_W void minEnclosingCircle( InputArray points,\n                                      CV_OUT Point2f& center, CV_OUT float& radius );\n//! matches two contours using one of the available algorithms\nCV_EXPORTS_W double matchShapes( InputArray contour1, InputArray contour2,\n                                 int method, double parameter );\n//! computes convex hull for a set of 2D points.\nCV_EXPORTS_W void convexHull( InputArray points, OutputArray hull,\n                              bool clockwise=false, bool returnPoints=true );\n//! computes the contour convexity defects\nCV_EXPORTS_W void convexityDefects( InputArray contour, InputArray convexhull, OutputArray convexityDefects );\n\n//! returns true if the contour is convex. Does not support contours with self-intersection\nCV_EXPORTS_W bool isContourConvex( InputArray contour );\n\n//! finds intersection of two convex polygons\nCV_EXPORTS_W float intersectConvexConvex( InputArray _p1, InputArray _p2,\n                                          OutputArray _p12, bool handleNested=true );\n\n//! fits ellipse to the set of 2D points\nCV_EXPORTS_W RotatedRect fitEllipse( InputArray points );\n\n//! fits line to the set of 2D points using M-estimator algorithm\nCV_EXPORTS_W void fitLine( InputArray points, OutputArray line, int distType,\n                           double param, double reps, double aeps );\n//! checks if the point is inside the contour. Optionally computes the signed distance from the point to the contour boundary\nCV_EXPORTS_W double pointPolygonTest( InputArray contour, Point2f pt, bool measureDist );\n\n\nclass CV_EXPORTS_W Subdiv2D\n{\npublic:\n    enum\n    {\n        PTLOC_ERROR = -2,\n        PTLOC_OUTSIDE_RECT = -1,\n        PTLOC_INSIDE = 0,\n        PTLOC_VERTEX = 1,\n        PTLOC_ON_EDGE = 2\n    };\n\n    enum\n    {\n        NEXT_AROUND_ORG   = 0x00,\n        NEXT_AROUND_DST   = 0x22,\n        PREV_AROUND_ORG   = 0x11,\n        PREV_AROUND_DST   = 0x33,\n        NEXT_AROUND_LEFT  = 0x13,\n        NEXT_AROUND_RIGHT = 0x31,\n        PREV_AROUND_LEFT  = 0x20,\n        PREV_AROUND_RIGHT = 0x02\n    };\n\n    CV_WRAP Subdiv2D();\n    CV_WRAP Subdiv2D(Rect rect);\n    CV_WRAP void initDelaunay(Rect rect);\n\n    CV_WRAP int insert(Point2f pt);\n    CV_WRAP void insert(const vector<Point2f>& ptvec);\n    CV_WRAP int locate(Point2f pt, CV_OUT int& edge, CV_OUT int& vertex);\n\n    CV_WRAP int findNearest(Point2f pt, CV_OUT Point2f* nearestPt=0);\n    CV_WRAP void getEdgeList(CV_OUT vector<Vec4f>& edgeList) const;\n    CV_WRAP void getTriangleList(CV_OUT vector<Vec6f>& triangleList) const;\n    CV_WRAP void getVoronoiFacetList(const vector<int>& idx, CV_OUT vector<vector<Point2f> >& facetList,\n                                     CV_OUT vector<Point2f>& facetCenters);\n\n    CV_WRAP Point2f getVertex(int vertex, CV_OUT int* firstEdge=0) const;\n\n    CV_WRAP int getEdge( int edge, int nextEdgeType ) const;\n    CV_WRAP int nextEdge(int edge) const;\n    CV_WRAP int rotateEdge(int edge, int rotate) const;\n    CV_WRAP int symEdge(int edge) const;\n    CV_WRAP int edgeOrg(int edge, CV_OUT Point2f* orgpt=0) const;\n    CV_WRAP int edgeDst(int edge, CV_OUT Point2f* dstpt=0) const;\n\nprotected:\n    int newEdge();\n    void deleteEdge(int edge);\n    int newPoint(Point2f pt, bool isvirtual, int firstEdge=0);\n    void deletePoint(int vtx);\n    void setEdgePoints( int edge, int orgPt, int dstPt );\n    void splice( int edgeA, int edgeB );\n    int connectEdges( int edgeA, int edgeB );\n    void swapEdges( int edge );\n    int isRightOf(Point2f pt, int edge) const;\n    void calcVoronoi();\n    void clearVoronoi();\n    void checkSubdiv() const;\n\n    struct CV_EXPORTS Vertex\n    {\n        Vertex();\n        Vertex(Point2f pt, bool _isvirtual, int _firstEdge=0);\n        bool isvirtual() const;\n        bool isfree() const;\n        int firstEdge;\n        int type;\n        Point2f pt;\n    };\n    struct CV_EXPORTS QuadEdge\n    {\n        QuadEdge();\n        QuadEdge(int edgeidx);\n        bool isfree() const;\n        int next[4];\n        int pt[4];\n    };\n\n    vector<Vertex> vtx;\n    vector<QuadEdge> qedges;\n    int freeQEdge;\n    int freePoint;\n    bool validGeometry;\n\n    int recentEdge;\n    Point2f topLeft;\n    Point2f bottomRight;\n};\n\n}\n\n#endif /* __cplusplus */\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/imgproc/imgproc_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_IMGPROC_C_H__\n#define __OPENCV_IMGPROC_IMGPROC_C_H__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/imgproc/types_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*********************** Background statistics accumulation *****************************/\n\n/* Adds image to accumulator */\nCVAPI(void)  cvAcc( const CvArr* image, CvArr* sum,\n                   const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Adds squared image to accumulator */\nCVAPI(void)  cvSquareAcc( const CvArr* image, CvArr* sqsum,\n                         const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Adds a product of two images to accumulator */\nCVAPI(void)  cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc,\n                           const CvArr* mask CV_DEFAULT(NULL) );\n\n/* Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha */\nCVAPI(void)  cvRunningAvg( const CvArr* image, CvArr* acc, double alpha,\n                          const CvArr* mask CV_DEFAULT(NULL) );\n\n/****************************************************************************************\\\n*                                    Image Processing                                    *\n\\****************************************************************************************/\n\n/* Copies source 2D array inside of the larger destination array and\n   makes a border of the specified type (IPL_BORDER_*) around the copied area. */\nCVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,\n                              int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0)));\n\n/* Smoothes array (removes noise) */\nCVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,\n                      int smoothtype CV_DEFAULT(CV_GAUSSIAN),\n                      int size1 CV_DEFAULT(3),\n                      int size2 CV_DEFAULT(0),\n                      double sigma1 CV_DEFAULT(0),\n                      double sigma2 CV_DEFAULT(0));\n\n/* Convolves the image with the kernel */\nCVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel,\n                        CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)));\n\n/* Finds integral image: SUM(X,Y) = sum(x<X,y<Y)I(x,y) */\nCVAPI(void) cvIntegral( const CvArr* image, CvArr* sum,\n                       CvArr* sqsum CV_DEFAULT(NULL),\n                       CvArr* tilted_sum CV_DEFAULT(NULL));\n\n/*\n   Smoothes the input image with gaussian kernel and then down-samples it.\n   dst_width = floor(src_width/2)[+1],\n   dst_height = floor(src_height/2)[+1]\n*/\nCVAPI(void)  cvPyrDown( const CvArr* src, CvArr* dst,\n                        int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/*\n   Up-samples image and smoothes the result with gaussian kernel.\n   dst_width = src_width*2,\n   dst_height = src_height*2\n*/\nCVAPI(void)  cvPyrUp( const CvArr* src, CvArr* dst,\n                      int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/* Builds pyramid for an image */\nCVAPI(CvMat**) cvCreatePyramid( const CvArr* img, int extra_layers, double rate,\n                                const CvSize* layer_sizes CV_DEFAULT(0),\n                                CvArr* bufarr CV_DEFAULT(0),\n                                int calc CV_DEFAULT(1),\n                                int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );\n\n/* Releases pyramid */\nCVAPI(void)  cvReleasePyramid( CvMat*** pyramid, int extra_layers );\n\n\n/* Filters image using meanshift algorithm */\nCVAPI(void) cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst,\n    double sp, double sr, int max_level CV_DEFAULT(1),\n    CvTermCriteria termcrit CV_DEFAULT(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1)));\n\n/* Segments image using seed \"markers\" */\nCVAPI(void) cvWatershed( const CvArr* image, CvArr* markers );\n\n/* Calculates an image derivative using generalized Sobel\n   (aperture_size = 1,3,5,7) or Scharr (aperture_size = -1) operator.\n   Scharr can be used only for the first dx or dy derivative */\nCVAPI(void) cvSobel( const CvArr* src, CvArr* dst,\n                    int xorder, int yorder,\n                    int aperture_size CV_DEFAULT(3));\n\n/* Calculates the image Laplacian: (d2/dx + d2/dy)I */\nCVAPI(void) cvLaplace( const CvArr* src, CvArr* dst,\n                      int aperture_size CV_DEFAULT(3) );\n\n/* Converts input array pixels from one color space to another */\nCVAPI(void)  cvCvtColor( const CvArr* src, CvArr* dst, int code );\n\n\n/* Resizes image (input array is resized to fit the destination array) */\nCVAPI(void)  cvResize( const CvArr* src, CvArr* dst,\n                       int interpolation CV_DEFAULT( CV_INTER_LINEAR ));\n\n/* Warps image with affine transform */\nCVAPI(void)  cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix,\n                           int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                           CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/* Computes affine transform matrix for mapping src[i] to dst[i] (i=0,1,2) */\nCVAPI(CvMat*) cvGetAffineTransform( const CvPoint2D32f * src,\n                                    const CvPoint2D32f * dst,\n                                    CvMat * map_matrix );\n\n/* Computes rotation_matrix matrix */\nCVAPI(CvMat*)  cv2DRotationMatrix( CvPoint2D32f center, double angle,\n                                   double scale, CvMat* map_matrix );\n\n/* Warps image with perspective (projective) transform */\nCVAPI(void)  cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,\n                                int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                                CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/* Computes perspective transform matrix for mapping src[i] to dst[i] (i=0,1,2,3) */\nCVAPI(CvMat*) cvGetPerspectiveTransform( const CvPoint2D32f* src,\n                                         const CvPoint2D32f* dst,\n                                         CvMat* map_matrix );\n\n/* Performs generic geometric transformation using the specified coordinate maps */\nCVAPI(void)  cvRemap( const CvArr* src, CvArr* dst,\n                      const CvArr* mapx, const CvArr* mapy,\n                      int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),\n                      CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );\n\n/* Converts mapx & mapy from floating-point to integer formats for cvRemap */\nCVAPI(void)  cvConvertMaps( const CvArr* mapx, const CvArr* mapy,\n                            CvArr* mapxy, CvArr* mapalpha );\n\n/* Performs forward or inverse log-polar image transform */\nCVAPI(void)  cvLogPolar( const CvArr* src, CvArr* dst,\n                         CvPoint2D32f center, double M,\n                         int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));\n\n/* Performs forward or inverse linear-polar image transform */\nCVAPI(void)  cvLinearPolar( const CvArr* src, CvArr* dst,\n                         CvPoint2D32f center, double maxRadius,\n                         int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));\n\n/* Transforms the input image to compensate lens distortion */\nCVAPI(void) cvUndistort2( const CvArr* src, CvArr* dst,\n                          const CvMat* camera_matrix,\n                          const CvMat* distortion_coeffs,\n                          const CvMat* new_camera_matrix CV_DEFAULT(0) );\n\n/* Computes transformation map from intrinsic camera parameters\n   that can used by cvRemap */\nCVAPI(void) cvInitUndistortMap( const CvMat* camera_matrix,\n                                const CvMat* distortion_coeffs,\n                                CvArr* mapx, CvArr* mapy );\n\n/* Computes undistortion+rectification map for a head of stereo camera */\nCVAPI(void) cvInitUndistortRectifyMap( const CvMat* camera_matrix,\n                                       const CvMat* dist_coeffs,\n                                       const CvMat *R, const CvMat* new_camera_matrix,\n                                       CvArr* mapx, CvArr* mapy );\n\n/* Computes the original (undistorted) feature coordinates\n   from the observed (distorted) coordinates */\nCVAPI(void) cvUndistortPoints( const CvMat* src, CvMat* dst,\n                               const CvMat* camera_matrix,\n                               const CvMat* dist_coeffs,\n                               const CvMat* R CV_DEFAULT(0),\n                               const CvMat* P CV_DEFAULT(0));\n\n/* creates structuring element used for morphological operations */\nCVAPI(IplConvKernel*)  cvCreateStructuringElementEx(\n            int cols, int  rows, int  anchor_x, int  anchor_y,\n            int shape, int* values CV_DEFAULT(NULL) );\n\n/* releases structuring element */\nCVAPI(void)  cvReleaseStructuringElement( IplConvKernel** element );\n\n/* erodes input image (applies minimum filter) one or more times.\n   If element pointer is NULL, 3x3 rectangular element is used */\nCVAPI(void)  cvErode( const CvArr* src, CvArr* dst,\n                      IplConvKernel* element CV_DEFAULT(NULL),\n                      int iterations CV_DEFAULT(1) );\n\n/* dilates input image (applies maximum filter) one or more times.\n   If element pointer is NULL, 3x3 rectangular element is used */\nCVAPI(void)  cvDilate( const CvArr* src, CvArr* dst,\n                       IplConvKernel* element CV_DEFAULT(NULL),\n                       int iterations CV_DEFAULT(1) );\n\n/* Performs complex morphological transformation */\nCVAPI(void)  cvMorphologyEx( const CvArr* src, CvArr* dst,\n                             CvArr* temp, IplConvKernel* element,\n                             int operation, int iterations CV_DEFAULT(1) );\n\n/* Calculates all spatial and central moments up to the 3rd order */\nCVAPI(void) cvMoments( const CvArr* arr, CvMoments* moments, int binary CV_DEFAULT(0));\n\n/* Retrieve particular spatial, central or normalized central moments */\nCVAPI(double)  cvGetSpatialMoment( CvMoments* moments, int x_order, int y_order );\nCVAPI(double)  cvGetCentralMoment( CvMoments* moments, int x_order, int y_order );\nCVAPI(double)  cvGetNormalizedCentralMoment( CvMoments* moments,\n                                             int x_order, int y_order );\n\n/* Calculates 7 Hu's invariants from precalculated spatial and central moments */\nCVAPI(void) cvGetHuMoments( CvMoments*  moments, CvHuMoments*  hu_moments );\n\n/*********************************** data sampling **************************************/\n\n/* Fetches pixels that belong to the specified line segment and stores them to the buffer.\n   Returns the number of retrieved points. */\nCVAPI(int)  cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* buffer,\n                          int connectivity CV_DEFAULT(8));\n\n/* Retrieves the rectangular image region with specified center from the input array.\n dst(x,y) <- src(x + center.x - dst_width/2, y + center.y - dst_height/2).\n Values of pixels with fractional coordinates are retrieved using bilinear interpolation*/\nCVAPI(void)  cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );\n\n\n/* Retrieves quadrangle from the input array.\n    matrixarr = ( a11  a12 | b1 )   dst(x,y) <- src(A[x y]' + b)\n                ( a21  a22 | b2 )   (bilinear interpolation is used to retrieve pixels\n                                     with fractional coordinates)\n*/\nCVAPI(void)  cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,\n                                    const CvMat* map_matrix );\n\n/* Measures similarity between template and overlapped windows in the source image\n   and fills the resultant image with the measurements */\nCVAPI(void)  cvMatchTemplate( const CvArr* image, const CvArr* templ,\n                              CvArr* result, int method );\n\n/* Computes earth mover distance between\n   two weighted point sets (called signatures) */\nCVAPI(float)  cvCalcEMD2( const CvArr* signature1,\n                          const CvArr* signature2,\n                          int distance_type,\n                          CvDistanceFunction distance_func CV_DEFAULT(NULL),\n                          const CvArr* cost_matrix CV_DEFAULT(NULL),\n                          CvArr* flow CV_DEFAULT(NULL),\n                          float* lower_bound CV_DEFAULT(NULL),\n                          void* userdata CV_DEFAULT(NULL));\n\n/****************************************************************************************\\\n*                              Contours retrieving                                       *\n\\****************************************************************************************/\n\n/* Retrieves outer and optionally inner boundaries of white (non-zero) connected\n   components in the black (zero) background */\nCVAPI(int)  cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,\n                            int header_size CV_DEFAULT(sizeof(CvContour)),\n                            int mode CV_DEFAULT(CV_RETR_LIST),\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/* Initializes contour retrieving process.\n   Calls cvStartFindContours.\n   Calls cvFindNextContour until null pointer is returned\n   or some other condition becomes true.\n   Calls cvEndFindContours at the end. */\nCVAPI(CvContourScanner)  cvStartFindContours( CvArr* image, CvMemStorage* storage,\n                            int header_size CV_DEFAULT(sizeof(CvContour)),\n                            int mode CV_DEFAULT(CV_RETR_LIST),\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n/* Retrieves next contour */\nCVAPI(CvSeq*)  cvFindNextContour( CvContourScanner scanner );\n\n\n/* Substitutes the last retrieved contour with the new one\n   (if the substitutor is null, the last retrieved contour is removed from the tree) */\nCVAPI(void)   cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour );\n\n\n/* Releases contour scanner and returns pointer to the first outer contour */\nCVAPI(CvSeq*)  cvEndFindContours( CvContourScanner* scanner );\n\n/* Approximates a single Freeman chain or a tree of chains to polygonal curves */\nCVAPI(CvSeq*) cvApproxChains( CvSeq* src_seq, CvMemStorage* storage,\n                            int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),\n                            double parameter CV_DEFAULT(0),\n                            int  minimal_perimeter CV_DEFAULT(0),\n                            int  recursive CV_DEFAULT(0));\n\n/* Initializes Freeman chain reader.\n   The reader is used to iteratively get coordinates of all the chain points.\n   If the Freeman codes should be read as is, a simple sequence reader should be used */\nCVAPI(void) cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader );\n\n/* Retrieves the next chain point */\nCVAPI(CvPoint) cvReadChainPoint( CvChainPtReader* reader );\n\n\n/****************************************************************************************\\\n*                            Contour Processing and Shape Analysis                       *\n\\****************************************************************************************/\n\n/* Approximates a single polygonal curve (contour) or\n   a tree of polygonal curves (contours) */\nCVAPI(CvSeq*)  cvApproxPoly( const void* src_seq,\n                             int header_size, CvMemStorage* storage,\n                             int method, double eps,\n                             int recursive CV_DEFAULT(0));\n\n/* Calculates perimeter of a contour or length of a part of contour */\nCVAPI(double)  cvArcLength( const void* curve,\n                            CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),\n                            int is_closed CV_DEFAULT(-1));\n\nCV_INLINE double cvContourPerimeter( const void* contour )\n{\n    return cvArcLength( contour, CV_WHOLE_SEQ, 1 );\n}\n\n\n/* Calculates contour bounding rectangle (update=1) or\n   just retrieves pre-calculated rectangle (update=0) */\nCVAPI(CvRect)  cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );\n\n/* Calculates area of a contour or contour segment */\nCVAPI(double)  cvContourArea( const CvArr* contour,\n                              CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),\n                              int oriented CV_DEFAULT(0));\n\n/* Finds minimum area rotated rectangle bounding a set of points */\nCVAPI(CvBox2D)  cvMinAreaRect2( const CvArr* points,\n                                CvMemStorage* storage CV_DEFAULT(NULL));\n\n/* Finds minimum enclosing circle for a set of points */\nCVAPI(int)  cvMinEnclosingCircle( const CvArr* points,\n                                  CvPoint2D32f* center, float* radius );\n\n/* Compares two contours by matching their moments */\nCVAPI(double)  cvMatchShapes( const void* object1, const void* object2,\n                              int method, double parameter CV_DEFAULT(0));\n\n/* Calculates exact convex hull of 2d point set */\nCVAPI(CvSeq*) cvConvexHull2( const CvArr* input,\n                             void* hull_storage CV_DEFAULT(NULL),\n                             int orientation CV_DEFAULT(CV_CLOCKWISE),\n                             int return_points CV_DEFAULT(0));\n\n/* Checks whether the contour is convex or not (returns 1 if convex, 0 if not) */\nCVAPI(int)  cvCheckContourConvexity( const CvArr* contour );\n\n\n/* Finds convexity defects for the contour */\nCVAPI(CvSeq*)  cvConvexityDefects( const CvArr* contour, const CvArr* convexhull,\n                                   CvMemStorage* storage CV_DEFAULT(NULL));\n\n/* Fits ellipse into a set of 2d points */\nCVAPI(CvBox2D) cvFitEllipse2( const CvArr* points );\n\n/* Finds minimum rectangle containing two given rectangles */\nCVAPI(CvRect)  cvMaxRect( const CvRect* rect1, const CvRect* rect2 );\n\n/* Finds coordinates of the box vertices */\nCVAPI(void) cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] );\n\n/* Initializes sequence header for a matrix (column or row vector) of points -\n   a wrapper for cvMakeSeqHeaderForArray (it does not initialize bounding rectangle!!!) */\nCVAPI(CvSeq*) cvPointSeqFromMat( int seq_kind, const CvArr* mat,\n                                 CvContour* contour_header,\n                                 CvSeqBlock* block );\n\n/* Checks whether the point is inside polygon, outside, on an edge (at a vertex).\n   Returns positive, negative or zero value, correspondingly.\n   Optionally, measures a signed distance between\n   the point and the nearest polygon edge (measure_dist=1) */\nCVAPI(double) cvPointPolygonTest( const CvArr* contour,\n                                  CvPoint2D32f pt, int measure_dist );\n\n/****************************************************************************************\\\n*                                  Histogram functions                                   *\n\\****************************************************************************************/\n\n/* Creates new histogram */\nCVAPI(CvHistogram*)  cvCreateHist( int dims, int* sizes, int type,\n                                   float** ranges CV_DEFAULT(NULL),\n                                   int uniform CV_DEFAULT(1));\n\n/* Assignes histogram bin ranges */\nCVAPI(void)  cvSetHistBinRanges( CvHistogram* hist, float** ranges,\n                                int uniform CV_DEFAULT(1));\n\n/* Creates histogram header for array */\nCVAPI(CvHistogram*)  cvMakeHistHeaderForArray(\n                            int  dims, int* sizes, CvHistogram* hist,\n                            float* data, float** ranges CV_DEFAULT(NULL),\n                            int uniform CV_DEFAULT(1));\n\n/* Releases histogram */\nCVAPI(void)  cvReleaseHist( CvHistogram** hist );\n\n/* Clears all the histogram bins */\nCVAPI(void)  cvClearHist( CvHistogram* hist );\n\n/* Finds indices and values of minimum and maximum histogram bins */\nCVAPI(void)  cvGetMinMaxHistValue( const CvHistogram* hist,\n                                   float* min_value, float* max_value,\n                                   int* min_idx CV_DEFAULT(NULL),\n                                   int* max_idx CV_DEFAULT(NULL));\n\n\n/* Normalizes histogram by dividing all bins by sum of the bins, multiplied by <factor>.\n   After that sum of histogram bins is equal to <factor> */\nCVAPI(void)  cvNormalizeHist( CvHistogram* hist, double factor );\n\n\n/* Clear all histogram bins that are below the threshold */\nCVAPI(void)  cvThreshHist( CvHistogram* hist, double threshold );\n\n\n/* Compares two histogram */\nCVAPI(double)  cvCompareHist( const CvHistogram* hist1,\n                              const CvHistogram* hist2,\n                              int method);\n\n/* Copies one histogram to another. Destination histogram is created if\n   the destination pointer is NULL */\nCVAPI(void)  cvCopyHist( const CvHistogram* src, CvHistogram** dst );\n\n\n/* Calculates bayesian probabilistic histograms\n   (each or src and dst is an array of <number> histograms */\nCVAPI(void)  cvCalcBayesianProb( CvHistogram** src, int number,\n                                CvHistogram** dst);\n\n/* Calculates array histogram */\nCVAPI(void)  cvCalcArrHist( CvArr** arr, CvHistogram* hist,\n                            int accumulate CV_DEFAULT(0),\n                            const CvArr* mask CV_DEFAULT(NULL) );\n\nCV_INLINE  void  cvCalcHist( IplImage** image, CvHistogram* hist,\n                             int accumulate CV_DEFAULT(0),\n                             const CvArr* mask CV_DEFAULT(NULL) )\n{\n    cvCalcArrHist( (CvArr**)image, hist, accumulate, mask );\n}\n\n/* Calculates back project */\nCVAPI(void)  cvCalcArrBackProject( CvArr** image, CvArr* dst,\n                                   const CvHistogram* hist );\n#define  cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist)\n\n\n/* Does some sort of template matching but compares histograms of\n   template and each window location */\nCVAPI(void)  cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range,\n                                        CvHistogram* hist, int method,\n                                        double factor );\n#define  cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) \\\n     cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor )\n\n\n/* calculates probabilistic density (divides one histogram by another) */\nCVAPI(void)  cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2,\n                                CvHistogram* dst_hist, double scale CV_DEFAULT(255) );\n\n/* equalizes histogram of 8-bit single-channel image */\nCVAPI(void)  cvEqualizeHist( const CvArr* src, CvArr* dst );\n\n\n/* Applies distance transform to binary image */\nCVAPI(void)  cvDistTransform( const CvArr* src, CvArr* dst,\n                              int distance_type CV_DEFAULT(CV_DIST_L2),\n                              int mask_size CV_DEFAULT(3),\n                              const float* mask CV_DEFAULT(NULL),\n                              CvArr* labels CV_DEFAULT(NULL),\n                              int labelType CV_DEFAULT(CV_DIST_LABEL_CCOMP));\n\n\n/* Applies fixed-level threshold to grayscale image.\n   This is a basic operation applied before retrieving contours */\nCVAPI(double)  cvThreshold( const CvArr*  src, CvArr*  dst,\n                            double  threshold, double  max_value,\n                            int threshold_type );\n\n/* Applies adaptive threshold to grayscale image.\n   The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and\n   CV_ADAPTIVE_THRESH_GAUSSIAN_C are:\n   neighborhood size (3, 5, 7 etc.),\n   and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...) */\nCVAPI(void)  cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,\n                                  int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),\n                                  int threshold_type CV_DEFAULT(CV_THRESH_BINARY),\n                                  int block_size CV_DEFAULT(3),\n                                  double param1 CV_DEFAULT(5));\n\n/* Fills the connected component until the color difference gets large enough */\nCVAPI(void)  cvFloodFill( CvArr* image, CvPoint seed_point,\n                          CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)),\n                          CvScalar up_diff CV_DEFAULT(cvScalarAll(0)),\n                          CvConnectedComp* comp CV_DEFAULT(NULL),\n                          int flags CV_DEFAULT(4),\n                          CvArr* mask CV_DEFAULT(NULL));\n\n/****************************************************************************************\\\n*                                  Feature detection                                     *\n\\****************************************************************************************/\n\n/* Runs canny edge detector */\nCVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1,\n                      double threshold2, int  aperture_size CV_DEFAULT(3) );\n\n/* Calculates constraint image for corner detection\n   Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy.\n   Applying threshold to the result gives coordinates of corners */\nCVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners,\n                               int aperture_size CV_DEFAULT(3) );\n\n/* Calculates eigen values and vectors of 2x2\n   gradient covariation matrix at every image pixel */\nCVAPI(void)  cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,\n                                       int block_size, int aperture_size CV_DEFAULT(3) );\n\n/* Calculates minimal eigenvalue for 2x2 gradient covariation matrix at\n   every image pixel */\nCVAPI(void)  cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval,\n                                  int block_size, int aperture_size CV_DEFAULT(3) );\n\n/* Harris corner detector:\n   Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel */\nCVAPI(void)  cvCornerHarris( const CvArr* image, CvArr* harris_response,\n                             int block_size, int aperture_size CV_DEFAULT(3),\n                             double k CV_DEFAULT(0.04) );\n\n/* Adjust corner position using some sort of gradient search */\nCVAPI(void)  cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,\n                                 int count, CvSize win, CvSize zero_zone,\n                                 CvTermCriteria  criteria );\n\n/* Finds a sparse set of points within the selected region\n   that seem to be easy to track */\nCVAPI(void)  cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image,\n                                    CvArr* temp_image, CvPoint2D32f* corners,\n                                    int* corner_count, double  quality_level,\n                                    double  min_distance,\n                                    const CvArr* mask CV_DEFAULT(NULL),\n                                    int block_size CV_DEFAULT(3),\n                                    int use_harris CV_DEFAULT(0),\n                                    double k CV_DEFAULT(0.04) );\n\n/* Finds lines on binary image using one of several methods.\n   line_storage is either memory storage or 1 x <max number of lines> CvMat, its\n   number of columns is changed by the function.\n   method is one of CV_HOUGH_*;\n   rho, theta and threshold are used for each of those methods;\n   param1 ~ line length, param2 ~ line gap - for probabilistic,\n   param1 ~ srn, param2 ~ stn - for multi-scale */\nCVAPI(CvSeq*)  cvHoughLines2( CvArr* image, void* line_storage, int method,\n                              double rho, double theta, int threshold,\n                              double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0));\n\n/* Finds circles in the image */\nCVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage,\n                              int method, double dp, double min_dist,\n                              double param1 CV_DEFAULT(100),\n                              double param2 CV_DEFAULT(100),\n                              int min_radius CV_DEFAULT(0),\n                              int max_radius CV_DEFAULT(0));\n\n/* Fits a line into set of 2d or 3d points in a robust way (M-estimator technique) */\nCVAPI(void)  cvFitLine( const CvArr* points, int dist_type, double param,\n                        double reps, double aeps, float* line );\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/imgproc/types_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_IMGPROC_TYPES_C_H__\n#define __OPENCV_IMGPROC_TYPES_C_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Connected component structure */\ntypedef struct CvConnectedComp\n{\n    double area;    /* area of the connected component  */\n    CvScalar value; /* average color of the connected component */\n    CvRect rect;    /* ROI of the component  */\n    CvSeq* contour; /* optional component boundary\n                      (the contour might have child contours corresponding to the holes)*/\n}\nCvConnectedComp;\n\n/* Image smooth methods */\nenum\n{\n    CV_BLUR_NO_SCALE =0,\n    CV_BLUR  =1,\n    CV_GAUSSIAN  =2,\n    CV_MEDIAN =3,\n    CV_BILATERAL =4\n};\n\n/* Filters used in pyramid decomposition */\nenum\n{\n    CV_GAUSSIAN_5x5 = 7\n};\n\n/* Special filters */\nenum\n{\n    CV_SCHARR =-1,\n    CV_MAX_SOBEL_KSIZE =7\n};\n\n/* Constants for color conversion */\nenum\n{\n    CV_BGR2BGRA    =0,\n    CV_RGB2RGBA    =CV_BGR2BGRA,\n\n    CV_BGRA2BGR    =1,\n    CV_RGBA2RGB    =CV_BGRA2BGR,\n\n    CV_BGR2RGBA    =2,\n    CV_RGB2BGRA    =CV_BGR2RGBA,\n\n    CV_RGBA2BGR    =3,\n    CV_BGRA2RGB    =CV_RGBA2BGR,\n\n    CV_BGR2RGB     =4,\n    CV_RGB2BGR     =CV_BGR2RGB,\n\n    CV_BGRA2RGBA   =5,\n    CV_RGBA2BGRA   =CV_BGRA2RGBA,\n\n    CV_BGR2GRAY    =6,\n    CV_RGB2GRAY    =7,\n    CV_GRAY2BGR    =8,\n    CV_GRAY2RGB    =CV_GRAY2BGR,\n    CV_GRAY2BGRA   =9,\n    CV_GRAY2RGBA   =CV_GRAY2BGRA,\n    CV_BGRA2GRAY   =10,\n    CV_RGBA2GRAY   =11,\n\n    CV_BGR2BGR565  =12,\n    CV_RGB2BGR565  =13,\n    CV_BGR5652BGR  =14,\n    CV_BGR5652RGB  =15,\n    CV_BGRA2BGR565 =16,\n    CV_RGBA2BGR565 =17,\n    CV_BGR5652BGRA =18,\n    CV_BGR5652RGBA =19,\n\n    CV_GRAY2BGR565 =20,\n    CV_BGR5652GRAY =21,\n\n    CV_BGR2BGR555  =22,\n    CV_RGB2BGR555  =23,\n    CV_BGR5552BGR  =24,\n    CV_BGR5552RGB  =25,\n    CV_BGRA2BGR555 =26,\n    CV_RGBA2BGR555 =27,\n    CV_BGR5552BGRA =28,\n    CV_BGR5552RGBA =29,\n\n    CV_GRAY2BGR555 =30,\n    CV_BGR5552GRAY =31,\n\n    CV_BGR2XYZ     =32,\n    CV_RGB2XYZ     =33,\n    CV_XYZ2BGR     =34,\n    CV_XYZ2RGB     =35,\n\n    CV_BGR2YCrCb   =36,\n    CV_RGB2YCrCb   =37,\n    CV_YCrCb2BGR   =38,\n    CV_YCrCb2RGB   =39,\n\n    CV_BGR2HSV     =40,\n    CV_RGB2HSV     =41,\n\n    CV_BGR2Lab     =44,\n    CV_RGB2Lab     =45,\n\n    CV_BayerBG2BGR =46,\n    CV_BayerGB2BGR =47,\n    CV_BayerRG2BGR =48,\n    CV_BayerGR2BGR =49,\n\n    CV_BayerBG2RGB =CV_BayerRG2BGR,\n    CV_BayerGB2RGB =CV_BayerGR2BGR,\n    CV_BayerRG2RGB =CV_BayerBG2BGR,\n    CV_BayerGR2RGB =CV_BayerGB2BGR,\n\n    CV_BGR2Luv     =50,\n    CV_RGB2Luv     =51,\n    CV_BGR2HLS     =52,\n    CV_RGB2HLS     =53,\n\n    CV_HSV2BGR     =54,\n    CV_HSV2RGB     =55,\n\n    CV_Lab2BGR     =56,\n    CV_Lab2RGB     =57,\n    CV_Luv2BGR     =58,\n    CV_Luv2RGB     =59,\n    CV_HLS2BGR     =60,\n    CV_HLS2RGB     =61,\n\n    CV_BayerBG2BGR_VNG =62,\n    CV_BayerGB2BGR_VNG =63,\n    CV_BayerRG2BGR_VNG =64,\n    CV_BayerGR2BGR_VNG =65,\n\n    CV_BayerBG2RGB_VNG =CV_BayerRG2BGR_VNG,\n    CV_BayerGB2RGB_VNG =CV_BayerGR2BGR_VNG,\n    CV_BayerRG2RGB_VNG =CV_BayerBG2BGR_VNG,\n    CV_BayerGR2RGB_VNG =CV_BayerGB2BGR_VNG,\n\n    CV_BGR2HSV_FULL = 66,\n    CV_RGB2HSV_FULL = 67,\n    CV_BGR2HLS_FULL = 68,\n    CV_RGB2HLS_FULL = 69,\n\n    CV_HSV2BGR_FULL = 70,\n    CV_HSV2RGB_FULL = 71,\n    CV_HLS2BGR_FULL = 72,\n    CV_HLS2RGB_FULL = 73,\n\n    CV_LBGR2Lab     = 74,\n    CV_LRGB2Lab     = 75,\n    CV_LBGR2Luv     = 76,\n    CV_LRGB2Luv     = 77,\n\n    CV_Lab2LBGR     = 78,\n    CV_Lab2LRGB     = 79,\n    CV_Luv2LBGR     = 80,\n    CV_Luv2LRGB     = 81,\n\n    CV_BGR2YUV      = 82,\n    CV_RGB2YUV      = 83,\n    CV_YUV2BGR      = 84,\n    CV_YUV2RGB      = 85,\n\n    CV_BayerBG2GRAY = 86,\n    CV_BayerGB2GRAY = 87,\n    CV_BayerRG2GRAY = 88,\n    CV_BayerGR2GRAY = 89,\n\n    //YUV 4:2:0 formats family\n    CV_YUV2RGB_NV12 = 90,\n    CV_YUV2BGR_NV12 = 91,\n    CV_YUV2RGB_NV21 = 92,\n    CV_YUV2BGR_NV21 = 93,\n    CV_YUV420sp2RGB = CV_YUV2RGB_NV21,\n    CV_YUV420sp2BGR = CV_YUV2BGR_NV21,\n\n    CV_YUV2RGBA_NV12 = 94,\n    CV_YUV2BGRA_NV12 = 95,\n    CV_YUV2RGBA_NV21 = 96,\n    CV_YUV2BGRA_NV21 = 97,\n    CV_YUV420sp2RGBA = CV_YUV2RGBA_NV21,\n    CV_YUV420sp2BGRA = CV_YUV2BGRA_NV21,\n\n    CV_YUV2RGB_YV12 = 98,\n    CV_YUV2BGR_YV12 = 99,\n    CV_YUV2RGB_IYUV = 100,\n    CV_YUV2BGR_IYUV = 101,\n    CV_YUV2RGB_I420 = CV_YUV2RGB_IYUV,\n    CV_YUV2BGR_I420 = CV_YUV2BGR_IYUV,\n    CV_YUV420p2RGB = CV_YUV2RGB_YV12,\n    CV_YUV420p2BGR = CV_YUV2BGR_YV12,\n\n    CV_YUV2RGBA_YV12 = 102,\n    CV_YUV2BGRA_YV12 = 103,\n    CV_YUV2RGBA_IYUV = 104,\n    CV_YUV2BGRA_IYUV = 105,\n    CV_YUV2RGBA_I420 = CV_YUV2RGBA_IYUV,\n    CV_YUV2BGRA_I420 = CV_YUV2BGRA_IYUV,\n    CV_YUV420p2RGBA = CV_YUV2RGBA_YV12,\n    CV_YUV420p2BGRA = CV_YUV2BGRA_YV12,\n\n    CV_YUV2GRAY_420 = 106,\n    CV_YUV2GRAY_NV21 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_NV12 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_YV12 = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_IYUV = CV_YUV2GRAY_420,\n    CV_YUV2GRAY_I420 = CV_YUV2GRAY_420,\n    CV_YUV420sp2GRAY = CV_YUV2GRAY_420,\n    CV_YUV420p2GRAY = CV_YUV2GRAY_420,\n\n    //YUV 4:2:2 formats family\n    CV_YUV2RGB_UYVY = 107,\n    CV_YUV2BGR_UYVY = 108,\n    //CV_YUV2RGB_VYUY = 109,\n    //CV_YUV2BGR_VYUY = 110,\n    CV_YUV2RGB_Y422 = CV_YUV2RGB_UYVY,\n    CV_YUV2BGR_Y422 = CV_YUV2BGR_UYVY,\n    CV_YUV2RGB_UYNV = CV_YUV2RGB_UYVY,\n    CV_YUV2BGR_UYNV = CV_YUV2BGR_UYVY,\n\n    CV_YUV2RGBA_UYVY = 111,\n    CV_YUV2BGRA_UYVY = 112,\n    //CV_YUV2RGBA_VYUY = 113,\n    //CV_YUV2BGRA_VYUY = 114,\n    CV_YUV2RGBA_Y422 = CV_YUV2RGBA_UYVY,\n    CV_YUV2BGRA_Y422 = CV_YUV2BGRA_UYVY,\n    CV_YUV2RGBA_UYNV = CV_YUV2RGBA_UYVY,\n    CV_YUV2BGRA_UYNV = CV_YUV2BGRA_UYVY,\n\n    CV_YUV2RGB_YUY2 = 115,\n    CV_YUV2BGR_YUY2 = 116,\n    CV_YUV2RGB_YVYU = 117,\n    CV_YUV2BGR_YVYU = 118,\n    CV_YUV2RGB_YUYV = CV_YUV2RGB_YUY2,\n    CV_YUV2BGR_YUYV = CV_YUV2BGR_YUY2,\n    CV_YUV2RGB_YUNV = CV_YUV2RGB_YUY2,\n    CV_YUV2BGR_YUNV = CV_YUV2BGR_YUY2,\n\n    CV_YUV2RGBA_YUY2 = 119,\n    CV_YUV2BGRA_YUY2 = 120,\n    CV_YUV2RGBA_YVYU = 121,\n    CV_YUV2BGRA_YVYU = 122,\n    CV_YUV2RGBA_YUYV = CV_YUV2RGBA_YUY2,\n    CV_YUV2BGRA_YUYV = CV_YUV2BGRA_YUY2,\n    CV_YUV2RGBA_YUNV = CV_YUV2RGBA_YUY2,\n    CV_YUV2BGRA_YUNV = CV_YUV2BGRA_YUY2,\n\n    CV_YUV2GRAY_UYVY = 123,\n    CV_YUV2GRAY_YUY2 = 124,\n    //CV_YUV2GRAY_VYUY = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_Y422 = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_UYNV = CV_YUV2GRAY_UYVY,\n    CV_YUV2GRAY_YVYU = CV_YUV2GRAY_YUY2,\n    CV_YUV2GRAY_YUYV = CV_YUV2GRAY_YUY2,\n    CV_YUV2GRAY_YUNV = CV_YUV2GRAY_YUY2,\n\n    // alpha premultiplication\n    CV_RGBA2mRGBA = 125,\n    CV_mRGBA2RGBA = 126,\n\n    CV_RGB2YUV_I420 = 127,\n    CV_BGR2YUV_I420 = 128,\n    CV_RGB2YUV_IYUV = CV_RGB2YUV_I420,\n    CV_BGR2YUV_IYUV = CV_BGR2YUV_I420,\n\n    CV_RGBA2YUV_I420 = 129,\n    CV_BGRA2YUV_I420 = 130,\n    CV_RGBA2YUV_IYUV = CV_RGBA2YUV_I420,\n    CV_BGRA2YUV_IYUV = CV_BGRA2YUV_I420,\n    CV_RGB2YUV_YV12  = 131,\n    CV_BGR2YUV_YV12  = 132,\n    CV_RGBA2YUV_YV12 = 133,\n    CV_BGRA2YUV_YV12 = 134,\n\n    CV_COLORCVT_MAX  = 135\n};\n\n\n/* Sub-pixel interpolation methods */\nenum\n{\n    CV_INTER_NN        =0,\n    CV_INTER_LINEAR    =1,\n    CV_INTER_CUBIC     =2,\n    CV_INTER_AREA      =3,\n    CV_INTER_LANCZOS4  =4\n};\n\n/* ... and other image warping flags */\nenum\n{\n    CV_WARP_FILL_OUTLIERS =8,\n    CV_WARP_INVERSE_MAP  =16\n};\n\n/* Shapes of a structuring element for morphological operations */\nenum\n{\n    CV_SHAPE_RECT      =0,\n    CV_SHAPE_CROSS     =1,\n    CV_SHAPE_ELLIPSE   =2,\n    CV_SHAPE_CUSTOM    =100\n};\n\n/* Morphological operations */\nenum\n{\n    CV_MOP_ERODE        =0,\n    CV_MOP_DILATE       =1,\n    CV_MOP_OPEN         =2,\n    CV_MOP_CLOSE        =3,\n    CV_MOP_GRADIENT     =4,\n    CV_MOP_TOPHAT       =5,\n    CV_MOP_BLACKHAT     =6\n};\n\n/* Spatial and central moments */\ntypedef struct CvMoments\n{\n    double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */\n    double  mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */\n    double  inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */\n}\nCvMoments;\n\n/* Hu invariants */\ntypedef struct CvHuMoments\n{\n    double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /* Hu invariants */\n}\nCvHuMoments;\n\n/* Template matching methods */\nenum\n{\n    CV_TM_SQDIFF        =0,\n    CV_TM_SQDIFF_NORMED =1,\n    CV_TM_CCORR         =2,\n    CV_TM_CCORR_NORMED  =3,\n    CV_TM_CCOEFF        =4,\n    CV_TM_CCOEFF_NORMED =5\n};\n\ntypedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param );\n\n/* Contour retrieval modes */\nenum\n{\n    CV_RETR_EXTERNAL=0,\n    CV_RETR_LIST=1,\n    CV_RETR_CCOMP=2,\n    CV_RETR_TREE=3,\n    CV_RETR_FLOODFILL=4\n};\n\n/* Contour approximation methods */\nenum\n{\n    CV_CHAIN_CODE=0,\n    CV_CHAIN_APPROX_NONE=1,\n    CV_CHAIN_APPROX_SIMPLE=2,\n    CV_CHAIN_APPROX_TC89_L1=3,\n    CV_CHAIN_APPROX_TC89_KCOS=4,\n    CV_LINK_RUNS=5\n};\n\n/*\nInternal structure that is used for sequental retrieving contours from the image.\nIt supports both hierarchical and plane variants of Suzuki algorithm.\n*/\ntypedef struct _CvContourScanner* CvContourScanner;\n\n/* Freeman chain reader state */\ntypedef struct CvChainPtReader\n{\n    CV_SEQ_READER_FIELDS()\n    char      code;\n    CvPoint   pt;\n    schar     deltas[8][2];\n}\nCvChainPtReader;\n\n/* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */\n#define  CV_INIT_3X3_DELTAS( deltas, step, nch )            \\\n    ((deltas)[0] =  (nch),  (deltas)[1] = -(step) + (nch),  \\\n     (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch),  \\\n     (deltas)[4] = -(nch),  (deltas)[5] =  (step) - (nch),  \\\n     (deltas)[6] =  (step), (deltas)[7] =  (step) + (nch))\n\n\n/****************************************************************************************\\\n*                              Planar subdivisions                                       *\n\\****************************************************************************************/\n\ntypedef size_t CvSubdiv2DEdge;\n\n#define CV_QUADEDGE2D_FIELDS()     \\\n    int flags;                     \\\n    struct CvSubdiv2DPoint* pt[4]; \\\n    CvSubdiv2DEdge  next[4];\n\n#define CV_SUBDIV2D_POINT_FIELDS()\\\n    int            flags;      \\\n    CvSubdiv2DEdge first;      \\\n    CvPoint2D32f   pt;         \\\n    int id;\n\n#define CV_SUBDIV2D_VIRTUAL_POINT_FLAG (1 << 30)\n\ntypedef struct CvQuadEdge2D\n{\n    CV_QUADEDGE2D_FIELDS()\n}\nCvQuadEdge2D;\n\ntypedef struct CvSubdiv2DPoint\n{\n    CV_SUBDIV2D_POINT_FIELDS()\n}\nCvSubdiv2DPoint;\n\n#define CV_SUBDIV2D_FIELDS()    \\\n    CV_GRAPH_FIELDS()           \\\n    int  quad_edges;            \\\n    int  is_geometry_valid;     \\\n    CvSubdiv2DEdge recent_edge; \\\n    CvPoint2D32f  topleft;      \\\n    CvPoint2D32f  bottomright;\n\ntypedef struct CvSubdiv2D\n{\n    CV_SUBDIV2D_FIELDS()\n}\nCvSubdiv2D;\n\n\ntypedef enum CvSubdiv2DPointLocation\n{\n    CV_PTLOC_ERROR = -2,\n    CV_PTLOC_OUTSIDE_RECT = -1,\n    CV_PTLOC_INSIDE = 0,\n    CV_PTLOC_VERTEX = 1,\n    CV_PTLOC_ON_EDGE = 2\n}\nCvSubdiv2DPointLocation;\n\ntypedef enum CvNextEdgeType\n{\n    CV_NEXT_AROUND_ORG   = 0x00,\n    CV_NEXT_AROUND_DST   = 0x22,\n    CV_PREV_AROUND_ORG   = 0x11,\n    CV_PREV_AROUND_DST   = 0x33,\n    CV_NEXT_AROUND_LEFT  = 0x13,\n    CV_NEXT_AROUND_RIGHT = 0x31,\n    CV_PREV_AROUND_LEFT  = 0x20,\n    CV_PREV_AROUND_RIGHT = 0x02\n}\nCvNextEdgeType;\n\n/* get the next edge with the same origin point (counterwise) */\n#define  CV_SUBDIV2D_NEXT_EDGE( edge )  (((CvQuadEdge2D*)((edge) & ~3))->next[(edge)&3])\n\n\n/* Contour approximation algorithms */\nenum\n{\n    CV_POLY_APPROX_DP = 0\n};\n\n/* Shape matching methods */\nenum\n{\n    CV_CONTOURS_MATCH_I1  =1,\n    CV_CONTOURS_MATCH_I2  =2,\n    CV_CONTOURS_MATCH_I3  =3\n};\n\n/* Shape orientation */\nenum\n{\n    CV_CLOCKWISE         =1,\n    CV_COUNTER_CLOCKWISE =2\n};\n\n\n/* Convexity defect */\ntypedef struct CvConvexityDefect\n{\n    CvPoint* start; /* point of the contour where the defect begins */\n    CvPoint* end; /* point of the contour where the defect ends */\n    CvPoint* depth_point; /* the farthest from the convex hull point within the defect */\n    float depth; /* distance between the farthest point and the convex hull */\n} CvConvexityDefect;\n\n\n/* Histogram comparison methods */\nenum\n{\n    CV_COMP_CORREL        =0,\n    CV_COMP_CHISQR        =1,\n    CV_COMP_INTERSECT     =2,\n    CV_COMP_BHATTACHARYYA =3,\n    CV_COMP_HELLINGER     =CV_COMP_BHATTACHARYYA\n};\n\n/* Mask size for distance transform */\nenum\n{\n    CV_DIST_MASK_3   =3,\n    CV_DIST_MASK_5   =5,\n    CV_DIST_MASK_PRECISE =0\n};\n\n/* Content of output label array: connected components or pixels */\nenum\n{\n  CV_DIST_LABEL_CCOMP = 0,\n  CV_DIST_LABEL_PIXEL = 1\n};\n\n/* Distance types for Distance Transform and M-estimators */\nenum\n{\n    CV_DIST_USER    =-1,  /* User defined distance */\n    CV_DIST_L1      =1,   /* distance = |x1-x2| + |y1-y2| */\n    CV_DIST_L2      =2,   /* the simple euclidean distance */\n    CV_DIST_C       =3,   /* distance = max(|x1-x2|,|y1-y2|) */\n    CV_DIST_L12     =4,   /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */\n    CV_DIST_FAIR    =5,   /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */\n    CV_DIST_WELSCH  =6,   /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */\n    CV_DIST_HUBER   =7    /* distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */\n};\n\n\n/* Threshold types */\nenum\n{\n    CV_THRESH_BINARY      =0,  /* value = value > threshold ? max_value : 0       */\n    CV_THRESH_BINARY_INV  =1,  /* value = value > threshold ? 0 : max_value       */\n    CV_THRESH_TRUNC       =2,  /* value = value > threshold ? threshold : value   */\n    CV_THRESH_TOZERO      =3,  /* value = value > threshold ? value : 0           */\n    CV_THRESH_TOZERO_INV  =4,  /* value = value > threshold ? 0 : value           */\n    CV_THRESH_MASK        =7,\n    CV_THRESH_OTSU        =8  /* use Otsu algorithm to choose the optimal threshold value;\n                                 combine the flag with one of the above CV_THRESH_* values */\n};\n\n/* Adaptive threshold methods */\nenum\n{\n    CV_ADAPTIVE_THRESH_MEAN_C  =0,\n    CV_ADAPTIVE_THRESH_GAUSSIAN_C  =1\n};\n\n/* FloodFill flags */\nenum\n{\n    CV_FLOODFILL_FIXED_RANGE =(1 << 16),\n    CV_FLOODFILL_MASK_ONLY   =(1 << 17)\n};\n\n\n/* Canny edge detector flags */\nenum\n{\n    CV_CANNY_L2_GRADIENT  =(1 << 31)\n};\n\n/* Variants of a Hough transform */\nenum\n{\n    CV_HOUGH_STANDARD =0,\n    CV_HOUGH_PROBABILISTIC =1,\n    CV_HOUGH_MULTI_SCALE =2,\n    CV_HOUGH_GRADIENT =3\n};\n\n\n/* Fast search data structures  */\nstruct CvFeatureTree;\nstruct CvLSH;\nstruct CvLSHOperations;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/legacy/blobtrack.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n\n#ifndef __OPENCV_VIDEOSURVEILLANCE_H__\n#define __OPENCV_VIDEOSURVEILLANCE_H__\n\n/* Turn off the functionality until cvaux/src/Makefile.am gets updated: */\n//#if _MSC_VER >= 1200\n\n#include \"opencv2/core/core_c.h\"\n#include <stdio.h>\n\n#if (defined _MSC_VER && _MSC_VER >= 1200) || defined __BORLANDC__\n#define cv_stricmp stricmp\n#define cv_strnicmp strnicmp\n#if defined WINCE\n#define strdup _strdup\n#define stricmp _stricmp\n#endif\n#elif defined __GNUC__ || defined __sun\n#define cv_stricmp strcasecmp\n#define cv_strnicmp strncasecmp\n#else\n#error Do not know how to make case-insensitive string comparison on this platform\n#endif\n\n//struct DefParam;\nstruct CvDefParam\n{\n    struct CvDefParam*    next;\n    char*               pName;\n    char*               pComment;\n    double*             pDouble;\n    double              Double;\n    float*              pFloat;\n    float               Float;\n    int*                pInt;\n    int                 Int;\n    char**              pStr;\n    char*               Str;\n};\n\nclass CV_EXPORTS CvVSModule\n{\nprivate: /* Internal data: */\n    CvDefParam*   m_pParamList;\n    char*       m_pModuleTypeName;\n    char*       m_pModuleName;\n    char*       m_pNickName;\nprotected:\n    int         m_Wnd;\npublic: /* Constructor and destructor: */\n    CvVSModule();\n    virtual ~CvVSModule();\nprivate: /* Internal functions: */\n    void    FreeParam(CvDefParam** pp);\n    CvDefParam* NewParam(const char* name);\n    CvDefParam* GetParamPtr(int index);\n    CvDefParam* GetParamPtr(const char* name);\nprotected: /* INTERNAL INTERFACE */\n    int  IsParam(const char* name);\n    void AddParam(const char* name, double* pAddr);\n    void AddParam(const char* name, float* pAddr);\n    void AddParam(const char* name, int* pAddr);\n    void AddParam(const char* name, const char** pAddr);\n    void AddParam(const char* name);\n    void CommentParam(const char* name, const char* pComment);\n    void SetTypeName(const char* name);\n    void SetModuleName(const char* name);\n    void DelParam(const char* name);\n\npublic: /* EXTERNAL INTERFACE */\n    const char* GetParamName(int index);\n    const char* GetParamComment(const char* name);\n    double GetParam(const char* name);\n    const char* GetParamStr(const char* name);\n    void   SetParam(const char* name, double val);\n    void   SetParamStr(const char* name, const char* str);\n    void TransferParamsFromChild(CvVSModule* pM, const char* prefix = NULL);\n    void TransferParamsToChild(CvVSModule* pM, char* prefix = NULL);\n    virtual void ParamUpdate();\n    const char*   GetTypeName();\n    int     IsModuleTypeName(const char* name);\n    char*   GetModuleName();\n    int     IsModuleName(const char* name);\n    void SetNickName(const char* pStr);\n    const char* GetNickName();\n    virtual void SaveState(CvFileStorage*);\n    virtual void LoadState(CvFileStorage*, CvFileNode*);\n\n    virtual void Release() = 0;\n};/* CvVMModule */\n\nCV_EXPORTS void cvWriteStruct(CvFileStorage* fs, const char* name, void* addr, const char* desc, int num=1);\nCV_EXPORTS void cvReadStructByName(CvFileStorage* fs, CvFileNode* node, const char* name, void* addr, const char* desc);\n\n/* FOREGROUND DETECTOR INTERFACE */\nclass CV_EXPORTS CvFGDetector : public CvVSModule\n{\npublic:\n    CvFGDetector();\n    virtual IplImage* GetMask() = 0;\n    /* Process current image: */\n    virtual void    Process(IplImage* pImg) = 0;\n    /* Release foreground detector: */\n    virtual void    Release() = 0;\n};\n\nCV_EXPORTS void cvReleaseFGDetector(CvFGDetector** ppT );\nCV_EXPORTS CvFGDetector* cvCreateFGDetectorBase(int type, void *param);\n\n\n/* BLOB STRUCTURE*/\nstruct CvBlob\n{\n    float   x,y; /* blob position   */\n    float   w,h; /* blob sizes      */\n    int     ID;  /* blob ID         */\n};\n\ninline CvBlob cvBlob(float x,float y, float w, float h)\n{\n    CvBlob B = {x,y,w,h,0};\n    return B;\n}\n#define CV_BLOB_MINW 5\n#define CV_BLOB_MINH 5\n#define CV_BLOB_ID(pB) (((CvBlob*)(pB))->ID)\n#define CV_BLOB_CENTER(pB) cvPoint2D32f(((CvBlob*)(pB))->x,((CvBlob*)(pB))->y)\n#define CV_BLOB_X(pB) (((CvBlob*)(pB))->x)\n#define CV_BLOB_Y(pB) (((CvBlob*)(pB))->y)\n#define CV_BLOB_WX(pB) (((CvBlob*)(pB))->w)\n#define CV_BLOB_WY(pB) (((CvBlob*)(pB))->h)\n#define CV_BLOB_RX(pB) (0.5f*CV_BLOB_WX(pB))\n#define CV_BLOB_RY(pB) (0.5f*CV_BLOB_WY(pB))\n#define CV_BLOB_RECT(pB) cvRect(cvRound(((CvBlob*)(pB))->x-CV_BLOB_RX(pB)),cvRound(((CvBlob*)(pB))->y-CV_BLOB_RY(pB)),cvRound(CV_BLOB_WX(pB)),cvRound(CV_BLOB_WY(pB)))\n/* END BLOB STRUCTURE*/\n\n\n/* simple BLOBLIST */\nclass CV_EXPORTS CvBlobSeq\n{\npublic:\n    CvBlobSeq(int BlobSize = sizeof(CvBlob))\n    {\n        m_pMem = cvCreateMemStorage();\n        m_pSeq = cvCreateSeq(0,sizeof(CvSeq),BlobSize,m_pMem);\n        strcpy(m_pElemFormat,\"ffffi\");\n    }\n    virtual ~CvBlobSeq()\n    {\n        cvReleaseMemStorage(&m_pMem);\n    };\n    virtual CvBlob* GetBlob(int BlobIndex)\n    {\n        return (CvBlob*)cvGetSeqElem(m_pSeq,BlobIndex);\n    };\n    virtual CvBlob* GetBlobByID(int BlobID)\n    {\n        int i;\n        for(i=0; i<m_pSeq->total; ++i)\n            if(BlobID == CV_BLOB_ID(GetBlob(i)))\n                return GetBlob(i);\n        return NULL;\n    };\n    virtual void DelBlob(int BlobIndex)\n    {\n        cvSeqRemove(m_pSeq,BlobIndex);\n    };\n    virtual void DelBlobByID(int BlobID)\n    {\n        int i;\n        for(i=0; i<m_pSeq->total; ++i)\n        {\n            if(BlobID == CV_BLOB_ID(GetBlob(i)))\n            {\n                DelBlob(i);\n                return;\n            }\n        }\n    };\n    virtual void Clear()\n    {\n        cvClearSeq(m_pSeq);\n    };\n    virtual void AddBlob(CvBlob* pB)\n    {\n        cvSeqPush(m_pSeq,pB);\n    };\n    virtual int GetBlobNum()\n    {\n        return m_pSeq->total;\n    };\n    virtual void Write(CvFileStorage* fs, const char* name)\n    {\n        const char*  attr[] = {\"dt\",m_pElemFormat,NULL};\n        if(fs)\n        {\n            cvWrite(fs,name,m_pSeq,cvAttrList(attr,NULL));\n        }\n    }\n    virtual void Load(CvFileStorage* fs, CvFileNode* node)\n    {\n        if(fs==NULL) return;\n        CvSeq* pSeq = (CvSeq*)cvRead(fs, node);\n        if(pSeq)\n        {\n            int i;\n            cvClearSeq(m_pSeq);\n            for(i=0;i<pSeq->total;++i)\n            {\n                void* pB = cvGetSeqElem( pSeq, i );\n                cvSeqPush( m_pSeq, pB );\n            }\n        }\n    }\n    void AddFormat(const char* str){strcat(m_pElemFormat,str);}\nprotected:\n    CvMemStorage*   m_pMem;\n    CvSeq*          m_pSeq;\n    char            m_pElemFormat[1024];\n};\n/* simple BLOBLIST */\n\n\n/* simple TRACKLIST */\nstruct CvBlobTrack\n{\n    int         TrackID;\n    int         StartFrame;\n    CvBlobSeq*  pBlobSeq;\n};\n\nclass CV_EXPORTS CvBlobTrackSeq\n{\npublic:\n    CvBlobTrackSeq(int TrackSize = sizeof(CvBlobTrack));\n    virtual ~CvBlobTrackSeq();\n    virtual CvBlobTrack* GetBlobTrack(int TrackIndex);\n    virtual CvBlobTrack* GetBlobTrackByID(int TrackID);\n    virtual void DelBlobTrack(int TrackIndex);\n    virtual void DelBlobTrackByID(int TrackID);\n    virtual void Clear();\n    virtual void AddBlobTrack(int TrackID, int StartFrame = 0);\n    virtual int GetBlobTrackNum();\nprotected:\n    CvMemStorage*   m_pMem;\n    CvSeq*          m_pSeq;\n};\n\n/* simple TRACKLIST */\n\n\n/* BLOB DETECTOR INTERFACE */\nclass CV_EXPORTS CvBlobDetector: public CvVSModule\n{\npublic:\n    CvBlobDetector(){SetTypeName(\"BlobDetector\");};\n    /* Try to detect new blob entrance based on foreground mask. */\n    /* pFGMask - image of foreground mask */\n    /* pNewBlob - pointer to CvBlob structure which will be filled if new blob entrance detected */\n    /* pOldBlobList - pointer to blob list which already exist on image */\n    virtual int DetectNewBlob(IplImage* pImg, IplImage* pImgFG, CvBlobSeq* pNewBlobList, CvBlobSeq* pOldBlobList) = 0;\n    /* release blob detector */\n    virtual void Release()=0;\n};\n\n/* Release any blob detector: */\nCV_EXPORTS void cvReleaseBlobDetector(CvBlobDetector** ppBD);\n\n/* Declarations of constructors of implemented modules: */\nCV_EXPORTS CvBlobDetector* cvCreateBlobDetectorSimple();\nCV_EXPORTS CvBlobDetector* cvCreateBlobDetectorCC();\n\nstruct CV_EXPORTS CvDetectedBlob : public CvBlob\n{\n    float response;\n};\n\nCV_INLINE CvDetectedBlob cvDetectedBlob( float x, float y, float w, float h, int ID = 0, float response = 0.0F )\n{\n    CvDetectedBlob b;\n    b.x = x; b.y = y; b.w = w; b.h = h; b.ID = ID; b.response = response;\n    return b;\n}\n\n\nclass CV_EXPORTS CvObjectDetector\n{\npublic:\n    CvObjectDetector( const char* /*detector_file_name*/ = 0 );\n    ~CvObjectDetector();\n\n    /*\n     * Release the current detector and load new detector from file\n     * (if detector_file_name is not 0)\n     * Return true on success:\n     */\n    bool Load( const char* /*detector_file_name*/ = 0 );\n\n    /* Return min detector window size: */\n    CvSize GetMinWindowSize() const;\n\n    /* Return max border: */\n    int GetMaxBorderSize() const;\n\n    /*\n     * Detect the object on the image and push the detected\n     * blobs into <detected_blob_seq> which must be the sequence of <CvDetectedBlob>s\n     */\n    void Detect( const CvArr* /*img*/, /* out */ CvBlobSeq* /*detected_blob_seq*/ = 0 );\n\nprotected:\n    class CvObjectDetectorImpl* impl;\n};\n\n\nCV_INLINE CvRect cvRectIntersection( const CvRect r1, const CvRect r2 )\n{\n    CvRect r = cvRect( MAX(r1.x, r2.x), MAX(r1.y, r2.y), 0, 0 );\n\n    r.width  = MIN(r1.x + r1.width, r2.x + r2.width) - r.x;\n    r.height = MIN(r1.y + r1.height, r2.y + r2.height) - r.y;\n\n    return r;\n}\n\n\n/*\n * CvImageDrawer\n *\n * Draw on an image the specified ROIs from the source image and\n * given blobs as ellipses or rectangles:\n */\n\nstruct CvDrawShape\n{\n    enum {RECT, ELLIPSE} shape;\n    CvScalar color;\n};\n\n/*extern const CvDrawShape icv_shape[] =\n{\n    { CvDrawShape::ELLIPSE, CV_RGB(255,0,0) },\n    { CvDrawShape::ELLIPSE, CV_RGB(0,255,0) },\n    { CvDrawShape::ELLIPSE, CV_RGB(0,0,255) },\n    { CvDrawShape::ELLIPSE, CV_RGB(255,255,0) },\n    { CvDrawShape::ELLIPSE, CV_RGB(0,255,255) },\n    { CvDrawShape::ELLIPSE, CV_RGB(255,0,255) }\n};*/\n\nclass CV_EXPORTS CvImageDrawer\n{\npublic:\n    CvImageDrawer() : m_image(0) {}\n    ~CvImageDrawer() { cvReleaseImage( &m_image ); }\n    void SetShapes( const CvDrawShape* shapes, int num );\n    /* <blob_seq> must be the sequence of <CvDetectedBlob>s */\n    IplImage* Draw( const CvArr* src, CvBlobSeq* blob_seq = 0, const CvSeq* roi_seq = 0 );\n    IplImage* GetImage() { return m_image; }\nprotected:\n    //static const int MAX_SHAPES = sizeof(icv_shape) / sizeof(icv_shape[0]);;\n\n    IplImage* m_image;\n    CvDrawShape m_shape[16];\n};\n\n\n\n/* Trajectory generation module: */\nclass CV_EXPORTS CvBlobTrackGen: public CvVSModule\n{\npublic:\n    CvBlobTrackGen(){SetTypeName(\"BlobTrackGen\");};\n    virtual void    SetFileName(char* pFileName) = 0;\n    virtual void    AddBlob(CvBlob* pBlob) = 0;\n    virtual void    Process(IplImage* pImg = NULL, IplImage* pFG = NULL) = 0;\n    virtual void    Release() = 0;\n};\n\ninline void cvReleaseBlobTrackGen(CvBlobTrackGen** pBTGen)\n{\n    if(*pBTGen)(*pBTGen)->Release();\n    *pBTGen = 0;\n}\n\n/* Declarations of constructors of implemented modules: */\nCV_EXPORTS CvBlobTrackGen* cvCreateModuleBlobTrackGen1();\nCV_EXPORTS CvBlobTrackGen* cvCreateModuleBlobTrackGenYML();\n\n\n\n/* BLOB TRACKER INTERFACE */\nclass CV_EXPORTS CvBlobTracker: public CvVSModule\n{\npublic:\n    CvBlobTracker();\n\n    /* Add new blob to track it and assign to this blob personal ID */\n    /* pBlob - pointer to structure with blob parameters (ID is ignored)*/\n    /* pImg - current image */\n    /* pImgFG - current foreground mask */\n    /* Return pointer to new added blob: */\n    virtual CvBlob* AddBlob(CvBlob* pBlob, IplImage* pImg, IplImage* pImgFG = NULL ) = 0;\n\n    /* Return number of currently tracked blobs: */\n    virtual int     GetBlobNum() = 0;\n\n    /* Return pointer to specified by index blob: */\n    virtual CvBlob* GetBlob(int BlobIndex) = 0;\n\n    /* Delete blob by its index: */\n    virtual void    DelBlob(int BlobIndex) = 0;\n\n    /* Process current image and track all existed blobs: */\n    virtual void    Process(IplImage* pImg, IplImage* pImgFG = NULL) = 0;\n\n    /* Release blob tracker: */\n    virtual void    Release() = 0;\n\n\n    /* Process one blob (for multi hypothesis tracing): */\n    virtual void ProcessBlob(int BlobIndex, CvBlob* pBlob, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL);\n\n    /* Get confidence/wieght/probability (0-1) for blob: */\n    virtual double  GetConfidence(int /*BlobIndex*/, CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL);\n\n    virtual double GetConfidenceList(CvBlobSeq* pBlobList, IplImage* pImg, IplImage* pImgFG = NULL);\n\n    virtual void UpdateBlob(int /*BlobIndex*/, CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL);\n\n    /* Update all blob models: */\n    virtual void Update(IplImage* pImg, IplImage* pImgFG = NULL);\n\n    /* Return pointer to blob by its unique ID: */\n    virtual int     GetBlobIndexByID(int BlobID);\n\n    /* Return pointer to blob by its unique ID: */\n    virtual CvBlob* GetBlobByID(int BlobID);\n\n    /* Delete blob by its ID: */\n    virtual void    DelBlobByID(int BlobID);\n\n    /* Set new parameters for specified (by index) blob: */\n    virtual void    SetBlob(int /*BlobIndex*/, CvBlob* /*pBlob*/);\n\n    /* Set new parameters for specified (by ID) blob: */\n    virtual void    SetBlobByID(int BlobID, CvBlob* pBlob);\n\n    /*  ===============  MULTI HYPOTHESIS INTERFACE ==================  */\n\n    /* Return number of position hyposetis of currently tracked blob: */\n    virtual int     GetBlobHypNum(int /*BlobIdx*/);\n\n    /* Return pointer to specified blob hypothesis by index blob: */\n    virtual CvBlob* GetBlobHyp(int BlobIndex, int /*hypothesis*/);\n\n    /* Set new parameters for specified (by index) blob hyp\n     * (can be called several times for each hyp ):\n     */\n    virtual void    SetBlobHyp(int /*BlobIndex*/, CvBlob* /*pBlob*/);\n};\n\nCV_EXPORTS void cvReleaseBlobTracker(CvBlobTracker**ppT );\n/* BLOB TRACKER INTERFACE */\n\n/*BLOB TRACKER ONE INTERFACE */\nclass CV_EXPORTS CvBlobTrackerOne : public CvVSModule\n{\npublic:\n    virtual void Init(CvBlob* pBlobInit, IplImage* pImg, IplImage* pImgFG = NULL) = 0;\n    virtual CvBlob* Process(CvBlob* pBlobPrev, IplImage* pImg, IplImage* pImgFG = NULL) = 0;\n    virtual void Release() =  0;\n\n    /* Non-required methods: */\n    virtual void SkipProcess(CvBlob* /*pBlobPrev*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){};\n    virtual void Update(CvBlob* /*pBlob*/, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL){};\n    virtual void SetCollision(int /*CollisionFlag*/){}; /* call in case of blob collision situation*/\n    virtual double GetConfidence(CvBlob* /*pBlob*/, IplImage* /*pImg*/,\n                                 IplImage* /*pImgFG*/ = NULL, IplImage* /*pImgUnusedReg*/ = NULL)\n    {\n        return 1;\n    };\n};\ninline void cvReleaseBlobTrackerOne(CvBlobTrackerOne **ppT )\n{\n    ppT[0]->Release();\n    ppT[0] = 0;\n}\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerList(CvBlobTrackerOne* (*create)());\n/*BLOB TRACKER ONE INTERFACE */\n\n/* Declarations of constructors of implemented modules: */\n\n/* Some declarations for specific MeanShift tracker: */\n#define PROFILE_EPANECHNIKOV    0\n#define PROFILE_DOG             1\nstruct CvBlobTrackerParamMS\n{\n    int     noOfSigBits;\n    int     appearance_profile;\n    int     meanshift_profile;\n    float   sigma;\n};\n\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS1(CvBlobTrackerParamMS* param);\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS2(CvBlobTrackerParamMS* param);\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS1ByList();\n\n/* Some declarations for specific Likelihood tracker: */\nstruct CvBlobTrackerParamLH\n{\n    int     HistType; /* see Prob.h */\n    int     ScaleAfter;\n};\n\n/* Without scale optimization: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerLHR(CvBlobTrackerParamLH* /*param*/ = NULL);\n\n/* With scale optimization: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerLHRS(CvBlobTrackerParamLH* /*param*/ = NULL);\n\n/* Simple blob tracker based on connected component tracking: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerCC();\n\n/* Connected component tracking and mean-shift particle filter collion-resolver: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerCCMSPF();\n\n/* Blob tracker that integrates meanshift and connected components: */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSFG();\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSFGS();\n\n/* Meanshift without connected-components */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMS();\n\n/* Particle filtering via Bhattacharya coefficient, which        */\n/* is roughly the dot-product of two probability densities.      */\n/* See: Real-Time Tracking of Non-Rigid Objects using Mean Shift */\n/*      Comanicius, Ramesh, Meer, 2000, 8p                       */\n/*      http://citeseer.ist.psu.edu/321441.html                  */\nCV_EXPORTS CvBlobTracker* cvCreateBlobTrackerMSPF();\n\n/* =========== tracker integrators trackers =============*/\n\n/* Integrator based on Particle Filtering method: */\n//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIPF();\n\n/* Rule based integrator: */\n//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIRB();\n\n/* Integrator based on data fusion using particle filtering: */\n//CV_EXPORTS CvBlobTracker* cvCreateBlobTrackerIPFDF();\n\n\n\n\n/* Trajectory postprocessing module: */\nclass CV_EXPORTS CvBlobTrackPostProc: public CvVSModule\n{\npublic:\n    CvBlobTrackPostProc(){SetTypeName(\"BlobTrackPostProc\");};\n    virtual void    AddBlob(CvBlob* pBlob) = 0;\n    virtual void    Process() = 0;\n    virtual int     GetBlobNum() = 0;\n    virtual CvBlob* GetBlob(int index) = 0;\n    virtual void    Release() = 0;\n\n    /* Additional functionality: */\n    virtual CvBlob* GetBlobByID(int BlobID)\n    {\n        int i;\n        for(i=GetBlobNum();i>0;i--)\n        {\n            CvBlob* pB=GetBlob(i-1);\n            if(pB->ID==BlobID) return pB;\n        }\n        return NULL;\n    };\n};\n\ninline void cvReleaseBlobTrackPostProc(CvBlobTrackPostProc** pBTPP)\n{\n    if(pBTPP == NULL) return;\n    if(*pBTPP)(*pBTPP)->Release();\n    *pBTPP = 0;\n}\n\n/* Trajectory generation module: */\nclass CV_EXPORTS CvBlobTrackPostProcOne: public CvVSModule\n{\npublic:\n    CvBlobTrackPostProcOne(){SetTypeName(\"BlobTrackPostOne\");};\n    virtual CvBlob* Process(CvBlob* pBlob) = 0;\n    virtual void    Release() = 0;\n};\n\n/* Create blob tracking post processing module based on simle module: */\nCV_EXPORTS CvBlobTrackPostProc* cvCreateBlobTrackPostProcList(CvBlobTrackPostProcOne* (*create)());\n\n\n/* Declarations of constructors of implemented modules: */\nCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcKalman();\nCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverRect();\nCV_EXPORTS CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverExp();\n\n\n/* PREDICTORS */\n/* blob PREDICTOR */\nclass CvBlobTrackPredictor: public CvVSModule\n{\npublic:\n    CvBlobTrackPredictor(){SetTypeName(\"BlobTrackPredictor\");};\n    virtual CvBlob* Predict() = 0;\n    virtual void    Update(CvBlob* pBlob) = 0;\n    virtual void    Release() = 0;\n};\nCV_EXPORTS CvBlobTrackPredictor* cvCreateModuleBlobTrackPredictKalman();\n\n\n\n/* Trajectory analyser module: */\nclass CV_EXPORTS CvBlobTrackAnalysis: public CvVSModule\n{\npublic:\n    CvBlobTrackAnalysis(){SetTypeName(\"BlobTrackAnalysis\");};\n    virtual void    AddBlob(CvBlob* pBlob) = 0;\n    virtual void    Process(IplImage* pImg, IplImage* pFG) = 0;\n    virtual float   GetState(int BlobID) = 0;\n    /* return 0 if trajectory is normal\n       return >0 if trajectory abnormal */\n    virtual const char*   GetStateDesc(int /*BlobID*/){return NULL;};\n    virtual void    SetFileName(char* /*DataBaseName*/){};\n    virtual void    Release() = 0;\n};\n\n\ninline void cvReleaseBlobTrackAnalysis(CvBlobTrackAnalysis** pBTPP)\n{\n    if(pBTPP == NULL) return;\n    if(*pBTPP)(*pBTPP)->Release();\n    *pBTPP = 0;\n}\n\n/* Feature-vector generation module: */\nclass CV_EXPORTS CvBlobTrackFVGen : public CvVSModule\n{\npublic:\n    CvBlobTrackFVGen(){SetTypeName(\"BlobTrackFVGen\");};\n    virtual void    AddBlob(CvBlob* pBlob) = 0;\n    virtual void    Process(IplImage* pImg, IplImage* pFG) = 0;\n    virtual void    Release() = 0;\n    virtual int     GetFVSize() = 0;\n    virtual int     GetFVNum() = 0;\n    virtual float*  GetFV(int index, int* pFVID) = 0; /* Returns pointer to FV, if return 0 then FV not created */\n    virtual float*  GetFVVar(){return NULL;}; /* Returns pointer to array of variation of values of FV, if returns 0 then FVVar does not exist. */\n    virtual float*  GetFVMin() = 0; /* Returns pointer to array of minimal values of FV, if returns 0 then FVrange does not exist */\n    virtual float*  GetFVMax() = 0; /* Returns pointer to array of maximal values of FV, if returns 0 then FVrange does not exist */\n};\n\n\n/* Trajectory Analyser module: */\nclass CV_EXPORTS CvBlobTrackAnalysisOne\n{\npublic:\n    virtual ~CvBlobTrackAnalysisOne() {};\n    virtual int     Process(CvBlob* pBlob, IplImage* pImg, IplImage* pFG) = 0;\n    /* return 0 if trajectory is normal\n       return >0 if trajectory abnormal */\n    virtual void    Release() = 0;\n};\n\n/* Create blob tracking post processing module based on simle module: */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateBlobTrackAnalysisList(CvBlobTrackAnalysisOne* (*create)());\n\n/* Declarations of constructors of implemented modules: */\n\n/* Based on histogram analysis of 2D FV (x,y): */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistP();\n\n/* Based on histogram analysis of 4D FV (x,y,vx,vy): */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPV();\n\n/* Based on histogram analysis of 5D FV (x,y,vx,vy,state): */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPVS();\n\n/* Based on histogram analysis of 4D FV (startpos,stoppos): */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistSS();\n\n\n\n/* Based on SVM classifier analysis of 2D FV (x,y): */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMP();\n\n/* Based on SVM classifier analysis of 4D FV (x,y,vx,vy): */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMPV();\n\n/* Based on SVM classifier analysis of 5D FV (x,y,vx,vy,state): */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMPVS();\n\n/* Based on SVM classifier analysis of 4D FV (startpos,stoppos): */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisSVMSS();\n\n/* Track analysis based on distance between tracks: */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisTrackDist();\n\n/* Analyzer based on reation Road and height map: */\n//CV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysis3DRoadMap();\n\n/* Analyzer that makes OR decision using set of analyzers: */\nCV_EXPORTS CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisIOR();\n\n/* Estimator of human height: */\nclass CV_EXPORTS CvBlobTrackAnalysisHeight: public CvBlobTrackAnalysis\n{\npublic:\n    virtual double  GetHeight(CvBlob* pB) = 0;\n};\n//CV_EXPORTS CvBlobTrackAnalysisHeight* cvCreateModuleBlobTrackAnalysisHeightScale();\n\n\n\n/* AUTO BLOB TRACKER INTERFACE -- pipeline of 3 modules: */\nclass CV_EXPORTS CvBlobTrackerAuto: public CvVSModule\n{\npublic:\n    CvBlobTrackerAuto(){SetTypeName(\"BlobTrackerAuto\");};\n    virtual void        Process(IplImage* pImg, IplImage* pMask = NULL) = 0;\n    virtual CvBlob*     GetBlob(int index) = 0;\n    virtual CvBlob*     GetBlobByID(int ID) = 0;\n    virtual int         GetBlobNum() = 0;\n    virtual IplImage*   GetFGMask(){return NULL;};\n    virtual float       GetState(int BlobID) = 0;\n    virtual const char*       GetStateDesc(int BlobID) = 0;\n    /* return 0 if trajectory is normal;\n     * return >0 if trajectory abnormal. */\n    virtual void    Release() = 0;\n};\ninline void cvReleaseBlobTrackerAuto(CvBlobTrackerAuto** ppT)\n{\n    ppT[0]->Release();\n    ppT[0] = 0;\n}\n/* END AUTO BLOB TRACKER INTERFACE */\n\n\n/* Constructor functions and data for specific BlobTRackerAuto modules: */\n\n/* Parameters of blobtracker auto ver1: */\nstruct CvBlobTrackerAutoParam1\n{\n    int                     FGTrainFrames; /* Number of frames needed for FG (foreground) detector to train.        */\n\n    CvFGDetector*           pFG;           /* FGDetector module. If this field is NULL the Process FG mask is used. */\n\n    CvBlobDetector*         pBD;           /* Selected blob detector module. \t\t\t\t\t    */\n                                           /* If this field is NULL default blobdetector module will be created.    */\n\n    CvBlobTracker*          pBT;           /* Selected blob tracking module.\t\t\t\t\t    */\n                                           /* If this field is NULL default blobtracker module will be created.     */\n\n    CvBlobTrackGen*         pBTGen;        /* Selected blob trajectory generator.\t\t\t\t    */\n                                           /* If this field is NULL no generator is used.                           */\n\n    CvBlobTrackPostProc*    pBTPP;         /* Selected blob trajectory postprocessing module.\t\t\t    */\n                                           /* If this field is NULL no postprocessing is done.                      */\n\n    int                     UsePPData;\n\n    CvBlobTrackAnalysis*    pBTA;          /* Selected blob trajectory analysis module.                             */\n                                           /* If this field is NULL no track analysis is done.                      */\n};\n\n/* Create blob tracker auto ver1: */\nCV_EXPORTS CvBlobTrackerAuto* cvCreateBlobTrackerAuto1(CvBlobTrackerAutoParam1* param = NULL);\n\n/* Simple loader for many auto trackers by its type : */\ninline CvBlobTrackerAuto* cvCreateBlobTrackerAuto(int type, void* param)\n{\n    if(type == 0) return cvCreateBlobTrackerAuto1((CvBlobTrackerAutoParam1*)param);\n    return 0;\n}\n\n\n\nstruct CvTracksTimePos\n{\n    int len1,len2;\n    int beg1,beg2;\n    int end1,end2;\n    int comLen; //common length for two tracks\n    int shift1,shift2;\n};\n\n/*CV_EXPORTS int cvCompareTracks( CvBlobTrackSeq *groundTruth,\n                   CvBlobTrackSeq *result,\n                   FILE *file);*/\n\n\n/* Constructor functions:  */\n\nCV_EXPORTS void cvCreateTracks_One(CvBlobTrackSeq *TS);\nCV_EXPORTS void cvCreateTracks_Same(CvBlobTrackSeq *TS1, CvBlobTrackSeq *TS2);\nCV_EXPORTS void cvCreateTracks_AreaErr(CvBlobTrackSeq *TS1, CvBlobTrackSeq *TS2, int addW, int addH);\n\n\n/* HIST API */\nclass CV_EXPORTS CvProb\n{\npublic:\n    virtual ~CvProb() {};\n\n    /* Calculate probability value: */\n    virtual double Value(int* /*comp*/, int /*x*/ = 0, int /*y*/ = 0){return -1;};\n\n    /* Update histograpp Pnew = (1-W)*Pold + W*Padd*/\n    /* W weight of new added prob */\n    /* comps - matrix of new fetature vectors used to update prob */\n    virtual void AddFeature(float W, int* comps, int x =0, int y = 0) = 0;\n    virtual void Scale(float factor = 0, int x = -1, int y = -1) = 0;\n    virtual void Release() = 0;\n};\ninline void cvReleaseProb(CvProb** ppProb){ppProb[0]->Release();ppProb[0]=NULL;}\n/* HIST API */\n\n/* Some Prob: */\nCV_EXPORTS CvProb* cvCreateProbS(int dim, CvSize size, int sample_num);\nCV_EXPORTS CvProb* cvCreateProbMG(int dim, CvSize size, int sample_num);\nCV_EXPORTS CvProb* cvCreateProbMG2(int dim, CvSize size, int sample_num);\nCV_EXPORTS CvProb* cvCreateProbHist(int dim, CvSize size);\n\n#define CV_BT_HIST_TYPE_S     0\n#define CV_BT_HIST_TYPE_MG    1\n#define CV_BT_HIST_TYPE_MG2   2\n#define CV_BT_HIST_TYPE_H     3\ninline CvProb* cvCreateProb(int type, int dim, CvSize size = cvSize(1,1), void* /*param*/ = NULL)\n{\n    if(type == CV_BT_HIST_TYPE_S) return cvCreateProbS(dim, size, -1);\n    if(type == CV_BT_HIST_TYPE_MG) return cvCreateProbMG(dim, size, -1);\n    if(type == CV_BT_HIST_TYPE_MG2) return cvCreateProbMG2(dim, size, -1);\n    if(type == CV_BT_HIST_TYPE_H) return cvCreateProbHist(dim, size);\n    return NULL;\n}\n\n\n\n/* Noise type definitions: */\n#define CV_NOISE_NONE               0\n#define CV_NOISE_GAUSSIAN           1\n#define CV_NOISE_UNIFORM            2\n#define CV_NOISE_SPECKLE            3\n#define CV_NOISE_SALT_AND_PEPPER    4\n\n/* Add some noise to image: */\n/* pImg - (input) image without noise */\n/* pImg - (output) image with noise */\n/* noise_type - type of added noise */\n/*  CV_NOISE_GAUSSIAN - pImg += n , n - is gaussian noise with Ampl standart deviation */\n/*  CV_NOISE_UNIFORM - pImg += n , n - is uniform noise with Ampl standart deviation */\n/*  CV_NOISE_SPECKLE - pImg += n*pImg , n - is gaussian noise with Ampl standart deviation */\n/*  CV_NOISE_SALT_AND_PAPPER - pImg = pImg with blacked and whited pixels,\n            Ampl is density of brocken pixels (0-there are not broken pixels, 1 - all pixels are broken)*/\n/* Ampl - \"amplitude\" of noise */\n//CV_EXPORTS void cvAddNoise(IplImage* pImg, int noise_type, double Ampl, CvRNG* rnd_state = NULL);\n\n/*================== GENERATOR OF TEST VIDEO SEQUENCE ===================== */\ntypedef void CvTestSeq;\n\n/* pConfigfile - Name of file (yml or xml) with description of test sequence */\n/* videos - array of names of test videos described in \"pConfigfile\" file */\n/* numvideos - size of \"videos\" array */\nCV_EXPORTS CvTestSeq* cvCreateTestSeq(char* pConfigfile, char** videos, int numvideo, float Scale = 1, int noise_type = CV_NOISE_NONE, double noise_ampl = 0);\nCV_EXPORTS void cvReleaseTestSeq(CvTestSeq** ppTestSeq);\n\n/* Generate next frame from test video seq and return pointer to it: */\nCV_EXPORTS IplImage* cvTestSeqQueryFrame(CvTestSeq* pTestSeq);\n\n/* Return pointer to current foreground mask: */\nCV_EXPORTS IplImage* cvTestSeqGetFGMask(CvTestSeq* pTestSeq);\n\n/* Return pointer to current image: */\nCV_EXPORTS IplImage* cvTestSeqGetImage(CvTestSeq* pTestSeq);\n\n/* Return frame size of result test video: */\nCV_EXPORTS CvSize cvTestSeqGetImageSize(CvTestSeq* pTestSeq);\n\n/* Return number of frames result test video: */\nCV_EXPORTS int cvTestSeqFrameNum(CvTestSeq* pTestSeq);\n\n/* Return number of existing objects.\n * This is general number of any objects.\n * For example number of trajectories may be equal or less than returned value:\n */\nCV_EXPORTS int cvTestSeqGetObjectNum(CvTestSeq* pTestSeq);\n\n/* Return 0 if there is not position for current defined on current frame */\n/* Return 1 if there is object position and pPos was filled */\nCV_EXPORTS int cvTestSeqGetObjectPos(CvTestSeq* pTestSeq, int ObjIndex, CvPoint2D32f* pPos);\nCV_EXPORTS int cvTestSeqGetObjectSize(CvTestSeq* pTestSeq, int ObjIndex, CvPoint2D32f* pSize);\n\n/* Add noise to final image: */\nCV_EXPORTS void cvTestSeqAddNoise(CvTestSeq* pTestSeq, int noise_type = CV_NOISE_NONE, double noise_ampl = 0);\n\n/* Add Intensity variation: */\nCV_EXPORTS void cvTestSeqAddIntensityVariation(CvTestSeq* pTestSeq, float DI_per_frame, float MinI, float MaxI);\nCV_EXPORTS void cvTestSeqSetFrame(CvTestSeq* pTestSeq, int n);\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/legacy/compat.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright( C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort(including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n/*\n   A few macros and definitions for backward compatibility\n   with the previous versions of OpenCV. They are obsolete and\n   are likely to be removed in future. To check whether your code\n   uses any of these, define CV_NO_BACKWARD_COMPATIBILITY before\n   including cv.h.\n*/\n\n#ifndef __OPENCV_COMPAT_HPP__\n#define __OPENCV_COMPAT_HPP__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/imgproc/types_c.h\"\n\n#include <math.h>\n#include <string.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef int CvMatType;\ntypedef int CvDisMaskType;\ntypedef CvMat CvMatArray;\n\ntypedef int CvThreshType;\ntypedef int CvAdaptiveThreshMethod;\ntypedef int CvCompareMethod;\ntypedef int CvFontFace;\ntypedef int CvPolyApproxMethod;\ntypedef int CvContoursMatchMethod;\ntypedef int CvContourTreesMatchMethod;\ntypedef int CvCoeffType;\ntypedef int CvRodriguesType;\ntypedef int CvElementShape;\ntypedef int CvMorphOp;\ntypedef int CvTemplMatchMethod;\n\ntypedef CvPoint2D64f CvPoint2D64d;\ntypedef CvPoint3D64f CvPoint3D64d;\n\nenum\n{\n    CV_MAT32F      = CV_32FC1,\n    CV_MAT3x1_32F  = CV_32FC1,\n    CV_MAT4x1_32F  = CV_32FC1,\n    CV_MAT3x3_32F  = CV_32FC1,\n    CV_MAT4x4_32F  = CV_32FC1,\n\n    CV_MAT64D      = CV_64FC1,\n    CV_MAT3x1_64D  = CV_64FC1,\n    CV_MAT4x1_64D  = CV_64FC1,\n    CV_MAT3x3_64D  = CV_64FC1,\n    CV_MAT4x4_64D  = CV_64FC1\n};\n\nenum\n{\n    IPL_GAUSSIAN_5x5 = 7\n};\n\ntypedef CvBox2D  CvBox2D32f;\n\n/* allocation/deallocation macros */\n#define cvCreateImageData   cvCreateData\n#define cvReleaseImageData  cvReleaseData\n#define cvSetImageData      cvSetData\n#define cvGetImageRawData   cvGetRawData\n\n#define cvmAlloc            cvCreateData\n#define cvmFree             cvReleaseData\n#define cvmAllocArray       cvCreateData\n#define cvmFreeArray        cvReleaseData\n\n#define cvIntegralImage     cvIntegral\n#define cvMatchContours     cvMatchShapes\n\nCV_EXPORTS CvMat cvMatArray( int rows, int cols, int type,\n                            int count, void* data CV_DEFAULT(0));\n\n#define cvUpdateMHIByTime  cvUpdateMotionHistory\n\n#define cvAccMask cvAcc\n#define cvSquareAccMask cvSquareAcc\n#define cvMultiplyAccMask cvMultiplyAcc\n#define cvRunningAvgMask(imgY, imgU, mask, alpha) cvRunningAvg(imgY, imgU, alpha, mask)\n\n#define cvSetHistThresh  cvSetHistBinRanges\n#define cvCalcHistMask(img, mask, hist, doNotClear) cvCalcHist(img, hist, doNotClear, mask)\n\nCV_EXPORTS double cvMean( const CvArr* image, const CvArr* mask CV_DEFAULT(0));\nCV_EXPORTS double cvSumPixels( const CvArr* image );\nCV_EXPORTS void  cvMean_StdDev( const CvArr* image, double* mean, double* sdv,\n                                const CvArr* mask CV_DEFAULT(0));\n\nCV_EXPORTS void cvmPerspectiveProject( const CvMat* mat, const CvArr* src, CvArr* dst );\nCV_EXPORTS void cvFillImage( CvArr* mat, double color );\n\n#define cvCvtPixToPlane cvSplit\n#define cvCvtPlaneToPix cvMerge\n\ntypedef struct CvRandState\n{\n    CvRNG     state;    /* RNG state (the current seed and carry)*/\n    int       disttype; /* distribution type */\n    CvScalar  param[2]; /* parameters of RNG */\n} CvRandState;\n\n/* Changes RNG range while preserving RNG state */\nCV_EXPORTS void  cvRandSetRange( CvRandState* state, double param1,\n                                 double param2, int index CV_DEFAULT(-1));\n\nCV_EXPORTS void  cvRandInit( CvRandState* state, double param1,\n                             double param2, int seed,\n                             int disttype CV_DEFAULT(CV_RAND_UNI));\n\n/* Fills array with random numbers */\nCV_EXPORTS void cvRand( CvRandState* state, CvArr* arr );\n\n#define cvRandNext( _state ) cvRandInt( &(_state)->state )\n\nCV_EXPORTS void cvbRand( CvRandState* state, float* dst, int len );\n\nCV_EXPORTS void  cvbCartToPolar( const float* y, const float* x,\n                                 float* magnitude, float* angle, int len );\nCV_EXPORTS void  cvbFastArctan( const float* y, const float* x, float* angle, int len );\nCV_EXPORTS void  cvbSqrt( const float* x, float* y, int len );\nCV_EXPORTS void  cvbInvSqrt( const float* x, float* y, int len );\nCV_EXPORTS void  cvbReciprocal( const float* x, float* y, int len );\nCV_EXPORTS void  cvbFastExp( const float* x, double* y, int len );\nCV_EXPORTS void  cvbFastLog( const double* x, float* y, int len );\n\nCV_EXPORTS CvRect  cvContourBoundingRect( void* point_set, int update CV_DEFAULT(0));\n\nCV_EXPORTS double cvPseudoInverse( const CvArr* src, CvArr* dst );\n#define cvPseudoInv cvPseudoInverse\n\n#define cvContourMoments( contour, moments ) cvMoments( contour, moments, 0 )\n\n#define cvGetPtrAt              cvPtr2D\n#define cvGetAt                 cvGet2D\n#define cvSetAt(arr,val,y,x)    cvSet2D((arr),(y),(x),(val))\n\n#define cvMeanMask  cvMean\n#define cvMean_StdDevMask(img,mask,mean,sdv) cvMean_StdDev(img,mean,sdv,mask)\n\n#define cvNormMask(imgA,imgB,mask,normType) cvNorm(imgA,imgB,normType,mask)\n\n#define cvMinMaxLocMask(img, mask, min_val, max_val, min_loc, max_loc) \\\n        cvMinMaxLoc(img, min_val, max_val, min_loc, max_loc, mask)\n\n#define cvRemoveMemoryManager  cvSetMemoryManager\n\n#define cvmSetZero( mat )               cvSetZero( mat )\n#define cvmSetIdentity( mat )           cvSetIdentity( mat )\n#define cvmAdd( src1, src2, dst )       cvAdd( src1, src2, dst, 0 )\n#define cvmSub( src1, src2, dst )       cvSub( src1, src2, dst, 0 )\n#define cvmCopy( src, dst )             cvCopy( src, dst, 0 )\n#define cvmMul( src1, src2, dst )       cvMatMulAdd( src1, src2, 0, dst )\n#define cvmTranspose( src, dst )        cvT( src, dst )\n#define cvmInvert( src, dst )           cvInv( src, dst )\n#define cvmMahalanobis(vec1, vec2, mat) cvMahalanobis( vec1, vec2, mat )\n#define cvmDotProduct( vec1, vec2 )     cvDotProduct( vec1, vec2 )\n#define cvmCrossProduct(vec1, vec2,dst) cvCrossProduct( vec1, vec2, dst )\n#define cvmTrace( mat )                 (cvTrace( mat )).val[0]\n#define cvmMulTransposed( src, dst, order ) cvMulTransposed( src, dst, order )\n#define cvmEigenVV( mat, evec, eval, eps)   cvEigenVV( mat, evec, eval, eps )\n#define cvmDet( mat )                   cvDet( mat )\n#define cvmScale( src, dst, scale )     cvScale( src, dst, scale )\n\n#define cvCopyImage( src, dst )         cvCopy( src, dst, 0 )\n#define cvReleaseMatHeader              cvReleaseMat\n\n/* Calculates exact convex hull of 2d point set */\nCV_EXPORTS void cvConvexHull( CvPoint* points, int num_points,\n                             CvRect* bound_rect,\n                             int orientation, int* hull, int* hullsize );\n\n\nCV_EXPORTS void cvMinAreaRect( CvPoint* points, int n,\n                              int left, int bottom,\n                              int right, int top,\n                              CvPoint2D32f* anchor,\n                              CvPoint2D32f* vect1,\n                              CvPoint2D32f* vect2 );\n\ntypedef int CvDisType;\ntypedef int CvChainApproxMethod;\ntypedef int CvContourRetrievalMode;\n\nCV_EXPORTS  void  cvFitLine3D( CvPoint3D32f* points, int count, int dist,\n                    void *param, float reps, float aeps, float* line );\n\n/* Fits a line into set of 2d points in a robust way (M-estimator technique) */\nCV_EXPORTS  void  cvFitLine2D( CvPoint2D32f* points, int count, int dist,\n                    void *param, float reps, float aeps, float* line );\n\nCV_EXPORTS  void  cvFitEllipse( const CvPoint2D32f* points, int count, CvBox2D* box );\n\n/* Projects 2d points to one of standard coordinate planes\n   (i.e. removes one of coordinates) */\nCV_EXPORTS  void  cvProject3D( CvPoint3D32f* points3D, int count,\n                              CvPoint2D32f* points2D,\n                              int xIndx CV_DEFAULT(0),\n                              int yIndx CV_DEFAULT(1));\n\n/* Retrieves value of the particular bin\n   of x-dimensional (x=1,2,3,...) histogram */\n#define cvQueryHistValue_1D( hist, idx0 ) \\\n    ((float)cvGetReal1D( (hist)->bins, (idx0)))\n#define cvQueryHistValue_2D( hist, idx0, idx1 ) \\\n    ((float)cvGetReal2D( (hist)->bins, (idx0), (idx1)))\n#define cvQueryHistValue_3D( hist, idx0, idx1, idx2 ) \\\n    ((float)cvGetReal3D( (hist)->bins, (idx0), (idx1), (idx2)))\n#define cvQueryHistValue_nD( hist, idx ) \\\n    ((float)cvGetRealND( (hist)->bins, (idx)))\n\n/* Returns pointer to the particular bin of x-dimesional histogram.\n   For sparse histogram the bin is created if it didn't exist before */\n#define cvGetHistValue_1D( hist, idx0 ) \\\n    ((float*)cvPtr1D( (hist)->bins, (idx0), 0))\n#define cvGetHistValue_2D( hist, idx0, idx1 ) \\\n    ((float*)cvPtr2D( (hist)->bins, (idx0), (idx1), 0))\n#define cvGetHistValue_3D( hist, idx0, idx1, idx2 ) \\\n    ((float*)cvPtr3D( (hist)->bins, (idx0), (idx1), (idx2), 0))\n#define cvGetHistValue_nD( hist, idx ) \\\n    ((float*)cvPtrND( (hist)->bins, (idx), 0))\n\n\n#define CV_IS_SET_ELEM_EXISTS CV_IS_SET_ELEM\n\n\nCV_EXPORTS  int  cvHoughLines( CvArr* image, double rho,\n                              double theta, int threshold,\n                              float* lines, int linesNumber );\n\nCV_EXPORTS  int  cvHoughLinesP( CvArr* image, double rho,\n                               double theta, int threshold,\n                               int lineLength, int lineGap,\n                               int* lines, int linesNumber );\n\n\nCV_EXPORTS  int  cvHoughLinesSDiv( CvArr* image, double rho, int srn,\n                                  double theta, int stn, int threshold,\n                                  float* lines, int linesNumber );\n\nCV_EXPORTS  float  cvCalcEMD( const float* signature1, int size1,\n                             const float* signature2, int size2,\n                             int dims, int dist_type CV_DEFAULT(CV_DIST_L2),\n                             CvDistanceFunction dist_func CV_DEFAULT(0),\n                             float* lower_bound CV_DEFAULT(0),\n                             void* user_param CV_DEFAULT(0));\n\nCV_EXPORTS  void  cvKMeans( int num_clusters, float** samples,\n                           int num_samples, int vec_size,\n                           CvTermCriteria termcrit, int* cluster_idx );\n\nCV_EXPORTS void  cvStartScanGraph( CvGraph* graph, CvGraphScanner* scanner,\n                                  CvGraphVtx* vtx CV_DEFAULT(NULL),\n                                  int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS));\n\nCV_EXPORTS  void  cvEndScanGraph( CvGraphScanner* scanner );\n\n\n/* old drawing functions */\nCV_EXPORTS void  cvLineAA( CvArr* img, CvPoint pt1, CvPoint pt2,\n                            double color, int scale CV_DEFAULT(0));\n\nCV_EXPORTS void  cvCircleAA( CvArr* img, CvPoint center, int radius,\n                            double color, int scale CV_DEFAULT(0) );\n\nCV_EXPORTS void  cvEllipseAA( CvArr* img, CvPoint center, CvSize axes,\n                              double angle, double start_angle,\n                              double end_angle, double color,\n                              int scale CV_DEFAULT(0) );\n\nCV_EXPORTS void  cvPolyLineAA( CvArr* img, CvPoint** pts, int* npts, int contours,\n                              int is_closed, double color, int scale CV_DEFAULT(0) );\n\n/****************************************************************************************\\\n*                                   Pixel Access Macros                                  *\n\\****************************************************************************************/\n\ntypedef struct _CvPixelPosition8u\n{\n    uchar*  currline;      /* pointer to the start of the current pixel line   */\n    uchar*  topline;       /* pointer to the start of the top pixel line       */\n    uchar*  bottomline;    /* pointer to the start of the first line           */\n                                    /* which is below the image                         */\n    int     x;                      /* current x coordinate ( in pixels )               */\n    int     width;                  /* width of the image  ( in pixels )                */\n    int     height;                 /* height of the image  ( in pixels )               */\n    int     step;                   /* distance between lines ( in elements of single   */\n                                    /* plane )                                          */\n    int     step_arr[3];            /* array: ( 0, -step, step ). It is used for        */\n                                    /* vertical moving                                  */\n} CvPixelPosition8u;\n\n/* this structure differs from the above only in data type */\ntypedef struct _CvPixelPosition8s\n{\n    schar*  currline;\n    schar*  topline;\n    schar*  bottomline;\n    int     x;\n    int     width;\n    int     height;\n    int     step;\n    int     step_arr[3];\n} CvPixelPosition8s;\n\n/* this structure differs from the CvPixelPosition8u only in data type */\ntypedef struct _CvPixelPosition32f\n{\n    float*  currline;\n    float*  topline;\n    float*  bottomline;\n    int     x;\n    int     width;\n    int     height;\n    int     step;\n    int     step_arr[3];\n} CvPixelPosition32f;\n\n\n/* Initialize one of the CvPixelPosition structures.   */\n/*  pos    - initialized structure                     */\n/*  origin - pointer to the left-top corner of the ROI */\n/*  step   - width of the whole image in bytes         */\n/*  roi    - width & height of the ROI                 */\n/*  x, y   - initial position                          */\n#define CV_INIT_PIXEL_POS(pos, origin, _step, roi, _x, _y, orientation)    \\\n    (                                                                        \\\n    (pos).step = (_step)/sizeof((pos).currline[0]) * (orientation ? -1 : 1), \\\n    (pos).width = (roi).width,                                               \\\n    (pos).height = (roi).height,                                             \\\n    (pos).bottomline = (origin) + (pos).step*(pos).height,                   \\\n    (pos).topline = (origin) - (pos).step,                                   \\\n    (pos).step_arr[0] = 0,                                                   \\\n    (pos).step_arr[1] = -(pos).step,                                         \\\n    (pos).step_arr[2] = (pos).step,                                          \\\n    (pos).x = (_x),                                                          \\\n    (pos).currline = (origin) + (pos).step*(_y) )\n\n\n/* Move to specified point ( absolute shift ) */\n/*  pos    - position structure               */\n/*  x, y   - coordinates of the new position  */\n/*  cs     - number of the image channels     */\n#define CV_MOVE_TO( pos, _x, _y, cs )                                                   \\\n((pos).currline = (_y) >= 0 && (_y) < (pos).height ? (pos).topline + ((_y)+1)*(pos).step : 0, \\\n (pos).x = (_x) >= 0 && (_x) < (pos).width ? (_x) : 0, (pos).currline + (_x) * (cs) )\n\n/* Get current coordinates                    */\n/*  pos    - position structure               */\n/*  x, y   - coordinates of the new position  */\n/*  cs     - number of the image channels     */\n#define CV_GET_CURRENT( pos, cs )  ((pos).currline + (pos).x * (cs))\n\n/* Move by one pixel relatively to current position */\n/*  pos    - position structure                     */\n/*  cs     - number of the image channels           */\n\n/* left */\n#define CV_MOVE_LEFT( pos, cs ) \\\n ( --(pos).x >= 0 ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* right */\n#define CV_MOVE_RIGHT( pos, cs ) \\\n ( ++(pos).x < (pos).width ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* up */\n#define CV_MOVE_UP( pos, cs ) \\\n (((pos).currline -= (pos).step) != (pos).topline ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* down */\n#define CV_MOVE_DOWN( pos, cs ) \\\n (((pos).currline += (pos).step) != (pos).bottomline ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* left up */\n#define CV_MOVE_LU( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_UP(pos, cs))\n\n/* right up */\n#define CV_MOVE_RU( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_UP(pos, cs))\n\n/* left down */\n#define CV_MOVE_LD( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_DOWN(pos, cs))\n\n/* right down */\n#define CV_MOVE_RD( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_DOWN(pos, cs))\n\n\n\n/* Move by one pixel relatively to current position with wrapping when the position     */\n/* achieves image boundary                                                              */\n/*  pos    - position structure                                                         */\n/*  cs     - number of the image channels                                               */\n\n/* left */\n#define CV_MOVE_LEFT_WRAP( pos, cs ) \\\n ((pos).currline + ( --(pos).x >= 0 ? (pos).x : ((pos).x = (pos).width-1))*(cs))\n\n/* right */\n#define CV_MOVE_RIGHT_WRAP( pos, cs ) \\\n ((pos).currline + ( ++(pos).x < (pos).width ? (pos).x : ((pos).x = 0))*(cs) )\n\n/* up */\n#define CV_MOVE_UP_WRAP( pos, cs ) \\\n    ((((pos).currline -= (pos).step) != (pos).topline ? \\\n    (pos).currline : ((pos).currline = (pos).bottomline - (pos).step)) + (pos).x*(cs) )\n\n/* down */\n#define CV_MOVE_DOWN_WRAP( pos, cs ) \\\n    ((((pos).currline += (pos).step) != (pos).bottomline ? \\\n    (pos).currline : ((pos).currline = (pos).topline + (pos).step)) + (pos).x*(cs) )\n\n/* left up */\n#define CV_MOVE_LU_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs))\n/* right up */\n#define CV_MOVE_RU_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs))\n/* left down */\n#define CV_MOVE_LD_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs))\n/* right down */\n#define CV_MOVE_RD_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs))\n\n/* Numeric constants which used for moving in arbitrary direction  */\nenum\n{\n    CV_SHIFT_NONE = 2,\n    CV_SHIFT_LEFT = 1,\n    CV_SHIFT_RIGHT = 3,\n    CV_SHIFT_UP = 6,\n    CV_SHIFT_DOWN = 10,\n    CV_SHIFT_LU = 5,\n    CV_SHIFT_RU = 7,\n    CV_SHIFT_LD = 9,\n    CV_SHIFT_RD = 11\n};\n\n/* Move by one pixel in specified direction                                     */\n/*  pos    - position structure                                                 */\n/*  shift  - direction ( it's value must be one of the CV_SHIFT_Ö constants ) */\n/*  cs     - number of the image channels                                       */\n#define CV_MOVE_PARAM( pos, shift, cs )                                             \\\n    ( (pos).currline += (pos).step_arr[(shift)>>2], (pos).x += ((shift)&3)-2,       \\\n    ((pos).currline != (pos).topline && (pos).currline != (pos).bottomline &&       \\\n    (pos).x >= 0 && (pos).x < (pos).width) ? (pos).currline + (pos).x*(cs) : 0 )\n\n/* Move by one pixel in specified direction with wrapping when the               */\n/* position achieves image boundary                                              */\n/*  pos    - position structure                                                  */\n/*  shift  - direction ( it's value must be one of the CV_SHIFT_Ö constants )  */\n/*  cs     - number of the image channels                                        */\n#define CV_MOVE_PARAM_WRAP( pos, shift, cs )                                        \\\n    ( (pos).currline += (pos).step_arr[(shift)>>2],                                 \\\n    (pos).currline = ((pos).currline == (pos).topline ?                             \\\n    (pos).bottomline - (pos).step :                                                 \\\n    (pos).currline == (pos).bottomline ?                                            \\\n    (pos).topline + (pos).step : (pos).currline),                                   \\\n                                                                                    \\\n    (pos).x += ((shift)&3)-2,                                                       \\\n    (pos).x = ((pos).x < 0 ? (pos).width-1 : (pos).x >= (pos).width ? 0 : (pos).x), \\\n                                                                                    \\\n    (pos).currline + (pos).x*(cs) )\n\n\ntypedef float*   CvVect32f;\ntypedef float*   CvMatr32f;\ntypedef double*  CvVect64d;\ntypedef double*  CvMatr64d;\n\nCV_EXPORTS void cvUnDistortOnce( const CvArr* src, CvArr* dst,\n                                const float* intrinsic_matrix,\n                                const float* distortion_coeffs,\n                                int interpolate );\n\n/* the two functions below have quite hackerish implementations, use with care\n   (or, which is better, switch to cvUndistortInitMap and cvRemap instead */\nCV_EXPORTS void cvUnDistortInit( const CvArr* src,\n                                CvArr* undistortion_map,\n                                const float* A, const float* k,\n                                int interpolate );\n\nCV_EXPORTS void  cvUnDistort( const CvArr* src, CvArr* dst,\n                             const CvArr* undistortion_map,\n                             int interpolate );\n\n/* Find fundamental matrix */\nCV_EXPORTS void  cvFindFundamentalMatrix( int* points1, int* points2,\n    int numpoints, int method, float* matrix );\n\n\nCV_EXPORTS int cvFindChessBoardCornerGuesses( const void* arr, void* thresharr,\n                               CvMemStorage* storage,\n                               CvSize pattern_size, CvPoint2D32f * corners,\n                               int *corner_count );\n\n/* Calibrates camera using multiple views of calibration pattern */\nCV_EXPORTS void cvCalibrateCamera( int image_count, int* _point_counts,\n    CvSize image_size, CvPoint2D32f* _image_points, CvPoint3D32f* _object_points,\n    float* _distortion_coeffs, float* _camera_matrix, float* _translation_vectors,\n    float* _rotation_matrices, int flags );\n\n\nCV_EXPORTS void cvCalibrateCamera_64d( int image_count, int* _point_counts,\n    CvSize image_size, CvPoint2D64f* _image_points, CvPoint3D64f* _object_points,\n    double* _distortion_coeffs, double* _camera_matrix, double* _translation_vectors,\n    double* _rotation_matrices, int flags );\n\n\n/* Find 3d position of object given intrinsic camera parameters,\n   3d model of the object and projection of the object into view plane */\nCV_EXPORTS void cvFindExtrinsicCameraParams( int point_count,\n    CvSize image_size, CvPoint2D32f* _image_points,\n    CvPoint3D32f* _object_points, float* focal_length,\n    CvPoint2D32f principal_point, float* _distortion_coeffs,\n    float* _rotation_vector, float* _translation_vector );\n\n/* Variant of the previous function that takes double-precision parameters */\nCV_EXPORTS void cvFindExtrinsicCameraParams_64d( int point_count,\n    CvSize image_size, CvPoint2D64f* _image_points,\n    CvPoint3D64f* _object_points, double* focal_length,\n    CvPoint2D64f principal_point, double* _distortion_coeffs,\n    double* _rotation_vector, double* _translation_vector );\n\n/* Rodrigues transform */\nenum\n{\n    CV_RODRIGUES_M2V = 0,\n    CV_RODRIGUES_V2M = 1\n};\n\n/* Converts rotation_matrix matrix to rotation_matrix vector or vice versa */\nCV_EXPORTS void  cvRodrigues( CvMat* rotation_matrix, CvMat* rotation_vector,\n                              CvMat* jacobian, int conv_type );\n\n/* Does reprojection of 3d object points to the view plane */\nCV_EXPORTS void  cvProjectPoints( int point_count, CvPoint3D64f* _object_points,\n    double* _rotation_vector, double*  _translation_vector,\n    double* focal_length, CvPoint2D64f principal_point,\n    double* _distortion, CvPoint2D64f* _image_points,\n    double* _deriv_points_rotation_matrix,\n    double* _deriv_points_translation_vect,\n    double* _deriv_points_focal,\n    double* _deriv_points_principal_point,\n    double* _deriv_points_distortion_coeffs );\n\n\n/* Simpler version of the previous function */\nCV_EXPORTS void  cvProjectPointsSimple( int point_count, CvPoint3D64f* _object_points,\n    double* _rotation_matrix, double*  _translation_vector,\n    double* _camera_matrix, double* _distortion, CvPoint2D64f* _image_points );\n\n\n#define cvMake2DPoints cvConvertPointsHomogeneous\n#define cvMake3DPoints cvConvertPointsHomogeneous\n\n#define cvWarpPerspectiveQMatrix cvGetPerspectiveTransform\n\n#define cvConvertPointsHomogenious cvConvertPointsHomogeneous\n\n\n//////////////////////////////////// feature extractors: obsolete API //////////////////////////////////\n\ntypedef struct CvSURFPoint\n{\n    CvPoint2D32f pt;\n\n    int          laplacian;\n    int          size;\n    float        dir;\n    float        hessian;\n\n} CvSURFPoint;\n\nCV_INLINE CvSURFPoint cvSURFPoint( CvPoint2D32f pt, int laplacian,\n                                  int size, float dir CV_DEFAULT(0),\n                                  float hessian CV_DEFAULT(0))\n{\n    CvSURFPoint kp;\n\n    kp.pt        = pt;\n    kp.laplacian = laplacian;\n    kp.size      = size;\n    kp.dir       = dir;\n    kp.hessian   = hessian;\n\n    return kp;\n}\n\ntypedef struct CvSURFParams\n{\n    int    extended;\n    int    upright;\n    double hessianThreshold;\n\n    int    nOctaves;\n    int    nOctaveLayers;\n\n} CvSURFParams;\n\nCVAPI(CvSURFParams) cvSURFParams( double hessianThreshold, int extended CV_DEFAULT(0) );\n\n// If useProvidedKeyPts!=0, keypoints are not detected, but descriptors are computed\n//  at the locations provided in keypoints (a CvSeq of CvSURFPoint).\nCVAPI(void) cvExtractSURF( const CvArr* img, const CvArr* mask,\n                          CvSeq** keypoints, CvSeq** descriptors,\n                          CvMemStorage* storage, CvSURFParams params,\n                             int useProvidedKeyPts CV_DEFAULT(0)  );\n\n/*!\n Maximal Stable Regions Parameters\n */\ntypedef struct CvMSERParams\n{\n    //! delta, in the code, it compares (size_{i}-size_{i-delta})/size_{i-delta}\n    int delta;\n    //! prune the area which bigger than maxArea\n    int maxArea;\n    //! prune the area which smaller than minArea\n    int minArea;\n    //! prune the area have simliar size to its children\n    float maxVariation;\n    //! trace back to cut off mser with diversity < min_diversity\n    float minDiversity;\n\n    /////// the next few params for MSER of color image\n\n    //! for color image, the evolution steps\n    int maxEvolution;\n    //! the area threshold to cause re-initialize\n    double areaThreshold;\n    //! ignore too small margin\n    double minMargin;\n    //! the aperture size for edge blur\n    int edgeBlurSize;\n} CvMSERParams;\n\nCVAPI(CvMSERParams) cvMSERParams( int delta CV_DEFAULT(5), int min_area CV_DEFAULT(60),\n                                 int max_area CV_DEFAULT(14400), float max_variation CV_DEFAULT(.25f),\n                                 float min_diversity CV_DEFAULT(.2f), int max_evolution CV_DEFAULT(200),\n                                 double area_threshold CV_DEFAULT(1.01),\n                                 double min_margin CV_DEFAULT(.003),\n                                 int edge_blur_size CV_DEFAULT(5) );\n\n// Extracts the contours of Maximally Stable Extremal Regions\nCVAPI(void) cvExtractMSER( CvArr* _img, CvArr* _mask, CvSeq** contours, CvMemStorage* storage, CvMSERParams params );\n\n\ntypedef struct CvStarKeypoint\n{\n    CvPoint pt;\n    int size;\n    float response;\n} CvStarKeypoint;\n\nCV_INLINE CvStarKeypoint cvStarKeypoint(CvPoint pt, int size, float response)\n{\n    CvStarKeypoint kpt;\n    kpt.pt = pt;\n    kpt.size = size;\n    kpt.response = response;\n    return kpt;\n}\n\ntypedef struct CvStarDetectorParams\n{\n    int maxSize;\n    int responseThreshold;\n    int lineThresholdProjected;\n    int lineThresholdBinarized;\n    int suppressNonmaxSize;\n} CvStarDetectorParams;\n\nCV_INLINE CvStarDetectorParams cvStarDetectorParams(\n                                                    int maxSize CV_DEFAULT(45),\n                                                    int responseThreshold CV_DEFAULT(30),\n                                                    int lineThresholdProjected CV_DEFAULT(10),\n                                                    int lineThresholdBinarized CV_DEFAULT(8),\n                                                    int suppressNonmaxSize CV_DEFAULT(5))\n{\n    CvStarDetectorParams params;\n    params.maxSize = maxSize;\n    params.responseThreshold = responseThreshold;\n    params.lineThresholdProjected = lineThresholdProjected;\n    params.lineThresholdBinarized = lineThresholdBinarized;\n    params.suppressNonmaxSize = suppressNonmaxSize;\n\n    return params;\n}\n\nCVAPI(CvSeq*) cvGetStarKeypoints( const CvArr* img, CvMemStorage* storage,\n                                 CvStarDetectorParams params CV_DEFAULT(cvStarDetectorParams()));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/legacy/legacy.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_LEGACY_HPP__\n#define __OPENCV_LEGACY_HPP__\n\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/imgproc/imgproc_c.h\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/calib3d/calib3d.hpp\"\n#include \"opencv2/ml/ml.hpp\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nCVAPI(CvSeq*) cvSegmentImage( const CvArr* srcarr, CvArr* dstarr,\n                                    double canny_threshold,\n                                    double ffill_threshold,\n                                    CvMemStorage* storage );\n\n/****************************************************************************************\\\n*                                  Eigen objects                                         *\n\\****************************************************************************************/\n\ntypedef int (CV_CDECL * CvCallback)(int index, void* buffer, void* user_data);\ntypedef union\n{\n    CvCallback callback;\n    void* data;\n}\nCvInput;\n\n#define CV_EIGOBJ_NO_CALLBACK     0\n#define CV_EIGOBJ_INPUT_CALLBACK  1\n#define CV_EIGOBJ_OUTPUT_CALLBACK 2\n#define CV_EIGOBJ_BOTH_CALLBACK   3\n\n/* Calculates covariation matrix of a set of arrays */\nCVAPI(void)  cvCalcCovarMatrixEx( int nObjects, void* input, int ioFlags,\n                                  int ioBufSize, uchar* buffer, void* userData,\n                                  IplImage* avg, float* covarMatrix );\n\n/* Calculates eigen values and vectors of covariation matrix of a set of\n   arrays */\nCVAPI(void)  cvCalcEigenObjects( int nObjects, void* input, void* output,\n                                 int ioFlags, int ioBufSize, void* userData,\n                                 CvTermCriteria* calcLimit, IplImage* avg,\n                                 float* eigVals );\n\n/* Calculates dot product (obj - avg) * eigObj (i.e. projects image to eigen vector) */\nCVAPI(double)  cvCalcDecompCoeff( IplImage* obj, IplImage* eigObj, IplImage* avg );\n\n/* Projects image to eigen space (finds all decomposion coefficients */\nCVAPI(void)  cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput,\n                                 int ioFlags, void* userData, IplImage* avg,\n                                 float* coeffs );\n\n/* Projects original objects used to calculate eigen space basis to that space */\nCVAPI(void)  cvEigenProjection( void* eigInput, int nEigObjs, int ioFlags,\n                                void* userData, float* coeffs, IplImage* avg,\n                                IplImage* proj );\n\n/****************************************************************************************\\\n*                                       1D/2D HMM                                        *\n\\****************************************************************************************/\n\ntypedef struct CvImgObsInfo\n{\n    int obs_x;\n    int obs_y;\n    int obs_size;\n    float* obs;//consequtive observations\n\n    int* state;/* arr of pairs superstate/state to which observation belong */\n    int* mix;  /* number of mixture to which observation belong */\n\n} CvImgObsInfo;/*struct for 1 image*/\n\ntypedef CvImgObsInfo Cv1DObsInfo;\n\ntypedef struct CvEHMMState\n{\n    int num_mix;        /*number of mixtures in this state*/\n    float* mu;          /*mean vectors corresponding to each mixture*/\n    float* inv_var;     /* square root of inversed variances corresp. to each mixture*/\n    float* log_var_val; /* sum of 0.5 (LN2PI + ln(variance[i]) ) for i=1,n */\n    float* weight;      /*array of mixture weights. Summ of all weights in state is 1. */\n\n} CvEHMMState;\n\ntypedef struct CvEHMM\n{\n    int level; /* 0 - lowest(i.e its states are real states), ..... */\n    int num_states; /* number of HMM states */\n    float*  transP;/*transition probab. matrices for states */\n    float** obsProb; /* if level == 0 - array of brob matrices corresponding to hmm\n                        if level == 1 - martix of matrices */\n    union\n    {\n        CvEHMMState* state; /* if level == 0 points to real states array,\n                               if not - points to embedded hmms */\n        struct CvEHMM* ehmm; /* pointer to an embedded model or NULL, if it is a leaf */\n    } u;\n\n} CvEHMM;\n\n/*CVAPI(int)  icvCreate1DHMM( CvEHMM** this_hmm,\n                                   int state_number, int* num_mix, int obs_size );\n\nCVAPI(int)  icvRelease1DHMM( CvEHMM** phmm );\n\nCVAPI(int)  icvUniform1DSegm( Cv1DObsInfo* obs_info, CvEHMM* hmm );\n\nCVAPI(int)  icvInit1DMixSegm( Cv1DObsInfo** obs_info_array, int num_img, CvEHMM* hmm);\n\nCVAPI(int)  icvEstimate1DHMMStateParams( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm);\n\nCVAPI(int)  icvEstimate1DObsProb( CvImgObsInfo* obs_info, CvEHMM* hmm );\n\nCVAPI(int)  icvEstimate1DTransProb( Cv1DObsInfo** obs_info_array,\n                                           int num_seq,\n                                           CvEHMM* hmm );\n\nCVAPI(float)  icvViterbi( Cv1DObsInfo* obs_info, CvEHMM* hmm);\n\nCVAPI(int)  icv1DMixSegmL2( CvImgObsInfo** obs_info_array, int num_img, CvEHMM* hmm );*/\n\n/*********************************** Embedded HMMs *************************************/\n\n/* Creates 2D HMM */\nCVAPI(CvEHMM*)  cvCreate2DHMM( int* stateNumber, int* numMix, int obsSize );\n\n/* Releases HMM */\nCVAPI(void)  cvRelease2DHMM( CvEHMM** hmm );\n\n#define CV_COUNT_OBS(roi, win, delta, numObs )                                       \\\n{                                                                                    \\\n   (numObs)->width  =((roi)->width  -(win)->width  +(delta)->width)/(delta)->width;  \\\n   (numObs)->height =((roi)->height -(win)->height +(delta)->height)/(delta)->height;\\\n}\n\n/* Creates storage for observation vectors */\nCVAPI(CvImgObsInfo*)  cvCreateObsInfo( CvSize numObs, int obsSize );\n\n/* Releases storage for observation vectors */\nCVAPI(void)  cvReleaseObsInfo( CvImgObsInfo** obs_info );\n\n\n/* The function takes an image on input and and returns the sequnce of observations\n   to be used with an embedded HMM; Each observation is top-left block of DCT\n   coefficient matrix */\nCVAPI(void)  cvImgToObs_DCT( const CvArr* arr, float* obs, CvSize dctSize,\n                             CvSize obsSize, CvSize delta );\n\n\n/* Uniformly segments all observation vectors extracted from image */\nCVAPI(void)  cvUniformImgSegm( CvImgObsInfo* obs_info, CvEHMM* ehmm );\n\n/* Does mixture segmentation of the states of embedded HMM */\nCVAPI(void)  cvInitMixSegm( CvImgObsInfo** obs_info_array,\n                            int num_img, CvEHMM* hmm );\n\n/* Function calculates means, variances, weights of every Gaussian mixture\n   of every low-level state of embedded HMM */\nCVAPI(void)  cvEstimateHMMStateParams( CvImgObsInfo** obs_info_array,\n                                       int num_img, CvEHMM* hmm );\n\n/* Function computes transition probability matrices of embedded HMM\n   given observations segmentation */\nCVAPI(void)  cvEstimateTransProb( CvImgObsInfo** obs_info_array,\n                                  int num_img, CvEHMM* hmm );\n\n/* Function computes probabilities of appearing observations at any state\n   (i.e. computes P(obs|state) for every pair(obs,state)) */\nCVAPI(void)  cvEstimateObsProb( CvImgObsInfo* obs_info,\n                                CvEHMM* hmm );\n\n/* Runs Viterbi algorithm for embedded HMM */\nCVAPI(float)  cvEViterbi( CvImgObsInfo* obs_info, CvEHMM* hmm );\n\n\n/* Function clusters observation vectors from several images\n   given observations segmentation.\n   Euclidean distance used for clustering vectors.\n   Centers of clusters are given means of every mixture */\nCVAPI(void)  cvMixSegmL2( CvImgObsInfo** obs_info_array,\n                          int num_img, CvEHMM* hmm );\n\n/****************************************************************************************\\\n*               A few functions from old stereo gesture recognition demosions            *\n\\****************************************************************************************/\n\n/* Creates hand mask image given several points on the hand */\nCVAPI(void)  cvCreateHandMask( CvSeq* hand_points,\n                                   IplImage *img_mask, CvRect *roi);\n\n/* Finds hand region in range image data */\nCVAPI(void)  cvFindHandRegion (CvPoint3D32f* points, int count,\n                                CvSeq* indexs,\n                                float* line, CvSize2D32f size, int flag,\n                                CvPoint3D32f* center,\n                                CvMemStorage* storage, CvSeq **numbers);\n\n/* Finds hand region in range image data (advanced version) */\nCVAPI(void)  cvFindHandRegionA( CvPoint3D32f* points, int count,\n                                CvSeq* indexs,\n                                float* line, CvSize2D32f size, int jc,\n                                CvPoint3D32f* center,\n                                CvMemStorage* storage, CvSeq **numbers);\n\n/* Calculates the cooficients of the homography matrix */\nCVAPI(void)  cvCalcImageHomography( float* line, CvPoint3D32f* center,\n                                    float* intrinsic, float* homography );\n\n/****************************************************************************************\\\n*                           More operations on sequences                                 *\n\\****************************************************************************************/\n\n/*****************************************************************************************/\n\n#define CV_CURRENT_INT( reader ) (*((int *)(reader).ptr))\n#define CV_PREV_INT( reader ) (*((int *)(reader).prev_elem))\n\n#define  CV_GRAPH_WEIGHTED_VERTEX_FIELDS() CV_GRAPH_VERTEX_FIELDS()\\\n    float weight;\n\n#define  CV_GRAPH_WEIGHTED_EDGE_FIELDS() CV_GRAPH_EDGE_FIELDS()\n\ntypedef struct CvGraphWeightedVtx\n{\n    CV_GRAPH_WEIGHTED_VERTEX_FIELDS()\n} CvGraphWeightedVtx;\n\ntypedef struct CvGraphWeightedEdge\n{\n    CV_GRAPH_WEIGHTED_EDGE_FIELDS()\n} CvGraphWeightedEdge;\n\ntypedef enum CvGraphWeightType\n{\n    CV_NOT_WEIGHTED,\n    CV_WEIGHTED_VTX,\n    CV_WEIGHTED_EDGE,\n    CV_WEIGHTED_ALL\n} CvGraphWeightType;\n\n\n/* Calculates histogram of a contour */\nCVAPI(void)  cvCalcPGH( const CvSeq* contour, CvHistogram* hist );\n\n#define CV_DOMINANT_IPAN 1\n\n/* Finds high-curvature points of the contour */\nCVAPI(CvSeq*) cvFindDominantPoints( CvSeq* contour, CvMemStorage* storage,\n                                   int method CV_DEFAULT(CV_DOMINANT_IPAN),\n                                   double parameter1 CV_DEFAULT(0),\n                                   double parameter2 CV_DEFAULT(0),\n                                   double parameter3 CV_DEFAULT(0),\n                                   double parameter4 CV_DEFAULT(0));\n\n/*****************************************************************************************/\n\n\n/*******************************Stereo correspondence*************************************/\n\ntypedef struct CvCliqueFinder\n{\n    CvGraph* graph;\n    int**    adj_matr;\n    int N; //graph size\n\n    // stacks, counters etc/\n    int k; //stack size\n    int* current_comp;\n    int** All;\n\n    int* ne;\n    int* ce;\n    int* fixp; //node with minimal disconnections\n    int* nod;\n    int* s; //for selected candidate\n    int status;\n    int best_score;\n    int weighted;\n    int weighted_edges;\n    float best_weight;\n    float* edge_weights;\n    float* vertex_weights;\n    float* cur_weight;\n    float* cand_weight;\n\n} CvCliqueFinder;\n\n#define CLIQUE_TIME_OFF 2\n#define CLIQUE_FOUND 1\n#define CLIQUE_END   0\n\n/*CVAPI(void) cvStartFindCliques( CvGraph* graph, CvCliqueFinder* finder, int reverse,\n                                   int weighted CV_DEFAULT(0),  int weighted_edges CV_DEFAULT(0));\nCVAPI(int) cvFindNextMaximalClique( CvCliqueFinder* finder, int* clock_rest CV_DEFAULT(0) );\nCVAPI(void) cvEndFindCliques( CvCliqueFinder* finder );\n\nCVAPI(void) cvBronKerbosch( CvGraph* graph );*/\n\n\n/*F///////////////////////////////////////////////////////////////////////////////////////\n//\n//    Name:    cvSubgraphWeight\n//    Purpose: finds weight of subgraph in a graph\n//    Context:\n//    Parameters:\n//      graph - input graph.\n//      subgraph - sequence of pairwise different ints.  These are indices of vertices of subgraph.\n//      weight_type - describes the way we measure weight.\n//            one of the following:\n//            CV_NOT_WEIGHTED - weight of a clique is simply its size\n//            CV_WEIGHTED_VTX - weight of a clique is the sum of weights of its vertices\n//            CV_WEIGHTED_EDGE - the same but edges\n//            CV_WEIGHTED_ALL - the same but both edges and vertices\n//      weight_vtx - optional vector of floats, with size = graph->total.\n//            If weight_type is either CV_WEIGHTED_VTX or CV_WEIGHTED_ALL\n//            weights of vertices must be provided.  If weight_vtx not zero\n//            these weights considered to be here, otherwise function assumes\n//            that vertices of graph are inherited from CvGraphWeightedVtx.\n//      weight_edge - optional matrix of floats, of width and height = graph->total.\n//            If weight_type is either CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL\n//            weights of edges ought to be supplied.  If weight_edge is not zero\n//            function finds them here, otherwise function expects\n//            edges of graph to be inherited from CvGraphWeightedEdge.\n//            If this parameter is not zero structure of the graph is determined from matrix\n//            rather than from CvGraphEdge's.  In particular, elements corresponding to\n//            absent edges should be zero.\n//    Returns:\n//      weight of subgraph.\n//    Notes:\n//F*/\n/*CVAPI(float) cvSubgraphWeight( CvGraph *graph, CvSeq *subgraph,\n                                  CvGraphWeightType weight_type CV_DEFAULT(CV_NOT_WEIGHTED),\n                                  CvVect32f weight_vtx CV_DEFAULT(0),\n                                  CvMatr32f weight_edge CV_DEFAULT(0) );*/\n\n\n/*F///////////////////////////////////////////////////////////////////////////////////////\n//\n//    Name:    cvFindCliqueEx\n//    Purpose: tries to find clique with maximum possible weight in a graph\n//    Context:\n//    Parameters:\n//      graph - input graph.\n//      storage - memory storage to be used by the result.\n//      is_complementary - optional flag showing whether function should seek for clique\n//            in complementary graph.\n//      weight_type - describes our notion about weight.\n//            one of the following:\n//            CV_NOT_WEIGHTED - weight of a clique is simply its size\n//            CV_WEIGHTED_VTX - weight of a clique is the sum of weights of its vertices\n//            CV_WEIGHTED_EDGE - the same but edges\n//            CV_WEIGHTED_ALL - the same but both edges and vertices\n//      weight_vtx - optional vector of floats, with size = graph->total.\n//            If weight_type is either CV_WEIGHTED_VTX or CV_WEIGHTED_ALL\n//            weights of vertices must be provided.  If weight_vtx not zero\n//            these weights considered to be here, otherwise function assumes\n//            that vertices of graph are inherited from CvGraphWeightedVtx.\n//      weight_edge - optional matrix of floats, of width and height = graph->total.\n//            If weight_type is either CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL\n//            weights of edges ought to be supplied.  If weight_edge is not zero\n//            function finds them here, otherwise function expects\n//            edges of graph to be inherited from CvGraphWeightedEdge.\n//            Note that in case of CV_WEIGHTED_EDGE or CV_WEIGHTED_ALL\n//            nonzero is_complementary implies nonzero weight_edge.\n//      start_clique - optional sequence of pairwise different ints.  They are indices of\n//            vertices that shall be present in the output clique.\n//      subgraph_of_ban - optional sequence of (maybe equal) ints.  They are indices of\n//            vertices that shall not be present in the output clique.\n//      clique_weight_ptr - optional output parameter.  Weight of found clique stored here.\n//      num_generations - optional number of generations in evolutionary part of algorithm,\n//            zero forces to return first found clique.\n//      quality - optional parameter determining degree of required quality/speed tradeoff.\n//            Must be in the range from 0 to 9.\n//            0 is fast and dirty, 9 is slow but hopefully yields good clique.\n//    Returns:\n//      sequence of pairwise different ints.\n//      These are indices of vertices that form found clique.\n//    Notes:\n//      in cases of CV_WEIGHTED_EDGE and CV_WEIGHTED_ALL weights should be nonnegative.\n//      start_clique has a priority over subgraph_of_ban.\n//F*/\n/*CVAPI(CvSeq*) cvFindCliqueEx( CvGraph *graph, CvMemStorage *storage,\n                                 int is_complementary CV_DEFAULT(0),\n                                 CvGraphWeightType weight_type CV_DEFAULT(CV_NOT_WEIGHTED),\n                                 CvVect32f weight_vtx CV_DEFAULT(0),\n                                 CvMatr32f weight_edge CV_DEFAULT(0),\n                                 CvSeq *start_clique CV_DEFAULT(0),\n                                 CvSeq *subgraph_of_ban CV_DEFAULT(0),\n                                 float *clique_weight_ptr CV_DEFAULT(0),\n                                 int num_generations CV_DEFAULT(3),\n                                 int quality CV_DEFAULT(2) );*/\n\n\n#define CV_UNDEF_SC_PARAM         12345 //default value of parameters\n\n#define CV_IDP_BIRCHFIELD_PARAM1  25\n#define CV_IDP_BIRCHFIELD_PARAM2  5\n#define CV_IDP_BIRCHFIELD_PARAM3  12\n#define CV_IDP_BIRCHFIELD_PARAM4  15\n#define CV_IDP_BIRCHFIELD_PARAM5  25\n\n\n#define  CV_DISPARITY_BIRCHFIELD  0\n\n\n/*F///////////////////////////////////////////////////////////////////////////\n//\n//    Name:    cvFindStereoCorrespondence\n//    Purpose: find stereo correspondence on stereo-pair\n//    Context:\n//    Parameters:\n//      leftImage - left image of stereo-pair (format 8uC1).\n//      rightImage - right image of stereo-pair (format 8uC1).\n//   mode - mode of correspondence retrieval (now CV_DISPARITY_BIRCHFIELD only)\n//      dispImage - destination disparity image\n//      maxDisparity - maximal disparity\n//      param1, param2, param3, param4, param5 - parameters of algorithm\n//    Returns:\n//    Notes:\n//      Images must be rectified.\n//      All images must have format 8uC1.\n//F*/\nCVAPI(void)\ncvFindStereoCorrespondence(\n                   const  CvArr* leftImage, const  CvArr* rightImage,\n                   int     mode,\n                   CvArr*  dispImage,\n                   int     maxDisparity,\n                   double  param1 CV_DEFAULT(CV_UNDEF_SC_PARAM),\n                   double  param2 CV_DEFAULT(CV_UNDEF_SC_PARAM),\n                   double  param3 CV_DEFAULT(CV_UNDEF_SC_PARAM),\n                   double  param4 CV_DEFAULT(CV_UNDEF_SC_PARAM),\n                   double  param5 CV_DEFAULT(CV_UNDEF_SC_PARAM) );\n\n/*****************************************************************************************/\n/************ Epiline functions *******************/\n\n\n\ntypedef struct CvStereoLineCoeff\n{\n    double Xcoef;\n    double XcoefA;\n    double XcoefB;\n    double XcoefAB;\n\n    double Ycoef;\n    double YcoefA;\n    double YcoefB;\n    double YcoefAB;\n\n    double Zcoef;\n    double ZcoefA;\n    double ZcoefB;\n    double ZcoefAB;\n}CvStereoLineCoeff;\n\n\ntypedef struct CvCamera\n{\n    float   imgSize[2]; /* size of the camera view, used during calibration */\n    float   matrix[9]; /* intinsic camera parameters:  [ fx 0 cx; 0 fy cy; 0 0 1 ] */\n    float   distortion[4]; /* distortion coefficients - two coefficients for radial distortion\n                              and another two for tangential: [ k1 k2 p1 p2 ] */\n    float   rotMatr[9];\n    float   transVect[3]; /* rotation matrix and transition vector relatively\n                             to some reference point in the space. */\n} CvCamera;\n\ntypedef struct CvStereoCamera\n{\n    CvCamera* camera[2]; /* two individual camera parameters */\n    float fundMatr[9]; /* fundamental matrix */\n\n    /* New part for stereo */\n    CvPoint3D32f epipole[2];\n    CvPoint2D32f quad[2][4]; /* coordinates of destination quadrangle after\n                                epipolar geometry rectification */\n    double coeffs[2][3][3];/* coefficients for transformation */\n    CvPoint2D32f border[2][4];\n    CvSize warpSize;\n    CvStereoLineCoeff* lineCoeffs;\n    int needSwapCameras;/* flag set to 1 if need to swap cameras for good reconstruction */\n    float rotMatrix[9];\n    float transVector[3];\n} CvStereoCamera;\n\n\ntypedef struct CvContourOrientation\n{\n    float egvals[2];\n    float egvects[4];\n\n    float max, min; // minimum and maximum projections\n    int imax, imin;\n} CvContourOrientation;\n\n#define CV_CAMERA_TO_WARP 1\n#define CV_WARP_TO_CAMERA 2\n\nCVAPI(int) icvConvertWarpCoordinates(double coeffs[3][3],\n                                CvPoint2D32f* cameraPoint,\n                                CvPoint2D32f* warpPoint,\n                                int direction);\n\nCVAPI(int) icvGetSymPoint3D(  CvPoint3D64f pointCorner,\n                            CvPoint3D64f point1,\n                            CvPoint3D64f point2,\n                            CvPoint3D64f *pointSym2);\n\nCVAPI(void) icvGetPieceLength3D(CvPoint3D64f point1,CvPoint3D64f point2,double* dist);\n\nCVAPI(int) icvCompute3DPoint(    double alpha,double betta,\n                            CvStereoLineCoeff* coeffs,\n                            CvPoint3D64f* point);\n\nCVAPI(int) icvCreateConvertMatrVect( double*     rotMatr1,\n                                double*     transVect1,\n                                double*     rotMatr2,\n                                double*     transVect2,\n                                double*     convRotMatr,\n                                double*     convTransVect);\n\nCVAPI(int) icvConvertPointSystem(CvPoint3D64f  M2,\n                            CvPoint3D64f* M1,\n                            double*     rotMatr,\n                            double*     transVect\n                            );\n\nCVAPI(int) icvComputeCoeffForStereo(  CvStereoCamera* stereoCamera);\n\nCVAPI(int) icvGetCrossPieceVector(CvPoint2D32f p1_start,CvPoint2D32f p1_end,CvPoint2D32f v2_start,CvPoint2D32f v2_end,CvPoint2D32f *cross);\nCVAPI(int) icvGetCrossLineDirect(CvPoint2D32f p1,CvPoint2D32f p2,float a,float b,float c,CvPoint2D32f* cross);\nCVAPI(float) icvDefinePointPosition(CvPoint2D32f point1,CvPoint2D32f point2,CvPoint2D32f point);\nCVAPI(int) icvStereoCalibration( int numImages,\n                            int* nums,\n                            CvSize imageSize,\n                            CvPoint2D32f* imagePoints1,\n                            CvPoint2D32f* imagePoints2,\n                            CvPoint3D32f* objectPoints,\n                            CvStereoCamera* stereoparams\n                           );\n\n\nCVAPI(int) icvComputeRestStereoParams(CvStereoCamera *stereoparams);\n\nCVAPI(void) cvComputePerspectiveMap( const double coeffs[3][3], CvArr* rectMapX, CvArr* rectMapY );\n\nCVAPI(int) icvComCoeffForLine(   CvPoint2D64f point1,\n                            CvPoint2D64f point2,\n                            CvPoint2D64f point3,\n                            CvPoint2D64f point4,\n                            double*    camMatr1,\n                            double*    rotMatr1,\n                            double*    transVect1,\n                            double*    camMatr2,\n                            double*    rotMatr2,\n                            double*    transVect2,\n                            CvStereoLineCoeff*    coeffs,\n                            int* needSwapCameras);\n\nCVAPI(int) icvGetDirectionForPoint(  CvPoint2D64f point,\n                                double* camMatr,\n                                CvPoint3D64f* direct);\n\nCVAPI(int) icvGetCrossLines(CvPoint3D64f point11,CvPoint3D64f point12,\n                       CvPoint3D64f point21,CvPoint3D64f point22,\n                       CvPoint3D64f* midPoint);\n\nCVAPI(int) icvComputeStereoLineCoeffs(   CvPoint3D64f pointA,\n                                    CvPoint3D64f pointB,\n                                    CvPoint3D64f pointCam1,\n                                    double gamma,\n                                    CvStereoLineCoeff*    coeffs);\n\n/*CVAPI(int) icvComputeFundMatrEpipoles ( double* camMatr1,\n                                    double*     rotMatr1,\n                                    double*     transVect1,\n                                    double*     camMatr2,\n                                    double*     rotMatr2,\n                                    double*     transVect2,\n                                    CvPoint2D64f* epipole1,\n                                    CvPoint2D64f* epipole2,\n                                    double*     fundMatr);*/\n\nCVAPI(int) icvGetAngleLine( CvPoint2D64f startPoint, CvSize imageSize,CvPoint2D64f *point1,CvPoint2D64f *point2);\n\nCVAPI(void) icvGetCoefForPiece(   CvPoint2D64f p_start,CvPoint2D64f p_end,\n                        double *a,double *b,double *c,\n                        int* result);\n\n/*CVAPI(void) icvGetCommonArea( CvSize imageSize,\n                    CvPoint2D64f epipole1,CvPoint2D64f epipole2,\n                    double* fundMatr,\n                    double* coeff11,double* coeff12,\n                    double* coeff21,double* coeff22,\n                    int* result);*/\n\nCVAPI(void) icvComputeeInfiniteProject1(double*    rotMatr,\n                                     double*    camMatr1,\n                                     double*    camMatr2,\n                                     CvPoint2D32f point1,\n                                     CvPoint2D32f *point2);\n\nCVAPI(void) icvComputeeInfiniteProject2(double*    rotMatr,\n                                     double*    camMatr1,\n                                     double*    camMatr2,\n                                     CvPoint2D32f* point1,\n                                     CvPoint2D32f point2);\n\nCVAPI(void) icvGetCrossDirectDirect(  double* direct1,double* direct2,\n                            CvPoint2D64f *cross,int* result);\n\nCVAPI(void) icvGetCrossPieceDirect(   CvPoint2D64f p_start,CvPoint2D64f p_end,\n                            double a,double b,double c,\n                            CvPoint2D64f *cross,int* result);\n\nCVAPI(void) icvGetCrossPiecePiece( CvPoint2D64f p1_start,CvPoint2D64f p1_end,\n                            CvPoint2D64f p2_start,CvPoint2D64f p2_end,\n                            CvPoint2D64f* cross,\n                            int* result);\n\nCVAPI(void) icvGetPieceLength(CvPoint2D64f point1,CvPoint2D64f point2,double* dist);\n\nCVAPI(void) icvGetCrossRectDirect(    CvSize imageSize,\n                            double a,double b,double c,\n                            CvPoint2D64f *start,CvPoint2D64f *end,\n                            int* result);\n\nCVAPI(void) icvProjectPointToImage(   CvPoint3D64f point,\n                            double* camMatr,double* rotMatr,double* transVect,\n                            CvPoint2D64f* projPoint);\n\nCVAPI(void) icvGetQuadsTransform( CvSize        imageSize,\n                        double*     camMatr1,\n                        double*     rotMatr1,\n                        double*     transVect1,\n                        double*     camMatr2,\n                        double*     rotMatr2,\n                        double*     transVect2,\n                        CvSize*       warpSize,\n                        double quad1[4][2],\n                        double quad2[4][2],\n                        double*     fundMatr,\n                        CvPoint3D64f* epipole1,\n                        CvPoint3D64f* epipole2\n                        );\n\nCVAPI(void) icvGetQuadsTransformStruct(  CvStereoCamera* stereoCamera);\n\nCVAPI(void) icvComputeStereoParamsForCameras(CvStereoCamera* stereoCamera);\n\nCVAPI(void) icvGetCutPiece(   double* areaLineCoef1,double* areaLineCoef2,\n                    CvPoint2D64f epipole,\n                    CvSize imageSize,\n                    CvPoint2D64f* point11,CvPoint2D64f* point12,\n                    CvPoint2D64f* point21,CvPoint2D64f* point22,\n                    int* result);\n\nCVAPI(void) icvGetMiddleAnglePoint(   CvPoint2D64f basePoint,\n                            CvPoint2D64f point1,CvPoint2D64f point2,\n                            CvPoint2D64f* midPoint);\n\nCVAPI(void) icvGetNormalDirect(double* direct,CvPoint2D64f point,double* normDirect);\n\nCVAPI(double) icvGetVect(CvPoint2D64f basePoint,CvPoint2D64f point1,CvPoint2D64f point2);\n\nCVAPI(void) icvProjectPointToDirect(  CvPoint2D64f point,double* lineCoeff,\n                            CvPoint2D64f* projectPoint);\n\nCVAPI(void) icvGetDistanceFromPointToDirect( CvPoint2D64f point,double* lineCoef,double*dist);\n\nCVAPI(IplImage*) icvCreateIsometricImage( IplImage* src, IplImage* dst,\n                              int desired_depth, int desired_num_channels );\n\nCVAPI(void) cvDeInterlace( const CvArr* frame, CvArr* fieldEven, CvArr* fieldOdd );\n\n/*CVAPI(int) icvSelectBestRt(           int           numImages,\n                                    int*          numPoints,\n                                    CvSize        imageSize,\n                                    CvPoint2D32f* imagePoints1,\n                                    CvPoint2D32f* imagePoints2,\n                                    CvPoint3D32f* objectPoints,\n\n                                    CvMatr32f     cameraMatrix1,\n                                    CvVect32f     distortion1,\n                                    CvMatr32f     rotMatrs1,\n                                    CvVect32f     transVects1,\n\n                                    CvMatr32f     cameraMatrix2,\n                                    CvVect32f     distortion2,\n                                    CvMatr32f     rotMatrs2,\n                                    CvVect32f     transVects2,\n\n                                    CvMatr32f     bestRotMatr,\n                                    CvVect32f     bestTransVect\n                                    );*/\n\n\n/****************************************************************************************\\\n*                                     Contour Tree                                       *\n\\****************************************************************************************/\n\n/* Contour tree header */\ntypedef struct CvContourTree\n{\n    CV_SEQUENCE_FIELDS()\n    CvPoint p1;            /* the first point of the binary tree root segment */\n    CvPoint p2;            /* the last point of the binary tree root segment */\n} CvContourTree;\n\n/* Builds hierarhical representation of a contour */\nCVAPI(CvContourTree*)  cvCreateContourTree( const CvSeq* contour,\n                                            CvMemStorage* storage,\n                                            double threshold );\n\n/* Reconstruct (completelly or partially) contour a from contour tree */\nCVAPI(CvSeq*)  cvContourFromContourTree( const CvContourTree* tree,\n                                         CvMemStorage* storage,\n                                         CvTermCriteria criteria );\n\n/* Compares two contour trees */\nenum { CV_CONTOUR_TREES_MATCH_I1 = 1 };\n\nCVAPI(double)  cvMatchContourTrees( const CvContourTree* tree1,\n                                    const CvContourTree* tree2,\n                                    int method, double threshold );\n\n/****************************************************************************************\\\n*                                   Contour Morphing                                     *\n\\****************************************************************************************/\n\n/* finds correspondence between two contours */\nCvSeq* cvCalcContoursCorrespondence( const CvSeq* contour1,\n                                     const CvSeq* contour2,\n                                     CvMemStorage* storage);\n\n/* morphs contours using the pre-calculated correspondence:\n   alpha=0 ~ contour1, alpha=1 ~ contour2 */\nCvSeq* cvMorphContours( const CvSeq* contour1, const CvSeq* contour2,\n                        CvSeq* corr, double alpha,\n                        CvMemStorage* storage );\n\n\n/****************************************************************************************\\\n*                                   Active Contours                                      *\n\\****************************************************************************************/\n\n#define  CV_VALUE  1\n#define  CV_ARRAY  2\n/* Updates active contour in order to minimize its cummulative\n   (internal and external) energy. */\nCVAPI(void)  cvSnakeImage( const IplImage* image, CvPoint* points,\n                           int  length, float* alpha,\n                           float* beta, float* gamma,\n                           int coeff_usage, CvSize  win,\n                           CvTermCriteria criteria, int calc_gradient CV_DEFAULT(1));\n\n/****************************************************************************************\\\n*                                    Texture Descriptors                                 *\n\\****************************************************************************************/\n\n#define CV_GLCM_OPTIMIZATION_NONE                   -2\n#define CV_GLCM_OPTIMIZATION_LUT                    -1\n#define CV_GLCM_OPTIMIZATION_HISTOGRAM              0\n\n#define CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST    10\n#define CV_GLCMDESC_OPTIMIZATION_ALLOWTRIPLENEST    11\n#define CV_GLCMDESC_OPTIMIZATION_HISTOGRAM          4\n\n#define CV_GLCMDESC_ENTROPY                         0\n#define CV_GLCMDESC_ENERGY                          1\n#define CV_GLCMDESC_HOMOGENITY                      2\n#define CV_GLCMDESC_CONTRAST                        3\n#define CV_GLCMDESC_CLUSTERTENDENCY                 4\n#define CV_GLCMDESC_CLUSTERSHADE                    5\n#define CV_GLCMDESC_CORRELATION                     6\n#define CV_GLCMDESC_CORRELATIONINFO1                7\n#define CV_GLCMDESC_CORRELATIONINFO2                8\n#define CV_GLCMDESC_MAXIMUMPROBABILITY              9\n\n#define CV_GLCM_ALL                                 0\n#define CV_GLCM_GLCM                                1\n#define CV_GLCM_DESC                                2\n\ntypedef struct CvGLCM CvGLCM;\n\nCVAPI(CvGLCM*) cvCreateGLCM( const IplImage* srcImage,\n                                int stepMagnitude,\n                                const int* stepDirections CV_DEFAULT(0),\n                                int numStepDirections CV_DEFAULT(0),\n                                int optimizationType CV_DEFAULT(CV_GLCM_OPTIMIZATION_NONE));\n\nCVAPI(void) cvReleaseGLCM( CvGLCM** GLCM, int flag CV_DEFAULT(CV_GLCM_ALL));\n\nCVAPI(void) cvCreateGLCMDescriptors( CvGLCM* destGLCM,\n                                        int descriptorOptimizationType\n                                        CV_DEFAULT(CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST));\n\nCVAPI(double) cvGetGLCMDescriptor( CvGLCM* GLCM, int step, int descriptor );\n\nCVAPI(void) cvGetGLCMDescriptorStatistics( CvGLCM* GLCM, int descriptor,\n                                              double* average, double* standardDeviation );\n\nCVAPI(IplImage*) cvCreateGLCMImage( CvGLCM* GLCM, int step );\n\n/****************************************************************************************\\\n*                                  Face eyes&mouth tracking                              *\n\\****************************************************************************************/\n\n\ntypedef struct CvFaceTracker CvFaceTracker;\n\n#define CV_NUM_FACE_ELEMENTS    3\nenum CV_FACE_ELEMENTS\n{\n    CV_FACE_MOUTH = 0,\n    CV_FACE_LEFT_EYE = 1,\n    CV_FACE_RIGHT_EYE = 2\n};\n\nCVAPI(CvFaceTracker*) cvInitFaceTracker(CvFaceTracker* pFaceTracking, const IplImage* imgGray,\n                                                CvRect* pRects, int nRects);\nCVAPI(int) cvTrackFace( CvFaceTracker* pFaceTracker, IplImage* imgGray,\n                              CvRect* pRects, int nRects,\n                              CvPoint* ptRotate, double* dbAngleRotate);\nCVAPI(void) cvReleaseFaceTracker(CvFaceTracker** ppFaceTracker);\n\n\ntypedef struct CvFace\n{\n    CvRect MouthRect;\n    CvRect LeftEyeRect;\n    CvRect RightEyeRect;\n} CvFaceData;\n\nCvSeq * cvFindFace(IplImage * Image,CvMemStorage* storage);\nCvSeq * cvPostBoostingFindFace(IplImage * Image,CvMemStorage* storage);\n\n\n/****************************************************************************************\\\n*                                         3D Tracker                                     *\n\\****************************************************************************************/\n\ntypedef unsigned char CvBool;\n\ntypedef struct Cv3dTracker2dTrackedObject\n{\n    int id;\n    CvPoint2D32f p; // pgruebele: So we do not loose precision, this needs to be float\n} Cv3dTracker2dTrackedObject;\n\nCV_INLINE Cv3dTracker2dTrackedObject cv3dTracker2dTrackedObject(int id, CvPoint2D32f p)\n{\n    Cv3dTracker2dTrackedObject r;\n    r.id = id;\n    r.p = p;\n    return r;\n}\n\ntypedef struct Cv3dTrackerTrackedObject\n{\n    int id;\n    CvPoint3D32f p;             // location of the tracked object\n} Cv3dTrackerTrackedObject;\n\nCV_INLINE Cv3dTrackerTrackedObject cv3dTrackerTrackedObject(int id, CvPoint3D32f p)\n{\n    Cv3dTrackerTrackedObject r;\n    r.id = id;\n    r.p = p;\n    return r;\n}\n\ntypedef struct Cv3dTrackerCameraInfo\n{\n    CvBool valid;\n    float mat[4][4];              /* maps camera coordinates to world coordinates */\n    CvPoint2D32f principal_point; /* copied from intrinsics so this structure */\n                                  /* has all the info we need */\n} Cv3dTrackerCameraInfo;\n\ntypedef struct Cv3dTrackerCameraIntrinsics\n{\n    CvPoint2D32f principal_point;\n    float focal_length[2];\n    float distortion[4];\n} Cv3dTrackerCameraIntrinsics;\n\nCVAPI(CvBool) cv3dTrackerCalibrateCameras(int num_cameras,\n                     const Cv3dTrackerCameraIntrinsics camera_intrinsics[], /* size is num_cameras */\n                     CvSize etalon_size,\n                     float square_size,\n                     IplImage *samples[],                                   /* size is num_cameras */\n                     Cv3dTrackerCameraInfo camera_info[]);                  /* size is num_cameras */\n\nCVAPI(int)  cv3dTrackerLocateObjects(int num_cameras, int num_objects,\n                   const Cv3dTrackerCameraInfo camera_info[],        /* size is num_cameras */\n                   const Cv3dTracker2dTrackedObject tracking_info[], /* size is num_objects*num_cameras */\n                   Cv3dTrackerTrackedObject tracked_objects[]);      /* size is num_objects */\n/****************************************************************************************\n tracking_info is a rectangular array; one row per camera, num_objects elements per row.\n The id field of any unused slots must be -1. Ids need not be ordered or consecutive. On\n completion, the return value is the number of objects located; i.e., the number of objects\n visible by more than one camera. The id field of any unused slots in tracked objects is\n set to -1.\n****************************************************************************************/\n\n\n/****************************************************************************************\\\n*                           Skeletons and Linear-Contour Models                          *\n\\****************************************************************************************/\n\ntypedef enum CvLeeParameters\n{\n    CV_LEE_INT = 0,\n    CV_LEE_FLOAT = 1,\n    CV_LEE_DOUBLE = 2,\n    CV_LEE_AUTO = -1,\n    CV_LEE_ERODE = 0,\n    CV_LEE_ZOOM = 1,\n    CV_LEE_NON = 2\n} CvLeeParameters;\n\n#define CV_NEXT_VORONOISITE2D( SITE ) ((SITE)->edge[0]->site[((SITE)->edge[0]->site[0] == (SITE))])\n#define CV_PREV_VORONOISITE2D( SITE ) ((SITE)->edge[1]->site[((SITE)->edge[1]->site[0] == (SITE))])\n#define CV_FIRST_VORONOIEDGE2D( SITE ) ((SITE)->edge[0])\n#define CV_LAST_VORONOIEDGE2D( SITE ) ((SITE)->edge[1])\n#define CV_NEXT_VORONOIEDGE2D( EDGE, SITE ) ((EDGE)->next[(EDGE)->site[0] != (SITE)])\n#define CV_PREV_VORONOIEDGE2D( EDGE, SITE ) ((EDGE)->next[2 + ((EDGE)->site[0] != (SITE))])\n#define CV_VORONOIEDGE2D_BEGINNODE( EDGE, SITE ) ((EDGE)->node[((EDGE)->site[0] != (SITE))])\n#define CV_VORONOIEDGE2D_ENDNODE( EDGE, SITE ) ((EDGE)->node[((EDGE)->site[0] == (SITE))])\n#define CV_TWIN_VORONOISITE2D( SITE, EDGE ) ( (EDGE)->site[((EDGE)->site[0] == (SITE))])\n\n#define CV_VORONOISITE2D_FIELDS()    \\\n    struct CvVoronoiNode2D *node[2]; \\\n    struct CvVoronoiEdge2D *edge[2];\n\ntypedef struct CvVoronoiSite2D\n{\n    CV_VORONOISITE2D_FIELDS()\n    struct CvVoronoiSite2D *next[2];\n} CvVoronoiSite2D;\n\n#define CV_VORONOIEDGE2D_FIELDS()    \\\n    struct CvVoronoiNode2D *node[2]; \\\n    struct CvVoronoiSite2D *site[2]; \\\n    struct CvVoronoiEdge2D *next[4];\n\ntypedef struct CvVoronoiEdge2D\n{\n    CV_VORONOIEDGE2D_FIELDS()\n} CvVoronoiEdge2D;\n\n#define CV_VORONOINODE2D_FIELDS()       \\\n    CV_SET_ELEM_FIELDS(CvVoronoiNode2D) \\\n    CvPoint2D32f pt;                    \\\n    float radius;\n\ntypedef struct CvVoronoiNode2D\n{\n    CV_VORONOINODE2D_FIELDS()\n} CvVoronoiNode2D;\n\n#define CV_VORONOIDIAGRAM2D_FIELDS() \\\n    CV_GRAPH_FIELDS()                \\\n    CvSet *sites;\n\ntypedef struct CvVoronoiDiagram2D\n{\n    CV_VORONOIDIAGRAM2D_FIELDS()\n} CvVoronoiDiagram2D;\n\n/* Computes Voronoi Diagram for given polygons with holes */\nCVAPI(int)  cvVoronoiDiagramFromContour(CvSeq* ContourSeq,\n                                           CvVoronoiDiagram2D** VoronoiDiagram,\n                                           CvMemStorage* VoronoiStorage,\n                                           CvLeeParameters contour_type CV_DEFAULT(CV_LEE_INT),\n                                           int contour_orientation CV_DEFAULT(-1),\n                                           int attempt_number CV_DEFAULT(10));\n\n/* Computes Voronoi Diagram for domains in given image */\nCVAPI(int)  cvVoronoiDiagramFromImage(IplImage* pImage,\n                                         CvSeq** ContourSeq,\n                                         CvVoronoiDiagram2D** VoronoiDiagram,\n                                         CvMemStorage* VoronoiStorage,\n                                         CvLeeParameters regularization_method CV_DEFAULT(CV_LEE_NON),\n                                         float approx_precision CV_DEFAULT(CV_LEE_AUTO));\n\n/* Deallocates the storage */\nCVAPI(void) cvReleaseVoronoiStorage(CvVoronoiDiagram2D* VoronoiDiagram,\n                                          CvMemStorage** pVoronoiStorage);\n\n/*********************** Linear-Contour Model ****************************/\n\nstruct CvLCMEdge;\nstruct CvLCMNode;\n\ntypedef struct CvLCMEdge\n{\n    CV_GRAPH_EDGE_FIELDS()\n    CvSeq* chain;\n    float width;\n    int index1;\n    int index2;\n} CvLCMEdge;\n\ntypedef struct CvLCMNode\n{\n    CV_GRAPH_VERTEX_FIELDS()\n    CvContour* contour;\n} CvLCMNode;\n\n\n/* Computes hybrid model from Voronoi Diagram */\nCVAPI(CvGraph*) cvLinearContorModelFromVoronoiDiagram(CvVoronoiDiagram2D* VoronoiDiagram,\n                                                         float maxWidth);\n\n/* Releases hybrid model storage */\nCVAPI(int) cvReleaseLinearContorModelStorage(CvGraph** Graph);\n\n\n/* two stereo-related functions */\n\nCVAPI(void) cvInitPerspectiveTransform( CvSize size, const CvPoint2D32f vertex[4], double matrix[3][3],\n                                              CvArr* rectMap );\n\n/*CVAPI(void) cvInitStereoRectification( CvStereoCamera* params,\n                                             CvArr* rectMap1, CvArr* rectMap2,\n                                             int do_undistortion );*/\n\n/*************************** View Morphing Functions ************************/\n\ntypedef struct CvMatrix3\n{\n    float m[3][3];\n} CvMatrix3;\n\n/* The order of the function corresponds to the order they should appear in\n   the view morphing pipeline */\n\n/* Finds ending points of scanlines on left and right images of stereo-pair */\nCVAPI(void)  cvMakeScanlines( const CvMatrix3* matrix, CvSize  img_size,\n                              int*  scanlines1, int*  scanlines2,\n                              int*  lengths1, int*  lengths2,\n                              int*  line_count );\n\n/* Grab pixel values from scanlines and stores them sequentially\n   (some sort of perspective image transform) */\nCVAPI(void)  cvPreWarpImage( int       line_count,\n                             IplImage* img,\n                             uchar*    dst,\n                             int*      dst_nums,\n                             int*      scanlines);\n\n/* Approximate each grabbed scanline by a sequence of runs\n   (lossy run-length compression) */\nCVAPI(void)  cvFindRuns( int    line_count,\n                         uchar* prewarp1,\n                         uchar* prewarp2,\n                         int*   line_lengths1,\n                         int*   line_lengths2,\n                         int*   runs1,\n                         int*   runs2,\n                         int*   num_runs1,\n                         int*   num_runs2);\n\n/* Compares two sets of compressed scanlines */\nCVAPI(void)  cvDynamicCorrespondMulti( int  line_count,\n                                       int* first,\n                                       int* first_runs,\n                                       int* second,\n                                       int* second_runs,\n                                       int* first_corr,\n                                       int* second_corr);\n\n/* Finds scanline ending coordinates for some intermediate \"virtual\" camera position */\nCVAPI(void)  cvMakeAlphaScanlines( int*  scanlines1,\n                                   int*  scanlines2,\n                                   int*  scanlinesA,\n                                   int*  lengths,\n                                   int   line_count,\n                                   float alpha);\n\n/* Blends data of the left and right image scanlines to get\n   pixel values of \"virtual\" image scanlines */\nCVAPI(void)  cvMorphEpilinesMulti( int    line_count,\n                                   uchar* first_pix,\n                                   int*   first_num,\n                                   uchar* second_pix,\n                                   int*   second_num,\n                                   uchar* dst_pix,\n                                   int*   dst_num,\n                                   float  alpha,\n                                   int*   first,\n                                   int*   first_runs,\n                                   int*   second,\n                                   int*   second_runs,\n                                   int*   first_corr,\n                                   int*   second_corr);\n\n/* Does reverse warping of the morphing result to make\n   it fill the destination image rectangle */\nCVAPI(void)  cvPostWarpImage( int       line_count,\n                              uchar*    src,\n                              int*      src_nums,\n                              IplImage* img,\n                              int*      scanlines);\n\n/* Deletes Moire (missed pixels that appear due to discretization) */\nCVAPI(void)  cvDeleteMoire( IplImage*  img );\n\n\ntypedef struct CvConDensation\n{\n    int MP;\n    int DP;\n    float* DynamMatr;       /* Matrix of the linear Dynamics system  */\n    float* State;           /* Vector of State                       */\n    int SamplesNum;         /* Number of the Samples                 */\n    float** flSamples;      /* arr of the Sample Vectors             */\n    float** flNewSamples;   /* temporary array of the Sample Vectors */\n    float* flConfidence;    /* Confidence for each Sample            */\n    float* flCumulative;    /* Cumulative confidence                 */\n    float* Temp;            /* Temporary vector                      */\n    float* RandomSample;    /* RandomVector to update sample set     */\n    struct CvRandState* RandS; /* Array of structures to generate random vectors */\n} CvConDensation;\n\n/* Creates ConDensation filter state */\nCVAPI(CvConDensation*)  cvCreateConDensation( int dynam_params,\n                                             int measure_params,\n                                             int sample_count );\n\n/* Releases ConDensation filter state */\nCVAPI(void)  cvReleaseConDensation( CvConDensation** condens );\n\n/* Updates ConDensation filter by time (predict future state of the system) */\nCVAPI(void)  cvConDensUpdateByTime( CvConDensation* condens);\n\n/* Initializes ConDensation filter samples  */\nCVAPI(void)  cvConDensInitSampleSet( CvConDensation* condens, CvMat* lower_bound, CvMat* upper_bound );\n\nCV_INLINE int iplWidth( const IplImage* img )\n{\n    return !img ? 0 : !img->roi ? img->width : img->roi->width;\n}\n\nCV_INLINE int iplHeight( const IplImage* img )\n{\n    return !img ? 0 : !img->roi ? img->height : img->roi->height;\n}\n\n#ifdef __cplusplus\n}\n#endif\n\n#ifdef __cplusplus\n\n/****************************************************************************************\\\n*                                   Calibration engine                                   *\n\\****************************************************************************************/\n\ntypedef enum CvCalibEtalonType\n{\n    CV_CALIB_ETALON_USER = -1,\n    CV_CALIB_ETALON_CHESSBOARD = 0,\n    CV_CALIB_ETALON_CHECKERBOARD = CV_CALIB_ETALON_CHESSBOARD\n}\nCvCalibEtalonType;\n\nclass CV_EXPORTS CvCalibFilter\n{\npublic:\n    /* Constructor & destructor */\n    CvCalibFilter();\n    virtual ~CvCalibFilter();\n\n    /* Sets etalon type - one for all cameras.\n       etalonParams is used in case of pre-defined etalons (such as chessboard).\n       Number of elements in etalonParams is determined by etalonType.\n       E.g., if etalon type is CV_ETALON_TYPE_CHESSBOARD then:\n         etalonParams[0] is number of squares per one side of etalon\n         etalonParams[1] is number of squares per another side of etalon\n         etalonParams[2] is linear size of squares in the board in arbitrary units.\n       pointCount & points are used in case of\n       CV_CALIB_ETALON_USER (user-defined) etalon. */\n    virtual bool\n        SetEtalon( CvCalibEtalonType etalonType, double* etalonParams,\n                   int pointCount = 0, CvPoint2D32f* points = 0 );\n\n    /* Retrieves etalon parameters/or and points */\n    virtual CvCalibEtalonType\n        GetEtalon( int* paramCount = 0, const double** etalonParams = 0,\n                   int* pointCount = 0, const CvPoint2D32f** etalonPoints = 0 ) const;\n\n    /* Sets number of cameras calibrated simultaneously. It is equal to 1 initially */\n    virtual void SetCameraCount( int cameraCount );\n\n    /* Retrieves number of cameras */\n    int GetCameraCount() const { return cameraCount; }\n\n    /* Starts cameras calibration */\n    virtual bool SetFrames( int totalFrames );\n\n    /* Stops cameras calibration */\n    virtual void Stop( bool calibrate = false );\n\n    /* Retrieves number of cameras */\n    bool IsCalibrated() const { return isCalibrated; }\n\n    /* Feeds another serie of snapshots (one per each camera) to filter.\n       Etalon points on these images are found automatically.\n       If the function can't locate points, it returns false */\n    virtual bool FindEtalon( IplImage** imgs );\n\n    /* The same but takes matrices */\n    virtual bool FindEtalon( CvMat** imgs );\n\n    /* Lower-level function for feeding filter with already found etalon points.\n       Array of point arrays for each camera is passed. */\n    virtual bool Push( const CvPoint2D32f** points = 0 );\n\n    /* Returns total number of accepted frames and, optionally,\n       total number of frames to collect */\n    virtual int GetFrameCount( int* framesTotal = 0 ) const;\n\n    /* Retrieves camera parameters for specified camera.\n       If camera is not calibrated the function returns 0 */\n    virtual const CvCamera* GetCameraParams( int idx = 0 ) const;\n\n    virtual const CvStereoCamera* GetStereoParams() const;\n\n    /* Sets camera parameters for all cameras */\n    virtual bool SetCameraParams( CvCamera* params );\n\n    /* Saves all camera parameters to file */\n    virtual bool SaveCameraParams( const char* filename );\n\n    /* Loads all camera parameters from file */\n    virtual bool LoadCameraParams( const char* filename );\n\n    /* Undistorts images using camera parameters. Some of src pointers can be NULL. */\n    virtual bool Undistort( IplImage** src, IplImage** dst );\n\n    /* Undistorts images using camera parameters. Some of src pointers can be NULL. */\n    virtual bool Undistort( CvMat** src, CvMat** dst );\n\n    /* Returns array of etalon points detected/partally detected\n       on the latest frame for idx-th camera */\n    virtual bool GetLatestPoints( int idx, CvPoint2D32f** pts,\n                                                  int* count, bool* found );\n\n    /* Draw the latest detected/partially detected etalon */\n    virtual void DrawPoints( IplImage** dst );\n\n    /* Draw the latest detected/partially detected etalon */\n    virtual void DrawPoints( CvMat** dst );\n\n    virtual bool Rectify( IplImage** srcarr, IplImage** dstarr );\n    virtual bool Rectify( CvMat** srcarr, CvMat** dstarr );\n\nprotected:\n\n    enum { MAX_CAMERAS = 3 };\n\n    /* etalon data */\n    CvCalibEtalonType  etalonType;\n    int     etalonParamCount;\n    double* etalonParams;\n    int     etalonPointCount;\n    CvPoint2D32f* etalonPoints;\n    CvSize  imgSize;\n    CvMat*  grayImg;\n    CvMat*  tempImg;\n    CvMemStorage* storage;\n\n    /* camera data */\n    int     cameraCount;\n    CvCamera cameraParams[MAX_CAMERAS];\n    CvStereoCamera stereo;\n    CvPoint2D32f* points[MAX_CAMERAS];\n    CvMat*  undistMap[MAX_CAMERAS][2];\n    CvMat*  undistImg;\n    int     latestCounts[MAX_CAMERAS];\n    CvPoint2D32f* latestPoints[MAX_CAMERAS];\n    CvMat*  rectMap[MAX_CAMERAS][2];\n\n    /* Added by Valery */\n    //CvStereoCamera stereoParams;\n\n    int     maxPoints;\n    int     framesTotal;\n    int     framesAccepted;\n    bool    isCalibrated;\n};\n\n#include <iosfwd>\n#include <limits>\n\nclass CV_EXPORTS CvImage\n{\npublic:\n    CvImage() : image(0), refcount(0) {}\n    CvImage( CvSize _size, int _depth, int _channels )\n    {\n        image = cvCreateImage( _size, _depth, _channels );\n        refcount = image ? new int(1) : 0;\n    }\n\n    CvImage( IplImage* img ) : image(img)\n    {\n        refcount = image ? new int(1) : 0;\n    }\n\n    CvImage( const CvImage& img ) : image(img.image), refcount(img.refcount)\n    {\n        if( refcount ) ++(*refcount);\n    }\n\n    CvImage( const char* filename, const char* imgname=0, int color=-1 ) : image(0), refcount(0)\n    { load( filename, imgname, color ); }\n\n    CvImage( CvFileStorage* fs, const char* mapname, const char* imgname ) : image(0), refcount(0)\n    { read( fs, mapname, imgname ); }\n\n    CvImage( CvFileStorage* fs, const char* seqname, int idx ) : image(0), refcount(0)\n    { read( fs, seqname, idx ); }\n\n    ~CvImage()\n    {\n        if( refcount && !(--*refcount) )\n        {\n            cvReleaseImage( &image );\n            delete refcount;\n        }\n    }\n\n    CvImage clone() { return CvImage(image ? cvCloneImage(image) : 0); }\n\n    void create( CvSize _size, int _depth, int _channels )\n    {\n        if( !image || !refcount ||\n           image->width != _size.width || image->height != _size.height ||\n           image->depth != _depth || image->nChannels != _channels )\n            attach( cvCreateImage( _size, _depth, _channels ));\n    }\n\n    void release() { detach(); }\n    void clear() { detach(); }\n\n    void attach( IplImage* img, bool use_refcount=true )\n    {\n        if( refcount && --*refcount == 0 )\n        {\n            cvReleaseImage( &image );\n            delete refcount;\n        }\n        image = img;\n        refcount = use_refcount && image ? new int(1) : 0;\n    }\n\n    void detach()\n    {\n        if( refcount && --*refcount == 0 )\n        {\n            cvReleaseImage( &image );\n            delete refcount;\n        }\n        image = 0;\n        refcount = 0;\n    }\n\n    bool load( const char* filename, const char* imgname=0, int color=-1 );\n    bool read( CvFileStorage* fs, const char* mapname, const char* imgname );\n    bool read( CvFileStorage* fs, const char* seqname, int idx );\n    void save( const char* filename, const char* imgname, const int* params=0 );\n    void write( CvFileStorage* fs, const char* imgname );\n\n    void show( const char* window_name );\n    bool is_valid() { return image != 0; }\n\n    int width() const { return image ? image->width : 0; }\n    int height() const { return image ? image->height : 0; }\n\n    CvSize size() const { return image ? cvSize(image->width, image->height) : cvSize(0,0); }\n\n    CvSize roi_size() const\n    {\n        return !image ? cvSize(0,0) :\n        !image->roi ? cvSize(image->width,image->height) :\n        cvSize(image->roi->width, image->roi->height);\n    }\n\n    CvRect roi() const\n    {\n        return !image ? cvRect(0,0,0,0) :\n        !image->roi ? cvRect(0,0,image->width,image->height) :\n        cvRect(image->roi->xOffset,image->roi->yOffset,\n               image->roi->width,image->roi->height);\n    }\n\n    int coi() const { return !image || !image->roi ? 0 : image->roi->coi; }\n\n    void set_roi(CvRect _roi) { cvSetImageROI(image,_roi); }\n    void reset_roi() { cvResetImageROI(image); }\n    void set_coi(int _coi) { cvSetImageCOI(image,_coi); }\n    int depth() const { return image ? image->depth : 0; }\n    int channels() const { return image ? image->nChannels : 0; }\n    int pix_size() const { return image ? ((image->depth & 255)>>3)*image->nChannels : 0; }\n\n    uchar* data() { return image ? (uchar*)image->imageData : 0; }\n    const uchar* data() const { return image ? (const uchar*)image->imageData : 0; }\n    int step() const { return image ? image->widthStep : 0; }\n    int origin() const { return image ? image->origin : 0; }\n\n    uchar* roi_row(int y)\n    {\n        assert(0<=y);\n        assert(!image ?\n               1 : image->roi ?\n               y<image->roi->height : y<image->height);\n\n        return !image ? 0 :\n        !image->roi ?\n        (uchar*)(image->imageData + y*image->widthStep) :\n        (uchar*)(image->imageData + (y+image->roi->yOffset)*image->widthStep +\n                 image->roi->xOffset*((image->depth & 255)>>3)*image->nChannels);\n    }\n\n    const uchar* roi_row(int y) const\n    {\n        assert(0<=y);\n        assert(!image ?\n               1 : image->roi ?\n               y<image->roi->height : y<image->height);\n\n        return !image ? 0 :\n        !image->roi ?\n        (const uchar*)(image->imageData + y*image->widthStep) :\n        (const uchar*)(image->imageData + (y+image->roi->yOffset)*image->widthStep +\n                       image->roi->xOffset*((image->depth & 255)>>3)*image->nChannels);\n    }\n\n    operator const IplImage* () const { return image; }\n    operator IplImage* () { return image; }\n\n    CvImage& operator = (const CvImage& img)\n    {\n        if( img.refcount )\n            ++*img.refcount;\n        if( refcount && !(--*refcount) )\n            cvReleaseImage( &image );\n        image=img.image;\n        refcount=img.refcount;\n        return *this;\n    }\n\nprotected:\n    IplImage* image;\n    int* refcount;\n};\n\n\nclass CV_EXPORTS CvMatrix\n{\npublic:\n    CvMatrix() : matrix(0) {}\n    CvMatrix( int _rows, int _cols, int _type )\n    { matrix = cvCreateMat( _rows, _cols, _type ); }\n\n    CvMatrix( int _rows, int _cols, int _type, CvMat* hdr,\n             void* _data=0, int _step=CV_AUTOSTEP )\n    { matrix = cvInitMatHeader( hdr, _rows, _cols, _type, _data, _step ); }\n\n    CvMatrix( int rows, int cols, int type, CvMemStorage* storage, bool alloc_data=true );\n\n    CvMatrix( int _rows, int _cols, int _type, void* _data, int _step=CV_AUTOSTEP )\n    { matrix = cvCreateMatHeader( _rows, _cols, _type );\n        cvSetData( matrix, _data, _step ); }\n\n    CvMatrix( CvMat* m )\n    { matrix = m; }\n\n    CvMatrix( const CvMatrix& m )\n    {\n        matrix = m.matrix;\n        addref();\n    }\n\n    CvMatrix( const char* filename, const char* matname=0, int color=-1 ) : matrix(0)\n    {  load( filename, matname, color ); }\n\n    CvMatrix( CvFileStorage* fs, const char* mapname, const char* matname ) : matrix(0)\n    {  read( fs, mapname, matname ); }\n\n    CvMatrix( CvFileStorage* fs, const char* seqname, int idx ) : matrix(0)\n    {  read( fs, seqname, idx ); }\n\n    ~CvMatrix()\n    {\n        release();\n    }\n\n    CvMatrix clone() { return CvMatrix(matrix ? cvCloneMat(matrix) : 0); }\n\n    void set( CvMat* m, bool add_ref )\n    {\n        release();\n        matrix = m;\n        if( add_ref )\n            addref();\n    }\n\n    void create( int _rows, int _cols, int _type )\n    {\n        if( !matrix || !matrix->refcount ||\n           matrix->rows != _rows || matrix->cols != _cols ||\n           CV_MAT_TYPE(matrix->type) != _type )\n            set( cvCreateMat( _rows, _cols, _type ), false );\n    }\n\n    void addref() const\n    {\n        if( matrix )\n        {\n            if( matrix->hdr_refcount )\n                ++matrix->hdr_refcount;\n            else if( matrix->refcount )\n                ++*matrix->refcount;\n        }\n    }\n\n    void release()\n    {\n        if( matrix )\n        {\n            if( matrix->hdr_refcount )\n            {\n                if( --matrix->hdr_refcount == 0 )\n                    cvReleaseMat( &matrix );\n            }\n            else if( matrix->refcount )\n            {\n                if( --*matrix->refcount == 0 )\n                    cvFree( &matrix->refcount );\n            }\n            matrix = 0;\n        }\n    }\n\n    void clear()\n    {\n        release();\n    }\n\n    bool load( const char* filename, const char* matname=0, int color=-1 );\n    bool read( CvFileStorage* fs, const char* mapname, const char* matname );\n    bool read( CvFileStorage* fs, const char* seqname, int idx );\n    void save( const char* filename, const char* matname, const int* params=0 );\n    void write( CvFileStorage* fs, const char* matname );\n\n    void show( const char* window_name );\n\n    bool is_valid() { return matrix != 0; }\n\n    int rows() const { return matrix ? matrix->rows : 0; }\n    int cols() const { return matrix ? matrix->cols : 0; }\n\n    CvSize size() const\n    {\n        return !matrix ? cvSize(0,0) : cvSize(matrix->rows,matrix->cols);\n    }\n\n    int type() const { return matrix ? CV_MAT_TYPE(matrix->type) : 0; }\n    int depth() const { return matrix ? CV_MAT_DEPTH(matrix->type) : 0; }\n    int channels() const { return matrix ? CV_MAT_CN(matrix->type) : 0; }\n    int pix_size() const { return matrix ? CV_ELEM_SIZE(matrix->type) : 0; }\n\n    uchar* data() { return matrix ? matrix->data.ptr : 0; }\n    const uchar* data() const { return matrix ? matrix->data.ptr : 0; }\n    int step() const { return matrix ? matrix->step : 0; }\n\n    void set_data( void* _data, int _step=CV_AUTOSTEP )\n    { cvSetData( matrix, _data, _step ); }\n\n    uchar* row(int i) { return !matrix ? 0 : matrix->data.ptr + i*matrix->step; }\n    const uchar* row(int i) const\n    { return !matrix ? 0 : matrix->data.ptr + i*matrix->step; }\n\n    operator const CvMat* () const { return matrix; }\n    operator CvMat* () { return matrix; }\n\n    CvMatrix& operator = (const CvMatrix& _m)\n    {\n        _m.addref();\n        release();\n        matrix = _m.matrix;\n        return *this;\n    }\n\nprotected:\n    CvMat* matrix;\n};\n\n/****************************************************************************************\\\n *                                       CamShiftTracker                                  *\n \\****************************************************************************************/\n\nclass CV_EXPORTS CvCamShiftTracker\n{\npublic:\n\n    CvCamShiftTracker();\n    virtual ~CvCamShiftTracker();\n\n    /**** Characteristics of the object that are calculated by track_object method *****/\n    float   get_orientation() const // orientation of the object in degrees\n    { return m_box.angle; }\n    float   get_length() const // the larger linear size of the object\n    { return m_box.size.height; }\n    float   get_width() const // the smaller linear size of the object\n    { return m_box.size.width; }\n    CvPoint2D32f get_center() const // center of the object\n    { return m_box.center; }\n    CvRect get_window() const // bounding rectangle for the object\n    { return m_comp.rect; }\n\n    /*********************** Tracking parameters ************************/\n    int     get_threshold() const // thresholding value that applied to back project\n    { return m_threshold; }\n\n    int     get_hist_dims( int* dims = 0 ) const // returns number of histogram dimensions and sets\n    { return m_hist ? cvGetDims( m_hist->bins, dims ) : 0; }\n\n    int     get_min_ch_val( int channel ) const // get the minimum allowed value of the specified channel\n    { return m_min_ch_val[channel]; }\n\n    int     get_max_ch_val( int channel ) const // get the maximum allowed value of the specified channel\n    { return m_max_ch_val[channel]; }\n\n    // set initial object rectangle (must be called before initial calculation of the histogram)\n    bool    set_window( CvRect window)\n    { m_comp.rect = window; return true; }\n\n    bool    set_threshold( int threshold ) // threshold applied to the histogram bins\n    { m_threshold = threshold; return true; }\n\n    bool    set_hist_bin_range( int dim, int min_val, int max_val );\n\n    bool    set_hist_dims( int c_dims, int* dims );// set the histogram parameters\n\n    bool    set_min_ch_val( int channel, int val ) // set the minimum allowed value of the specified channel\n    { m_min_ch_val[channel] = val; return true; }\n    bool    set_max_ch_val( int channel, int val ) // set the maximum allowed value of the specified channel\n    { m_max_ch_val[channel] = val; return true; }\n\n    /************************ The processing methods *********************************/\n    // update object position\n    virtual bool  track_object( const IplImage* cur_frame );\n\n    // update object histogram\n    virtual bool  update_histogram( const IplImage* cur_frame );\n\n    // reset histogram\n    virtual void  reset_histogram();\n\n    /************************ Retrieving internal data *******************************/\n    // get back project image\n    virtual IplImage* get_back_project()\n    { return m_back_project; }\n\n    float query( int* bin ) const\n    { return m_hist ? (float)cvGetRealND(m_hist->bins, bin) : 0.f; }\n\nprotected:\n\n    // internal method for color conversion: fills m_color_planes group\n    virtual void color_transform( const IplImage* img );\n\n    CvHistogram* m_hist;\n\n    CvBox2D    m_box;\n    CvConnectedComp m_comp;\n\n    float      m_hist_ranges_data[CV_MAX_DIM][2];\n    float*     m_hist_ranges[CV_MAX_DIM];\n\n    int        m_min_ch_val[CV_MAX_DIM];\n    int        m_max_ch_val[CV_MAX_DIM];\n    int        m_threshold;\n\n    IplImage*  m_color_planes[CV_MAX_DIM];\n    IplImage*  m_back_project;\n    IplImage*  m_temp;\n    IplImage*  m_mask;\n};\n\n/****************************************************************************************\\\n*                              Expectation - Maximization                                *\n\\****************************************************************************************/\nstruct CV_EXPORTS_W_MAP CvEMParams\n{\n    CvEMParams();\n    CvEMParams( int nclusters, int cov_mat_type=cv::EM::COV_MAT_DIAGONAL,\n                int start_step=cv::EM::START_AUTO_STEP,\n                CvTermCriteria term_crit=cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 100, FLT_EPSILON),\n                const CvMat* probs=0, const CvMat* weights=0, const CvMat* means=0, const CvMat** covs=0 );\n\n    CV_PROP_RW int nclusters;\n    CV_PROP_RW int cov_mat_type;\n    CV_PROP_RW int start_step;\n    const CvMat* probs;\n    const CvMat* weights;\n    const CvMat* means;\n    const CvMat** covs;\n    CV_PROP_RW CvTermCriteria term_crit;\n};\n\n\nclass CV_EXPORTS_W CvEM : public CvStatModel\n{\npublic:\n    // Type of covariation matrices\n    enum { COV_MAT_SPHERICAL=cv::EM::COV_MAT_SPHERICAL,\n           COV_MAT_DIAGONAL =cv::EM::COV_MAT_DIAGONAL,\n           COV_MAT_GENERIC  =cv::EM::COV_MAT_GENERIC };\n\n    // The initial step\n    enum { START_E_STEP=cv::EM::START_E_STEP,\n           START_M_STEP=cv::EM::START_M_STEP,\n           START_AUTO_STEP=cv::EM::START_AUTO_STEP };\n\n    CV_WRAP CvEM();\n    CvEM( const CvMat* samples, const CvMat* sampleIdx=0,\n          CvEMParams params=CvEMParams(), CvMat* labels=0 );\n\n    virtual ~CvEM();\n\n    virtual bool train( const CvMat* samples, const CvMat* sampleIdx=0,\n                        CvEMParams params=CvEMParams(), CvMat* labels=0 );\n\n    virtual float predict( const CvMat* sample, CV_OUT CvMat* probs ) const;\n\n    CV_WRAP CvEM( const cv::Mat& samples, const cv::Mat& sampleIdx=cv::Mat(),\n                  CvEMParams params=CvEMParams() );\n\n    CV_WRAP virtual bool train( const cv::Mat& samples,\n                                const cv::Mat& sampleIdx=cv::Mat(),\n                                CvEMParams params=CvEMParams(),\n                                CV_OUT cv::Mat* labels=0 );\n\n    CV_WRAP virtual float predict( const cv::Mat& sample, CV_OUT cv::Mat* probs=0 ) const;\n    CV_WRAP virtual double calcLikelihood( const cv::Mat &sample ) const;\n\n    CV_WRAP int getNClusters() const;\n    CV_WRAP cv::Mat getMeans() const;\n    CV_WRAP void getCovs(CV_OUT std::vector<cv::Mat>& covs) const;\n    CV_WRAP cv::Mat getWeights() const;\n    CV_WRAP cv::Mat getProbs() const;\n\n    CV_WRAP inline double getLikelihood() const { return emObj.isTrained() ? logLikelihood : DBL_MAX; }\n\n    CV_WRAP virtual void clear();\n\n    int get_nclusters() const;\n    const CvMat* get_means() const;\n    const CvMat** get_covs() const;\n    const CvMat* get_weights() const;\n    const CvMat* get_probs() const;\n\n    inline double get_log_likelihood() const { return getLikelihood(); }\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void write( CvFileStorage* fs, const char* name ) const;\n\nprotected:\n    void set_mat_hdrs();\n\n    cv::EM emObj;\n    cv::Mat probs;\n    double logLikelihood;\n\n    CvMat meansHdr;\n    std::vector<CvMat> covsHdrs;\n    std::vector<CvMat*> covsPtrs;\n    CvMat weightsHdr;\n    CvMat probsHdr;\n};\n\nnamespace cv\n{\n\ntypedef CvEMParams EMParams;\ntypedef CvEM ExpectationMaximization;\n\n/*!\n The Patch Generator class\n */\nclass CV_EXPORTS PatchGenerator\n{\npublic:\n    PatchGenerator();\n    PatchGenerator(double _backgroundMin, double _backgroundMax,\n                   double _noiseRange, bool _randomBlur=true,\n                   double _lambdaMin=0.6, double _lambdaMax=1.5,\n                   double _thetaMin=-CV_PI, double _thetaMax=CV_PI,\n                   double _phiMin=-CV_PI, double _phiMax=CV_PI );\n    void operator()(const Mat& image, Point2f pt, Mat& patch, Size patchSize, RNG& rng) const;\n    void operator()(const Mat& image, const Mat& transform, Mat& patch,\n                    Size patchSize, RNG& rng) const;\n    void warpWholeImage(const Mat& image, Mat& matT, Mat& buf,\n                        CV_OUT Mat& warped, int border, RNG& rng) const;\n    void generateRandomTransform(Point2f srcCenter, Point2f dstCenter,\n                                 CV_OUT Mat& transform, RNG& rng,\n                                 bool inverse=false) const;\n    void setAffineParam(double lambda, double theta, double phi);\n\n    double backgroundMin, backgroundMax;\n    double noiseRange;\n    bool randomBlur;\n    double lambdaMin, lambdaMax;\n    double thetaMin, thetaMax;\n    double phiMin, phiMax;\n};\n\n\nclass CV_EXPORTS LDetector\n{\npublic:\n    LDetector();\n    LDetector(int _radius, int _threshold, int _nOctaves,\n              int _nViews, double _baseFeatureSize, double _clusteringDistance);\n    void operator()(const Mat& image,\n                    CV_OUT vector<KeyPoint>& keypoints,\n                    int maxCount=0, bool scaleCoords=true) const;\n    void operator()(const vector<Mat>& pyr,\n                    CV_OUT vector<KeyPoint>& keypoints,\n                    int maxCount=0, bool scaleCoords=true) const;\n    void getMostStable2D(const Mat& image, CV_OUT vector<KeyPoint>& keypoints,\n                         int maxCount, const PatchGenerator& patchGenerator) const;\n    void setVerbose(bool verbose);\n\n    void read(const FileNode& node);\n    void write(FileStorage& fs, const String& name=String()) const;\n\n    int radius;\n    int threshold;\n    int nOctaves;\n    int nViews;\n    bool verbose;\n\n    double baseFeatureSize;\n    double clusteringDistance;\n};\n\ntypedef LDetector YAPE;\n\nclass CV_EXPORTS FernClassifier\n{\npublic:\n    FernClassifier();\n    FernClassifier(const FileNode& node);\n    FernClassifier(const vector<vector<Point2f> >& points,\n                   const vector<Mat>& refimgs,\n                   const vector<vector<int> >& labels=vector<vector<int> >(),\n                   int _nclasses=0, int _patchSize=PATCH_SIZE,\n                   int _signatureSize=DEFAULT_SIGNATURE_SIZE,\n                   int _nstructs=DEFAULT_STRUCTS,\n                   int _structSize=DEFAULT_STRUCT_SIZE,\n                   int _nviews=DEFAULT_VIEWS,\n                   int _compressionMethod=COMPRESSION_NONE,\n                   const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual ~FernClassifier();\n    virtual void read(const FileNode& n);\n    virtual void write(FileStorage& fs, const String& name=String()) const;\n    virtual void trainFromSingleView(const Mat& image,\n                                     const vector<KeyPoint>& keypoints,\n                                     int _patchSize=PATCH_SIZE,\n                                     int _signatureSize=DEFAULT_SIGNATURE_SIZE,\n                                     int _nstructs=DEFAULT_STRUCTS,\n                                     int _structSize=DEFAULT_STRUCT_SIZE,\n                                     int _nviews=DEFAULT_VIEWS,\n                                     int _compressionMethod=COMPRESSION_NONE,\n                                     const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual void train(const vector<vector<Point2f> >& points,\n                       const vector<Mat>& refimgs,\n                       const vector<vector<int> >& labels=vector<vector<int> >(),\n                       int _nclasses=0, int _patchSize=PATCH_SIZE,\n                       int _signatureSize=DEFAULT_SIGNATURE_SIZE,\n                       int _nstructs=DEFAULT_STRUCTS,\n                       int _structSize=DEFAULT_STRUCT_SIZE,\n                       int _nviews=DEFAULT_VIEWS,\n                       int _compressionMethod=COMPRESSION_NONE,\n                       const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual int operator()(const Mat& img, Point2f kpt, vector<float>& signature) const;\n    virtual int operator()(const Mat& patch, vector<float>& signature) const;\n    virtual void clear();\n    virtual bool empty() const;\n    void setVerbose(bool verbose);\n\n    int getClassCount() const;\n    int getStructCount() const;\n    int getStructSize() const;\n    int getSignatureSize() const;\n    int getCompressionMethod() const;\n    Size getPatchSize() const;\n\n    struct Feature\n    {\n        uchar x1, y1, x2, y2;\n        Feature() : x1(0), y1(0), x2(0), y2(0) {}\n        Feature(int _x1, int _y1, int _x2, int _y2)\n        : x1((uchar)_x1), y1((uchar)_y1), x2((uchar)_x2), y2((uchar)_y2)\n        {}\n        template<typename _Tp> bool operator ()(const Mat_<_Tp>& patch) const\n        { return patch(y1,x1) > patch(y2, x2); }\n    };\n\n    enum\n    {\n        PATCH_SIZE = 31,\n        DEFAULT_STRUCTS = 50,\n        DEFAULT_STRUCT_SIZE = 9,\n        DEFAULT_VIEWS = 5000,\n        DEFAULT_SIGNATURE_SIZE = 176,\n        COMPRESSION_NONE = 0,\n        COMPRESSION_RANDOM_PROJ = 1,\n        COMPRESSION_PCA = 2,\n        DEFAULT_COMPRESSION_METHOD = COMPRESSION_NONE\n    };\n\nprotected:\n    virtual void prepare(int _nclasses, int _patchSize, int _signatureSize,\n                         int _nstructs, int _structSize,\n                         int _nviews, int _compressionMethod);\n    virtual void finalize(RNG& rng);\n    virtual int getLeaf(int fidx, const Mat& patch) const;\n\n    bool verbose;\n    int nstructs;\n    int structSize;\n    int nclasses;\n    int signatureSize;\n    int compressionMethod;\n    int leavesPerStruct;\n    Size patchSize;\n    vector<Feature> features;\n    vector<int> classCounters;\n    vector<float> posteriors;\n};\n\n\n/****************************************************************************************\\\n *                                 Calonder Classifier                                    *\n \\****************************************************************************************/\n\nstruct RTreeNode;\n\nstruct CV_EXPORTS BaseKeypoint\n{\n    int x;\n    int y;\n    IplImage* image;\n\n    BaseKeypoint()\n    : x(0), y(0), image(NULL)\n    {}\n\n    BaseKeypoint(int _x, int _y, IplImage* _image)\n    : x(_x), y(_y), image(_image)\n    {}\n};\n\nclass CV_EXPORTS RandomizedTree\n{\npublic:\n    friend class RTreeClassifier;\n\n    static const uchar PATCH_SIZE = 32;\n    static const int DEFAULT_DEPTH = 9;\n    static const int DEFAULT_VIEWS = 5000;\n    static const size_t DEFAULT_REDUCED_NUM_DIM = 176;\n    static float GET_LOWER_QUANT_PERC() { return .03f; }\n    static float GET_UPPER_QUANT_PERC() { return .92f; }\n\n    RandomizedTree();\n    ~RandomizedTree();\n\n    void train(vector<BaseKeypoint> const& base_set, RNG &rng,\n               int depth, int views, size_t reduced_num_dim, int num_quant_bits);\n    void train(vector<BaseKeypoint> const& base_set, RNG &rng,\n               PatchGenerator &make_patch, int depth, int views, size_t reduced_num_dim,\n               int num_quant_bits);\n\n    // following two funcs are EXPERIMENTAL (do not use unless you know exactly what you do)\n    static void quantizeVector(float *vec, int dim, int N, float bnds[2], int clamp_mode=0);\n    static void quantizeVector(float *src, int dim, int N, float bnds[2], uchar *dst);\n\n    // patch_data must be a 32x32 array (no row padding)\n    float* getPosterior(uchar* patch_data);\n    const float* getPosterior(uchar* patch_data) const;\n    uchar* getPosterior2(uchar* patch_data);\n    const uchar* getPosterior2(uchar* patch_data) const;\n\n    void read(const char* file_name, int num_quant_bits);\n    void read(std::istream &is, int num_quant_bits);\n    void write(const char* file_name) const;\n    void write(std::ostream &os) const;\n\n    int classes() { return classes_; }\n    int depth() { return depth_; }\n\n    //void setKeepFloatPosteriors(bool b) { keep_float_posteriors_ = b; }\n    void discardFloatPosteriors() { freePosteriors(1); }\n\n    inline void applyQuantization(int num_quant_bits) { makePosteriors2(num_quant_bits); }\n\n    // debug\n    void savePosteriors(std::string url, bool append=false);\n    void savePosteriors2(std::string url, bool append=false);\n\nprivate:\n    int classes_;\n    int depth_;\n    int num_leaves_;\n    vector<RTreeNode> nodes_;\n    float **posteriors_;        // 16-bytes aligned posteriors\n    uchar **posteriors2_;     // 16-bytes aligned posteriors\n    vector<int> leaf_counts_;\n\n    void createNodes(int num_nodes, RNG &rng);\n    void allocPosteriorsAligned(int num_leaves, int num_classes);\n    void freePosteriors(int which);    // which: 1=posteriors_, 2=posteriors2_, 3=both\n    void init(int classes, int depth, RNG &rng);\n    void addExample(int class_id, uchar* patch_data);\n    void finalize(size_t reduced_num_dim, int num_quant_bits);\n    int getIndex(uchar* patch_data) const;\n    inline float* getPosteriorByIndex(int index);\n    inline const float* getPosteriorByIndex(int index) const;\n    inline uchar* getPosteriorByIndex2(int index);\n    inline const uchar* getPosteriorByIndex2(int index) const;\n    //void makeRandomMeasMatrix(float *cs_phi, PHI_DISTR_TYPE dt, size_t reduced_num_dim);\n    void convertPosteriorsToChar();\n    void makePosteriors2(int num_quant_bits);\n    void compressLeaves(size_t reduced_num_dim);\n    void estimateQuantPercForPosteriors(float perc[2]);\n};\n\n\ninline uchar* getData(IplImage* image)\n{\n    return reinterpret_cast<uchar*>(image->imageData);\n}\n\ninline float* RandomizedTree::getPosteriorByIndex(int index)\n{\n    return const_cast<float*>(const_cast<const RandomizedTree*>(this)->getPosteriorByIndex(index));\n}\n\ninline const float* RandomizedTree::getPosteriorByIndex(int index) const\n{\n    return posteriors_[index];\n}\n\ninline uchar* RandomizedTree::getPosteriorByIndex2(int index)\n{\n    return const_cast<uchar*>(const_cast<const RandomizedTree*>(this)->getPosteriorByIndex2(index));\n}\n\ninline const uchar* RandomizedTree::getPosteriorByIndex2(int index) const\n{\n    return posteriors2_[index];\n}\n\nstruct CV_EXPORTS RTreeNode\n{\n    short offset1, offset2;\n\n    RTreeNode() {}\n    RTreeNode(uchar x1, uchar y1, uchar x2, uchar y2)\n    : offset1(y1*RandomizedTree::PATCH_SIZE + x1),\n    offset2(y2*RandomizedTree::PATCH_SIZE + x2)\n    {}\n\n    //! Left child on 0, right child on 1\n    inline bool operator() (uchar* patch_data) const\n    {\n        return patch_data[offset1] > patch_data[offset2];\n    }\n};\n\nclass CV_EXPORTS RTreeClassifier\n{\npublic:\n    static const int DEFAULT_TREES = 48;\n    static const size_t DEFAULT_NUM_QUANT_BITS = 4;\n\n    RTreeClassifier();\n    void train(vector<BaseKeypoint> const& base_set,\n               RNG &rng,\n               int num_trees = RTreeClassifier::DEFAULT_TREES,\n               int depth = RandomizedTree::DEFAULT_DEPTH,\n               int views = RandomizedTree::DEFAULT_VIEWS,\n               size_t reduced_num_dim = RandomizedTree::DEFAULT_REDUCED_NUM_DIM,\n               int num_quant_bits = DEFAULT_NUM_QUANT_BITS);\n    void train(vector<BaseKeypoint> const& base_set,\n               RNG &rng,\n               PatchGenerator &make_patch,\n               int num_trees = RTreeClassifier::DEFAULT_TREES,\n               int depth = RandomizedTree::DEFAULT_DEPTH,\n               int views = RandomizedTree::DEFAULT_VIEWS,\n               size_t reduced_num_dim = RandomizedTree::DEFAULT_REDUCED_NUM_DIM,\n               int num_quant_bits = DEFAULT_NUM_QUANT_BITS);\n\n    // sig must point to a memory block of at least classes()*sizeof(float|uchar) bytes\n    void getSignature(IplImage *patch, uchar *sig) const;\n    void getSignature(IplImage *patch, float *sig) const;\n    void getSparseSignature(IplImage *patch, float *sig, float thresh) const;\n    // TODO: deprecated in favor of getSignature overload, remove\n    void getFloatSignature(IplImage *patch, float *sig) const { getSignature(patch, sig); }\n\n    static int countNonZeroElements(float *vec, int n, double tol=1e-10);\n    static inline void safeSignatureAlloc(uchar **sig, int num_sig=1, int sig_len=176);\n    static inline uchar* safeSignatureAlloc(int num_sig=1, int sig_len=176);\n\n    inline int classes() const { return classes_; }\n    inline int original_num_classes() const { return original_num_classes_; }\n\n    void setQuantization(int num_quant_bits);\n    void discardFloatPosteriors();\n\n    void read(const char* file_name);\n    void read(std::istream &is);\n    void write(const char* file_name) const;\n    void write(std::ostream &os) const;\n\n    // experimental and debug\n    void saveAllFloatPosteriors(std::string file_url);\n    void saveAllBytePosteriors(std::string file_url);\n    void setFloatPosteriorsFromTextfile_176(std::string url);\n    float countZeroElements();\n\n    vector<RandomizedTree> trees_;\n\nprivate:\n    int classes_;\n    int num_quant_bits_;\n    mutable uchar **posteriors_;\n    mutable unsigned short *ptemp_;\n    int original_num_classes_;\n    bool keep_floats_;\n};\n\n/****************************************************************************************\\\n*                                     One-Way Descriptor                                 *\n\\****************************************************************************************/\n\n// CvAffinePose: defines a parameterized affine transformation of an image patch.\n// An image patch is rotated on angle phi (in degrees), then scaled lambda1 times\n// along horizontal and lambda2 times along vertical direction, and then rotated again\n// on angle (theta - phi).\nclass CV_EXPORTS CvAffinePose\n{\npublic:\n    float phi;\n    float theta;\n    float lambda1;\n    float lambda2;\n};\n\nclass CV_EXPORTS OneWayDescriptor\n{\npublic:\n    OneWayDescriptor();\n    ~OneWayDescriptor();\n\n    // allocates memory for given descriptor parameters\n    void Allocate(int pose_count, CvSize size, int nChannels);\n\n    // GenerateSamples: generates affine transformed patches with averaging them over small transformation variations.\n    // If external poses and transforms were specified, uses them instead of generating random ones\n    // - pose_count: the number of poses to be generated\n    // - frontal: the input patch (can be a roi in a larger image)\n    // - norm: if nonzero, normalizes the output patch so that the sum of pixel intensities is 1\n    void GenerateSamples(int pose_count, IplImage* frontal, int norm = 0);\n\n    // GenerateSamplesFast: generates affine transformed patches with averaging them over small transformation variations.\n    // Uses precalculated transformed pca components.\n    // - frontal: the input patch (can be a roi in a larger image)\n    // - pca_hr_avg: pca average vector\n    // - pca_hr_eigenvectors: pca eigenvectors\n    // - pca_descriptors: an array of precomputed descriptors of pca components containing their affine transformations\n    //   pca_descriptors[0] corresponds to the average, pca_descriptors[1]-pca_descriptors[pca_dim] correspond to eigenvectors\n    void GenerateSamplesFast(IplImage* frontal, CvMat* pca_hr_avg,\n                             CvMat* pca_hr_eigenvectors, OneWayDescriptor* pca_descriptors);\n\n    // sets the poses and corresponding transforms\n    void SetTransforms(CvAffinePose* poses, CvMat** transforms);\n\n    // Initialize: builds a descriptor.\n    // - pose_count: the number of poses to build. If poses were set externally, uses them rather than generating random ones\n    // - frontal: input patch. Can be a roi in a larger image\n    // - feature_name: the feature name to be associated with the descriptor\n    // - norm: if 1, the affine transformed patches are normalized so that their sum is 1\n    void Initialize(int pose_count, IplImage* frontal, const char* feature_name = 0, int norm = 0);\n\n    // InitializeFast: builds a descriptor using precomputed descriptors of pca components\n    // - pose_count: the number of poses to build\n    // - frontal: input patch. Can be a roi in a larger image\n    // - feature_name: the feature name to be associated with the descriptor\n    // - pca_hr_avg: average vector for PCA\n    // - pca_hr_eigenvectors: PCA eigenvectors (one vector per row)\n    // - pca_descriptors: precomputed descriptors of PCA components, the first descriptor for the average vector\n    // followed by the descriptors for eigenvectors\n    void InitializeFast(int pose_count, IplImage* frontal, const char* feature_name,\n                        CvMat* pca_hr_avg, CvMat* pca_hr_eigenvectors, OneWayDescriptor* pca_descriptors);\n\n    // ProjectPCASample: unwarps an image patch into a vector and projects it into PCA space\n    // - patch: input image patch\n    // - avg: PCA average vector\n    // - eigenvectors: PCA eigenvectors, one per row\n    // - pca_coeffs: output PCA coefficients\n    void ProjectPCASample(IplImage* patch, CvMat* avg, CvMat* eigenvectors, CvMat* pca_coeffs) const;\n\n    // InitializePCACoeffs: projects all warped patches into PCA space\n    // - avg: PCA average vector\n    // - eigenvectors: PCA eigenvectors, one per row\n    void InitializePCACoeffs(CvMat* avg, CvMat* eigenvectors);\n\n    // EstimatePose: finds the closest match between an input patch and a set of patches with different poses\n    // - patch: input image patch\n    // - pose_idx: the output index of the closest pose\n    // - distance: the distance to the closest pose (L2 distance)\n    void EstimatePose(IplImage* patch, int& pose_idx, float& distance) const;\n\n    // EstimatePosePCA: finds the closest match between an input patch and a set of patches with different poses.\n    // The distance between patches is computed in PCA space\n    // - patch: input image patch\n    // - pose_idx: the output index of the closest pose\n    // - distance: distance to the closest pose (L2 distance in PCA space)\n    // - avg: PCA average vector. If 0, matching without PCA is used\n    // - eigenvectors: PCA eigenvectors, one per row\n    void EstimatePosePCA(CvArr* patch, int& pose_idx, float& distance, CvMat* avg, CvMat* eigenvalues) const;\n\n    // GetPatchSize: returns the size of each image patch after warping (2 times smaller than the input patch)\n    CvSize GetPatchSize() const\n    {\n        return m_patch_size;\n    }\n\n    // GetInputPatchSize: returns the required size of the patch that the descriptor is built from\n    // (2 time larger than the patch after warping)\n    CvSize GetInputPatchSize() const\n    {\n        return cvSize(m_patch_size.width*2, m_patch_size.height*2);\n    }\n\n    // GetPatch: returns a patch corresponding to specified pose index\n    // - index: pose index\n    // - return value: the patch corresponding to specified pose index\n    IplImage* GetPatch(int index);\n\n    // GetPose: returns a pose corresponding to specified pose index\n    // - index: pose index\n    // - return value: the pose corresponding to specified pose index\n    CvAffinePose GetPose(int index) const;\n\n    // Save: saves all patches with different poses to a specified path\n    void Save(const char* path);\n\n    // ReadByName: reads a descriptor from a file storage\n    // - fs: file storage\n    // - parent: parent node\n    // - name: node name\n    // - return value: 1 if succeeded, 0 otherwise\n    int ReadByName(CvFileStorage* fs, CvFileNode* parent, const char* name);\n\n    // ReadByName: reads a descriptor from a file node\n    // - parent: parent node\n    // - name: node name\n    // - return value: 1 if succeeded, 0 otherwise\n    int ReadByName(const FileNode &parent, const char* name);\n\n    // Write: writes a descriptor into a file storage\n    // - fs: file storage\n    // - name: node name\n    void Write(CvFileStorage* fs, const char* name);\n\n    // GetFeatureName: returns a name corresponding to a feature\n    const char* GetFeatureName() const;\n\n    // GetCenter: returns the center of the feature\n    CvPoint GetCenter() const;\n\n    void SetPCADimHigh(int pca_dim_high) {m_pca_dim_high = pca_dim_high;};\n    void SetPCADimLow(int pca_dim_low) {m_pca_dim_low = pca_dim_low;};\n\n    int GetPCADimLow() const;\n    int GetPCADimHigh() const;\n\n    CvMat** GetPCACoeffs() const {return m_pca_coeffs;}\n\nprotected:\n    int m_pose_count; // the number of poses\n    CvSize m_patch_size; // size of each image\n    IplImage** m_samples; // an array of length m_pose_count containing the patch in different poses\n    IplImage* m_input_patch;\n    IplImage* m_train_patch;\n    CvMat** m_pca_coeffs; // an array of length m_pose_count containing pca decomposition of the patch in different poses\n    CvAffinePose* m_affine_poses; // an array of poses\n    CvMat** m_transforms; // an array of affine transforms corresponding to poses\n\n    string m_feature_name; // the name of the feature associated with the descriptor\n    CvPoint m_center; // the coordinates of the feature (the center of the input image ROI)\n\n    int m_pca_dim_high; // the number of descriptor pca components to use for generating affine poses\n    int m_pca_dim_low; // the number of pca components to use for comparison\n};\n\n\n// OneWayDescriptorBase: encapsulates functionality for training/loading a set of one way descriptors\n// and finding the nearest closest descriptor to an input feature\nclass CV_EXPORTS OneWayDescriptorBase\n{\npublic:\n\n    // creates an instance of OneWayDescriptor from a set of training files\n    // - patch_size: size of the input (large) patch\n    // - pose_count: the number of poses to generate for each descriptor\n    // - train_path: path to training files\n    // - pca_config: the name of the file that contains PCA for small patches (2 times smaller\n    // than patch_size each dimension\n    // - pca_hr_config: the name of the file that contains PCA for large patches (of patch_size size)\n    // - pca_desc_config: the name of the file that contains descriptors of PCA components\n    OneWayDescriptorBase(CvSize patch_size, int pose_count, const char* train_path = 0, const char* pca_config = 0,\n                         const char* pca_hr_config = 0, const char* pca_desc_config = 0, int pyr_levels = 1,\n                         int pca_dim_high = 100, int pca_dim_low = 100);\n\n    OneWayDescriptorBase(CvSize patch_size, int pose_count, const string &pca_filename, const string &train_path = string(), const string &images_list = string(),\n                         float _scale_min = 0.7f, float _scale_max=1.5f, float _scale_step=1.2f, int pyr_levels = 1,\n                         int pca_dim_high = 100, int pca_dim_low = 100);\n\n\n    virtual ~OneWayDescriptorBase();\n    void clear ();\n\n\n    // Allocate: allocates memory for a given number of descriptors\n    void Allocate(int train_feature_count);\n\n    // AllocatePCADescriptors: allocates memory for pca descriptors\n    void AllocatePCADescriptors();\n\n    // returns patch size\n    CvSize GetPatchSize() const {return m_patch_size;};\n    // returns the number of poses for each descriptor\n    int GetPoseCount() const {return m_pose_count;};\n\n    // returns the number of pyramid levels\n    int GetPyrLevels() const {return m_pyr_levels;};\n\n    // returns the number of descriptors\n    int GetDescriptorCount() const {return m_train_feature_count;};\n\n    // CreateDescriptorsFromImage: creates descriptors for each of the input features\n    // - src: input image\n    // - features: input features\n    // - pyr_levels: the number of pyramid levels\n    void CreateDescriptorsFromImage(IplImage* src, const vector<KeyPoint>& features);\n\n    // CreatePCADescriptors: generates descriptors for PCA components, needed for fast generation of feature descriptors\n    void CreatePCADescriptors();\n\n    // returns a feature descriptor by feature index\n    const OneWayDescriptor* GetDescriptor(int desc_idx) const {return &m_descriptors[desc_idx];};\n\n    // FindDescriptor: finds the closest descriptor\n    // - patch: input image patch\n    // - desc_idx: output index of the closest descriptor to the input patch\n    // - pose_idx: output index of the closest pose of the closest descriptor to the input patch\n    // - distance: distance from the input patch to the closest feature pose\n    // - _scales: scales of the input patch for each descriptor\n    // - scale_ranges: input scales variation (float[2])\n    void FindDescriptor(IplImage* patch, int& desc_idx, int& pose_idx, float& distance, float* _scale = 0, float* scale_ranges = 0) const;\n\n    // - patch: input image patch\n    // - n: number of the closest indexes\n    // - desc_idxs: output indexes of the closest descriptor to the input patch (n)\n    // - pose_idx: output indexes of the closest pose of the closest descriptor to the input patch (n)\n    // - distances: distance from the input patch to the closest feature pose (n)\n    // - _scales: scales of the input patch\n    // - scale_ranges: input scales variation (float[2])\n    void FindDescriptor(IplImage* patch, int n, vector<int>& desc_idxs, vector<int>& pose_idxs,\n                        vector<float>& distances, vector<float>& _scales, float* scale_ranges = 0) const;\n\n    // FindDescriptor: finds the closest descriptor\n    // - src: input image\n    // - pt: center of the feature\n    // - desc_idx: output index of the closest descriptor to the input patch\n    // - pose_idx: output index of the closest pose of the closest descriptor to the input patch\n    // - distance: distance from the input patch to the closest feature pose\n    void FindDescriptor(IplImage* src, cv::Point2f pt, int& desc_idx, int& pose_idx, float& distance) const;\n\n    // InitializePoses: generates random poses\n    void InitializePoses();\n\n    // InitializeTransformsFromPoses: generates 2x3 affine matrices from poses (initializes m_transforms)\n    void InitializeTransformsFromPoses();\n\n    // InitializePoseTransforms: subsequently calls InitializePoses and InitializeTransformsFromPoses\n    void InitializePoseTransforms();\n\n    // InitializeDescriptor: initializes a descriptor\n    // - desc_idx: descriptor index\n    // - train_image: image patch (ROI is supported)\n    // - feature_label: feature textual label\n    void InitializeDescriptor(int desc_idx, IplImage* train_image, const char* feature_label);\n\n    void InitializeDescriptor(int desc_idx, IplImage* train_image, const KeyPoint& keypoint, const char* feature_label);\n\n    // InitializeDescriptors: load features from an image and create descriptors for each of them\n    void InitializeDescriptors(IplImage* train_image, const vector<KeyPoint>& features,\n                               const char* feature_label = \"\", int desc_start_idx = 0);\n\n    // Write: writes this object to a file storage\n    // - fs: output filestorage\n    void Write (FileStorage &fs) const;\n\n    // Read: reads OneWayDescriptorBase object from a file node\n    // - fn: input file node\n    void Read (const FileNode &fn);\n\n    // LoadPCADescriptors: loads PCA descriptors from a file\n    // - filename: input filename\n    int LoadPCADescriptors(const char* filename);\n\n    // LoadPCADescriptors: loads PCA descriptors from a file node\n    // - fn: input file node\n    int LoadPCADescriptors(const FileNode &fn);\n\n    // SavePCADescriptors: saves PCA descriptors to a file\n    // - filename: output filename\n    void SavePCADescriptors(const char* filename);\n\n    // SavePCADescriptors: saves PCA descriptors to a file storage\n    // - fs: output file storage\n    void SavePCADescriptors(CvFileStorage* fs) const;\n\n    // GeneratePCA: calculate and save PCA components and descriptors\n    // - img_path: path to training PCA images directory\n    // - images_list: filename with filenames of training PCA images\n    void GeneratePCA(const char* img_path, const char* images_list, int pose_count=500);\n\n    // SetPCAHigh: sets the high resolution pca matrices (copied to internal structures)\n    void SetPCAHigh(CvMat* avg, CvMat* eigenvectors);\n\n    // SetPCALow: sets the low resolution pca matrices (copied to internal structures)\n    void SetPCALow(CvMat* avg, CvMat* eigenvectors);\n\n    int GetLowPCA(CvMat** avg, CvMat** eigenvectors)\n    {\n        *avg = m_pca_avg;\n        *eigenvectors = m_pca_eigenvectors;\n        return m_pca_dim_low;\n    };\n\n    int GetPCADimLow() const {return m_pca_dim_low;};\n    int GetPCADimHigh() const {return m_pca_dim_high;};\n\n    void ConvertDescriptorsArrayToTree(); // Converting pca_descriptors array to KD tree\n\n    // GetPCAFilename: get default PCA filename\n    static string GetPCAFilename () { return \"pca.yml\"; }\n\n    virtual bool empty() const { return m_train_feature_count <= 0 ? true : false; }\n\nprotected:\n    CvSize m_patch_size; // patch size\n    int m_pose_count; // the number of poses for each descriptor\n    int m_train_feature_count; // the number of the training features\n    OneWayDescriptor* m_descriptors; // array of train feature descriptors\n    CvMat* m_pca_avg; // PCA average Vector for small patches\n    CvMat* m_pca_eigenvectors; // PCA eigenvectors for small patches\n    CvMat* m_pca_hr_avg; // PCA average Vector for large patches\n    CvMat* m_pca_hr_eigenvectors; // PCA eigenvectors for large patches\n    OneWayDescriptor* m_pca_descriptors; // an array of PCA descriptors\n\n    cv::flann::Index* m_pca_descriptors_tree;\n    CvMat* m_pca_descriptors_matrix;\n\n    CvAffinePose* m_poses; // array of poses\n    CvMat** m_transforms; // array of affine transformations corresponding to poses\n\n    int m_pca_dim_high;\n    int m_pca_dim_low;\n\n    int m_pyr_levels;\n    float scale_min;\n    float scale_max;\n    float scale_step;\n\n    // SavePCAall: saves PCA components and descriptors to a file storage\n    // - fs: output file storage\n    void SavePCAall (FileStorage &fs) const;\n\n    // LoadPCAall: loads PCA components and descriptors from a file node\n    // - fn: input file node\n    void LoadPCAall (const FileNode &fn);\n};\n\nclass CV_EXPORTS OneWayDescriptorObject : public OneWayDescriptorBase\n{\npublic:\n    // creates an instance of OneWayDescriptorObject from a set of training files\n    // - patch_size: size of the input (large) patch\n    // - pose_count: the number of poses to generate for each descriptor\n    // - train_path: path to training files\n    // - pca_config: the name of the file that contains PCA for small patches (2 times smaller\n    // than patch_size each dimension\n    // - pca_hr_config: the name of the file that contains PCA for large patches (of patch_size size)\n    // - pca_desc_config: the name of the file that contains descriptors of PCA components\n    OneWayDescriptorObject(CvSize patch_size, int pose_count, const char* train_path, const char* pca_config,\n                           const char* pca_hr_config = 0, const char* pca_desc_config = 0, int pyr_levels = 1);\n\n    OneWayDescriptorObject(CvSize patch_size, int pose_count, const string &pca_filename,\n                           const string &train_path = string (), const string &images_list = string (),\n                           float _scale_min = 0.7f, float _scale_max=1.5f, float _scale_step=1.2f, int pyr_levels = 1);\n\n\n    virtual ~OneWayDescriptorObject();\n\n    // Allocate: allocates memory for a given number of features\n    // - train_feature_count: the total number of features\n    // - object_feature_count: the number of features extracted from the object\n    void Allocate(int train_feature_count, int object_feature_count);\n\n\n    void SetLabeledFeatures(const vector<KeyPoint>& features) {m_train_features = features;};\n    vector<KeyPoint>& GetLabeledFeatures() {return m_train_features;};\n    const vector<KeyPoint>& GetLabeledFeatures() const {return m_train_features;};\n    vector<KeyPoint> _GetLabeledFeatures() const;\n\n    // IsDescriptorObject: returns 1 if descriptor with specified index is positive, otherwise 0\n    int IsDescriptorObject(int desc_idx) const;\n\n    // MatchPointToPart: returns the part number of a feature if it matches one of the object parts, otherwise -1\n    int MatchPointToPart(CvPoint pt) const;\n\n    // GetDescriptorPart: returns the part number of the feature corresponding to a specified descriptor\n    // - desc_idx: descriptor index\n    int GetDescriptorPart(int desc_idx) const;\n\n\n    void InitializeObjectDescriptors(IplImage* train_image, const vector<KeyPoint>& features,\n                                     const char* feature_label, int desc_start_idx = 0, float scale = 1.0f,\n                                     int is_background = 0);\n\n    // GetObjectFeatureCount: returns the number of object features\n    int GetObjectFeatureCount() const {return m_object_feature_count;};\n\nprotected:\n    int* m_part_id; // contains part id for each of object descriptors\n    vector<KeyPoint> m_train_features; // train features\n    int m_object_feature_count; // the number of the positive features\n\n};\n\n\n/*\n *  OneWayDescriptorMatcher\n */\nclass OneWayDescriptorMatcher;\ntypedef OneWayDescriptorMatcher OneWayDescriptorMatch;\n\nclass CV_EXPORTS OneWayDescriptorMatcher : public GenericDescriptorMatcher\n{\npublic:\n    class CV_EXPORTS Params\n    {\n    public:\n        static const int POSE_COUNT = 500;\n        static const int PATCH_WIDTH = 24;\n        static const int PATCH_HEIGHT = 24;\n        static float GET_MIN_SCALE() { return 0.7f; }\n        static float GET_MAX_SCALE() { return 1.5f; }\n        static float GET_STEP_SCALE() { return 1.2f; }\n\n        Params( int poseCount = POSE_COUNT,\n               Size patchSize = Size(PATCH_WIDTH, PATCH_HEIGHT),\n               string pcaFilename = string(),\n               string trainPath = string(), string trainImagesList = string(),\n               float minScale = GET_MIN_SCALE(), float maxScale = GET_MAX_SCALE(),\n               float stepScale = GET_STEP_SCALE() );\n\n        int poseCount;\n        Size patchSize;\n        string pcaFilename;\n        string trainPath;\n        string trainImagesList;\n\n        float minScale, maxScale, stepScale;\n    };\n\n    OneWayDescriptorMatcher( const Params& params=Params() );\n    virtual ~OneWayDescriptorMatcher();\n\n    void initialize( const Params& params, const Ptr<OneWayDescriptorBase>& base=Ptr<OneWayDescriptorBase>() );\n\n    // Clears keypoints storing in collection and OneWayDescriptorBase\n    virtual void clear();\n\n    virtual void train();\n\n    virtual bool isMaskSupported();\n\n    virtual void read( const FileNode &fn );\n    virtual void write( FileStorage& fs ) const;\n\n    virtual bool empty() const;\n\n    virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\nprotected:\n    // Matches a set of keypoints from a single image of the training set. A rectangle with a center in a keypoint\n    // and size (patch_width/2*scale, patch_height/2*scale) is cropped from the source image for each\n    // keypoint. scale is iterated from DescriptorOneWayParams::min_scale to DescriptorOneWayParams::max_scale.\n    // The minimum distance to each training patch with all its affine poses is found over all scales.\n    // The class ID of a match is returned for each keypoint. The distance is calculated over PCA components\n    // loaded with DescriptorOneWay::Initialize, kd tree is used for finding minimum distances.\n    virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                              vector<vector<DMatch> >& matches, int k,\n                              const vector<Mat>& masks, bool compactResult );\n    virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                                 vector<vector<DMatch> >& matches, float maxDistance,\n                                 const vector<Mat>& masks, bool compactResult );\n\n    Ptr<OneWayDescriptorBase> base;\n    Params params;\n    int prevTrainCount;\n};\n\n/*\n *  FernDescriptorMatcher\n */\nclass FernDescriptorMatcher;\ntypedef FernDescriptorMatcher FernDescriptorMatch;\n\nclass CV_EXPORTS FernDescriptorMatcher : public GenericDescriptorMatcher\n{\npublic:\n    class CV_EXPORTS Params\n    {\n    public:\n        Params( int nclasses=0,\n               int patchSize=FernClassifier::PATCH_SIZE,\n               int signatureSize=FernClassifier::DEFAULT_SIGNATURE_SIZE,\n               int nstructs=FernClassifier::DEFAULT_STRUCTS,\n               int structSize=FernClassifier::DEFAULT_STRUCT_SIZE,\n               int nviews=FernClassifier::DEFAULT_VIEWS,\n               int compressionMethod=FernClassifier::COMPRESSION_NONE,\n               const PatchGenerator& patchGenerator=PatchGenerator() );\n\n        Params( const string& filename );\n\n        int nclasses;\n        int patchSize;\n        int signatureSize;\n        int nstructs;\n        int structSize;\n        int nviews;\n        int compressionMethod;\n        PatchGenerator patchGenerator;\n\n        string filename;\n    };\n\n    FernDescriptorMatcher( const Params& params=Params() );\n    virtual ~FernDescriptorMatcher();\n\n    virtual void clear();\n\n    virtual void train();\n\n    virtual bool isMaskSupported();\n\n    virtual void read( const FileNode &fn );\n    virtual void write( FileStorage& fs ) const;\n    virtual bool empty() const;\n\n    virtual Ptr<GenericDescriptorMatcher> clone( bool emptyTrainData=false ) const;\n\nprotected:\n    virtual void knnMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                              vector<vector<DMatch> >& matches, int k,\n                              const vector<Mat>& masks, bool compactResult );\n    virtual void radiusMatchImpl( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,\n                                 vector<vector<DMatch> >& matches, float maxDistance,\n                                 const vector<Mat>& masks, bool compactResult );\n\n    void trainFernClassifier();\n    void calcBestProbAndMatchIdx( const Mat& image, const Point2f& pt,\n                                 float& bestProb, int& bestMatchIdx, vector<float>& signature );\n    Ptr<FernClassifier> classifier;\n    Params params;\n    int prevTrainCount;\n};\n\n\n/*\n * CalonderDescriptorExtractor\n */\ntemplate<typename T>\nclass CV_EXPORTS CalonderDescriptorExtractor : public DescriptorExtractor\n{\npublic:\n    CalonderDescriptorExtractor( const string& classifierFile );\n\n    virtual void read( const FileNode &fn );\n    virtual void write( FileStorage &fs ) const;\n\n    virtual int descriptorSize() const { return classifier_.classes(); }\n    virtual int descriptorType() const { return DataType<T>::type; }\n\n    virtual bool empty() const;\n\nprotected:\n    virtual void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n\n    RTreeClassifier classifier_;\n    static const int BORDER_SIZE = 16;\n};\n\ntemplate<typename T>\nCalonderDescriptorExtractor<T>::CalonderDescriptorExtractor(const std::string& classifier_file)\n{\n    classifier_.read( classifier_file.c_str() );\n}\n\ntemplate<typename T>\nvoid CalonderDescriptorExtractor<T>::computeImpl( const Mat& image,\n                                                 vector<KeyPoint>& keypoints,\n                                                 Mat& descriptors) const\n{\n    // Cannot compute descriptors for keypoints on the image border.\n    KeyPointsFilter::runByImageBorder(keypoints, image.size(), BORDER_SIZE);\n\n    /// @todo Check 16-byte aligned\n    descriptors.create((int)keypoints.size(), classifier_.classes(), cv::DataType<T>::type);\n\n    int patchSize = RandomizedTree::PATCH_SIZE;\n    int offset = patchSize / 2;\n    for (size_t i = 0; i < keypoints.size(); ++i)\n    {\n        cv::Point2f pt = keypoints[i].pt;\n        IplImage ipl = image( Rect((int)(pt.x - offset), (int)(pt.y - offset), patchSize, patchSize) );\n        classifier_.getSignature( &ipl, descriptors.ptr<T>((int)i));\n    }\n}\n\ntemplate<typename T>\nvoid CalonderDescriptorExtractor<T>::read( const FileNode& )\n{}\n\ntemplate<typename T>\nvoid CalonderDescriptorExtractor<T>::write( FileStorage& ) const\n{}\n\ntemplate<typename T>\nbool CalonderDescriptorExtractor<T>::empty() const\n{\n    return classifier_.trees_.empty();\n}\n\n\n////////////////////// Brute Force Matcher //////////////////////////\n\ntemplate<class Distance>\nclass CV_EXPORTS BruteForceMatcher : public BFMatcher\n{\npublic:\n    BruteForceMatcher( Distance d = Distance() ) : BFMatcher(Distance::normType, false) {(void)d;}\n    virtual ~BruteForceMatcher() {}\n};\n\n\n/****************************************************************************************\\\n*                                Planar Object Detection                                 *\n\\****************************************************************************************/\n\nclass CV_EXPORTS PlanarObjectDetector\n{\npublic:\n    PlanarObjectDetector();\n    PlanarObjectDetector(const FileNode& node);\n    PlanarObjectDetector(const vector<Mat>& pyr, int _npoints=300,\n                         int _patchSize=FernClassifier::PATCH_SIZE,\n                         int _nstructs=FernClassifier::DEFAULT_STRUCTS,\n                         int _structSize=FernClassifier::DEFAULT_STRUCT_SIZE,\n                         int _nviews=FernClassifier::DEFAULT_VIEWS,\n                         const LDetector& detector=LDetector(),\n                         const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual ~PlanarObjectDetector();\n    virtual void train(const vector<Mat>& pyr, int _npoints=300,\n                       int _patchSize=FernClassifier::PATCH_SIZE,\n                       int _nstructs=FernClassifier::DEFAULT_STRUCTS,\n                       int _structSize=FernClassifier::DEFAULT_STRUCT_SIZE,\n                       int _nviews=FernClassifier::DEFAULT_VIEWS,\n                       const LDetector& detector=LDetector(),\n                       const PatchGenerator& patchGenerator=PatchGenerator());\n    virtual void train(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,\n                       int _patchSize=FernClassifier::PATCH_SIZE,\n                       int _nstructs=FernClassifier::DEFAULT_STRUCTS,\n                       int _structSize=FernClassifier::DEFAULT_STRUCT_SIZE,\n                       int _nviews=FernClassifier::DEFAULT_VIEWS,\n                       const LDetector& detector=LDetector(),\n                       const PatchGenerator& patchGenerator=PatchGenerator());\n    Rect getModelROI() const;\n    vector<KeyPoint> getModelPoints() const;\n    const LDetector& getDetector() const;\n    const FernClassifier& getClassifier() const;\n    void setVerbose(bool verbose);\n\n    void read(const FileNode& node);\n    void write(FileStorage& fs, const String& name=String()) const;\n    bool operator()(const Mat& image, CV_OUT Mat& H, CV_OUT vector<Point2f>& corners) const;\n    bool operator()(const vector<Mat>& pyr, const vector<KeyPoint>& keypoints,\n                    CV_OUT Mat& H, CV_OUT vector<Point2f>& corners,\n                    CV_OUT vector<int>* pairs=0) const;\n\nprotected:\n    bool verbose;\n    Rect modelROI;\n    vector<KeyPoint> modelPoints;\n    LDetector ldetector;\n    FernClassifier fernClassifier;\n};\n\n}\n\n// 2009-01-12, Xavier Delacour <xavier.delacour@gmail.com>\n\nstruct lsh_hash {\n    int h1, h2;\n};\n\nstruct CvLSHOperations\n{\n    virtual ~CvLSHOperations() {}\n\n    virtual int vector_add(const void* data) = 0;\n    virtual void vector_remove(int i) = 0;\n    virtual const void* vector_lookup(int i) = 0;\n    virtual void vector_reserve(int n) = 0;\n    virtual unsigned int vector_count() = 0;\n\n    virtual void hash_insert(lsh_hash h, int l, int i) = 0;\n    virtual void hash_remove(lsh_hash h, int l, int i) = 0;\n    virtual int hash_lookup(lsh_hash h, int l, int* ret_i, int ret_i_max) = 0;\n};\n\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Splits color or grayscale image into multiple connected components\n of nearly the same color/brightness using modification of Burt algorithm.\n comp with contain a pointer to sequence (CvSeq)\n of connected components (CvConnectedComp) */\nCVAPI(void) cvPyrSegmentation( IplImage* src, IplImage* dst,\n                              CvMemStorage* storage, CvSeq** comp,\n                              int level, double threshold1,\n                              double threshold2 );\n\n/****************************************************************************************\\\n*                              Planar subdivisions                                       *\n\\****************************************************************************************/\n\n/* Initializes Delaunay triangulation */\nCVAPI(void)  cvInitSubdivDelaunay2D( CvSubdiv2D* subdiv, CvRect rect );\n\n/* Creates new subdivision */\nCVAPI(CvSubdiv2D*)  cvCreateSubdiv2D( int subdiv_type, int header_size,\n                                     int vtx_size, int quadedge_size,\n                                     CvMemStorage* storage );\n\n/************************* high-level subdivision functions ***************************/\n\n/* Simplified Delaunay diagram creation */\nCV_INLINE  CvSubdiv2D* cvCreateSubdivDelaunay2D( CvRect rect, CvMemStorage* storage )\n{\n    CvSubdiv2D* subdiv = cvCreateSubdiv2D( CV_SEQ_KIND_SUBDIV2D, sizeof(*subdiv),\n                                          sizeof(CvSubdiv2DPoint), sizeof(CvQuadEdge2D), storage );\n\n    cvInitSubdivDelaunay2D( subdiv, rect );\n    return subdiv;\n}\n\n\n/* Inserts new point to the Delaunay triangulation */\nCVAPI(CvSubdiv2DPoint*)  cvSubdivDelaunay2DInsert( CvSubdiv2D* subdiv, CvPoint2D32f pt);\n\n/* Locates a point within the Delaunay triangulation (finds the edge\n the point is left to or belongs to, or the triangulation point the given\n point coinsides with */\nCVAPI(CvSubdiv2DPointLocation)  cvSubdiv2DLocate(\n                                                 CvSubdiv2D* subdiv, CvPoint2D32f pt,\n                                                 CvSubdiv2DEdge* edge,\n                                                 CvSubdiv2DPoint** vertex CV_DEFAULT(NULL) );\n\n/* Calculates Voronoi tesselation (i.e. coordinates of Voronoi points) */\nCVAPI(void)  cvCalcSubdivVoronoi2D( CvSubdiv2D* subdiv );\n\n\n/* Removes all Voronoi points from the tesselation */\nCVAPI(void)  cvClearSubdivVoronoi2D( CvSubdiv2D* subdiv );\n\n\n/* Finds the nearest to the given point vertex in subdivision. */\nCVAPI(CvSubdiv2DPoint*) cvFindNearestPoint2D( CvSubdiv2D* subdiv, CvPoint2D32f pt );\n\n\n/************ Basic quad-edge navigation and operations ************/\n\nCV_INLINE  CvSubdiv2DEdge  cvSubdiv2DNextEdge( CvSubdiv2DEdge edge )\n{\n    return  CV_SUBDIV2D_NEXT_EDGE(edge);\n}\n\n\nCV_INLINE  CvSubdiv2DEdge  cvSubdiv2DRotateEdge( CvSubdiv2DEdge edge, int rotate )\n{\n    return  (edge & ~3) + ((edge + rotate) & 3);\n}\n\nCV_INLINE  CvSubdiv2DEdge  cvSubdiv2DSymEdge( CvSubdiv2DEdge edge )\n{\n    return edge ^ 2;\n}\n\nCV_INLINE  CvSubdiv2DEdge  cvSubdiv2DGetEdge( CvSubdiv2DEdge edge, CvNextEdgeType type )\n{\n    CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);\n    edge = e->next[(edge + (int)type) & 3];\n    return  (edge & ~3) + ((edge + ((int)type >> 4)) & 3);\n}\n\n\nCV_INLINE  CvSubdiv2DPoint*  cvSubdiv2DEdgeOrg( CvSubdiv2DEdge edge )\n{\n    CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);\n    return (CvSubdiv2DPoint*)e->pt[edge & 3];\n}\n\n\nCV_INLINE  CvSubdiv2DPoint*  cvSubdiv2DEdgeDst( CvSubdiv2DEdge edge )\n{\n    CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);\n    return (CvSubdiv2DPoint*)e->pt[(edge + 2) & 3];\n}\n\n/****************************************************************************************\\\n*                           Additional operations on Subdivisions                        *\n\\****************************************************************************************/\n\n// paints voronoi diagram: just demo function\nCVAPI(void)  icvDrawMosaic( CvSubdiv2D* subdiv, IplImage* src, IplImage* dst );\n\n// checks planar subdivision for correctness. It is not an absolute check,\n// but it verifies some relations between quad-edges\nCVAPI(int)   icvSubdiv2DCheck( CvSubdiv2D* subdiv );\n\n// returns squared distance between two 2D points with floating-point coordinates.\nCV_INLINE double icvSqDist2D32f( CvPoint2D32f pt1, CvPoint2D32f pt2 )\n{\n    double dx = pt1.x - pt2.x;\n    double dy = pt1.y - pt2.y;\n\n    return dx*dx + dy*dy;\n}\n\n\n\n\nCV_INLINE  double  cvTriangleArea( CvPoint2D32f a, CvPoint2D32f b, CvPoint2D32f c )\n{\n    return ((double)b.x - a.x) * ((double)c.y - a.y) - ((double)b.y - a.y) * ((double)c.x - a.x);\n}\n\n\n/* Constructs kd-tree from set of feature descriptors */\nCVAPI(struct CvFeatureTree*) cvCreateKDTree(CvMat* desc);\n\n/* Constructs spill-tree from set of feature descriptors */\nCVAPI(struct CvFeatureTree*) cvCreateSpillTree( const CvMat* raw_data,\n                                               const int naive CV_DEFAULT(50),\n                                               const double rho CV_DEFAULT(.7),\n                                               const double tau CV_DEFAULT(.1) );\n\n/* Release feature tree */\nCVAPI(void) cvReleaseFeatureTree(struct CvFeatureTree* tr);\n\n/* Searches feature tree for k nearest neighbors of given reference points,\n searching (in case of kd-tree/bbf) at most emax leaves. */\nCVAPI(void) cvFindFeatures(struct CvFeatureTree* tr, const CvMat* query_points,\n                           CvMat* indices, CvMat* dist, int k, int emax CV_DEFAULT(20));\n\n/* Search feature tree for all points that are inlier to given rect region.\n Only implemented for kd trees */\nCVAPI(int) cvFindFeaturesBoxed(struct CvFeatureTree* tr,\n                               CvMat* bounds_min, CvMat* bounds_max,\n                               CvMat* out_indices);\n\n\n/* Construct a Locality Sensitive Hash (LSH) table, for indexing d-dimensional vectors of\n given type. Vectors will be hashed L times with k-dimensional p-stable (p=2) functions. */\nCVAPI(struct CvLSH*) cvCreateLSH(struct CvLSHOperations* ops, int d,\n                                 int L CV_DEFAULT(10), int k CV_DEFAULT(10),\n                                 int type CV_DEFAULT(CV_64FC1), double r CV_DEFAULT(4),\n                                 int64 seed CV_DEFAULT(-1));\n\n/* Construct in-memory LSH table, with n bins. */\nCVAPI(struct CvLSH*) cvCreateMemoryLSH(int d, int n, int L CV_DEFAULT(10), int k CV_DEFAULT(10),\n                                       int type CV_DEFAULT(CV_64FC1), double r CV_DEFAULT(4),\n                                       int64 seed CV_DEFAULT(-1));\n\n/* Free the given LSH structure. */\nCVAPI(void) cvReleaseLSH(struct CvLSH** lsh);\n\n/* Return the number of vectors in the LSH. */\nCVAPI(unsigned int) LSHSize(struct CvLSH* lsh);\n\n/* Add vectors to the LSH structure, optionally returning indices. */\nCVAPI(void) cvLSHAdd(struct CvLSH* lsh, const CvMat* data, CvMat* indices CV_DEFAULT(0));\n\n/* Remove vectors from LSH, as addressed by given indices. */\nCVAPI(void) cvLSHRemove(struct CvLSH* lsh, const CvMat* indices);\n\n/* Query the LSH n times for at most k nearest points; data is n x d,\n indices and dist are n x k. At most emax stored points will be accessed. */\nCVAPI(void) cvLSHQuery(struct CvLSH* lsh, const CvMat* query_points,\n                       CvMat* indices, CvMat* dist, int k, int emax);\n\n/* Kolmogorov-Zabin stereo-correspondence algorithm (a.k.a. KZ1) */\n#define CV_STEREO_GC_OCCLUDED  SHRT_MAX\n\ntypedef struct CvStereoGCState\n{\n    int Ithreshold;\n    int interactionRadius;\n    float K, lambda, lambda1, lambda2;\n    int occlusionCost;\n    int minDisparity;\n    int numberOfDisparities;\n    int maxIters;\n\n    CvMat* left;\n    CvMat* right;\n    CvMat* dispLeft;\n    CvMat* dispRight;\n    CvMat* ptrLeft;\n    CvMat* ptrRight;\n    CvMat* vtxBuf;\n    CvMat* edgeBuf;\n} CvStereoGCState;\n\nCVAPI(CvStereoGCState*) cvCreateStereoGCState( int numberOfDisparities, int maxIters );\nCVAPI(void) cvReleaseStereoGCState( CvStereoGCState** state );\n\nCVAPI(void) cvFindStereoCorrespondenceGC( const CvArr* left, const CvArr* right,\n                                         CvArr* disparityLeft, CvArr* disparityRight,\n                                         CvStereoGCState* state,\n                                         int useDisparityGuess CV_DEFAULT(0) );\n\n/* Calculates optical flow for 2 images using classical Lucas & Kanade algorithm */\nCVAPI(void)  cvCalcOpticalFlowLK( const CvArr* prev, const CvArr* curr,\n                                 CvSize win_size, CvArr* velx, CvArr* vely );\n\n/* Calculates optical flow for 2 images using block matching algorithm */\nCVAPI(void)  cvCalcOpticalFlowBM( const CvArr* prev, const CvArr* curr,\n                                 CvSize block_size, CvSize shift_size,\n                                 CvSize max_range, int use_previous,\n                                 CvArr* velx, CvArr* vely );\n\n/* Calculates Optical flow for 2 images using Horn & Schunck algorithm */\nCVAPI(void)  cvCalcOpticalFlowHS( const CvArr* prev, const CvArr* curr,\n                                 int use_previous, CvArr* velx, CvArr* vely,\n                                 double lambda, CvTermCriteria criteria );\n\n\n/****************************************************************************************\\\n*                           Background/foreground segmentation                           *\n\\****************************************************************************************/\n\n/* We discriminate between foreground and background pixels\n * by building and maintaining a model of the background.\n * Any pixel which does not fit this model is then deemed\n * to be foreground.\n *\n * At present we support two core background models,\n * one of which has two variations:\n *\n *  o CV_BG_MODEL_FGD: latest and greatest algorithm, described in\n *\n *\t Foreground Object Detection from Videos Containing Complex Background.\n *\t Liyuan Li, Weimin Huang, Irene Y.H. Gu, and Qi Tian.\n *\t ACM MM2003 9p\n *\n *  o CV_BG_MODEL_FGD_SIMPLE:\n *       A code comment describes this as a simplified version of the above,\n *       but the code is in fact currently identical\n *\n *  o CV_BG_MODEL_MOG: \"Mixture of Gaussians\", older algorithm, described in\n *\n *       Moving target classification and tracking from real-time video.\n *       A Lipton, H Fujijoshi, R Patil\n *       Proceedings IEEE Workshop on Application of Computer Vision pp 8-14 1998\n *\n *       Learning patterns of activity using real-time tracking\n *       C Stauffer and W Grimson  August 2000\n *       IEEE Transactions on Pattern Analysis and Machine Intelligence 22(8):747-757\n */\n\n\n#define CV_BG_MODEL_FGD\t\t0\n#define CV_BG_MODEL_MOG\t\t1\t\t\t/* \"Mixture of Gaussians\".\t*/\n#define CV_BG_MODEL_FGD_SIMPLE\t2\n\nstruct CvBGStatModel;\n\ntypedef void (CV_CDECL * CvReleaseBGStatModel)( struct CvBGStatModel** bg_model );\ntypedef int (CV_CDECL * CvUpdateBGStatModel)( IplImage* curr_frame, struct CvBGStatModel* bg_model,\n                                             double learningRate );\n\n#define CV_BG_STAT_MODEL_FIELDS()                                               \\\nint             type; /*type of BG model*/                                      \\\nCvReleaseBGStatModel release;                                                   \\\nCvUpdateBGStatModel update;                                                     \\\nIplImage*       background;   /*8UC3 reference background image*/               \\\nIplImage*       foreground;   /*8UC1 foreground image*/                         \\\nIplImage**      layers;       /*8UC3 reference background image, can be null */ \\\nint             layer_count;  /* can be zero */                                 \\\nCvMemStorage*   storage;      /*storage for foreground_regions*/                \\\nCvSeq*          foreground_regions /*foreground object contours*/\n\ntypedef struct CvBGStatModel\n{\n    CV_BG_STAT_MODEL_FIELDS();\n} CvBGStatModel;\n\n//\n\n// Releases memory used by BGStatModel\nCVAPI(void) cvReleaseBGStatModel( CvBGStatModel** bg_model );\n\n// Updates statistical model and returns number of found foreground regions\nCVAPI(int) cvUpdateBGStatModel( IplImage* current_frame, CvBGStatModel*  bg_model,\n                               double learningRate CV_DEFAULT(-1));\n\n// Performs FG post-processing using segmentation\n// (all pixels of a region will be classified as foreground if majority of pixels of the region are FG).\n// parameters:\n//      segments - pointer to result of segmentation (for example MeanShiftSegmentation)\n//      bg_model - pointer to CvBGStatModel structure\nCVAPI(void) cvRefineForegroundMaskBySegm( CvSeq* segments, CvBGStatModel*  bg_model );\n\n/* Common use change detection function */\nCVAPI(int)  cvChangeDetection( IplImage*  prev_frame,\n                              IplImage*  curr_frame,\n                              IplImage*  change_mask );\n\n/*\n Interface of ACM MM2003 algorithm\n */\n\n/* Default parameters of foreground detection algorithm: */\n#define  CV_BGFG_FGD_LC              128\n#define  CV_BGFG_FGD_N1C             15\n#define  CV_BGFG_FGD_N2C             25\n\n#define  CV_BGFG_FGD_LCC             64\n#define  CV_BGFG_FGD_N1CC            25\n#define  CV_BGFG_FGD_N2CC            40\n\n/* Background reference image update parameter: */\n#define  CV_BGFG_FGD_ALPHA_1         0.1f\n\n/* stat model update parameter\n * 0.002f ~ 1K frame(~45sec), 0.005 ~ 18sec (if 25fps and absolutely static BG)\n */\n#define  CV_BGFG_FGD_ALPHA_2         0.005f\n\n/* start value for alpha parameter (to fast initiate statistic model) */\n#define  CV_BGFG_FGD_ALPHA_3         0.1f\n\n#define  CV_BGFG_FGD_DELTA           2\n\n#define  CV_BGFG_FGD_T               0.9f\n\n#define  CV_BGFG_FGD_MINAREA         15.f\n\n#define  CV_BGFG_FGD_BG_UPDATE_TRESH 0.5f\n\n/* See the above-referenced Li/Huang/Gu/Tian paper\n * for a full description of these background-model\n * tuning parameters.\n *\n * Nomenclature:  'c'  == \"color\", a three-component red/green/blue vector.\n *                         We use histograms of these to model the range of\n *                         colors we've seen at a given background pixel.\n *\n *                'cc' == \"color co-occurrence\", a six-component vector giving\n *                         RGB color for both this frame and preceding frame.\n *                             We use histograms of these to model the range of\n *                         color CHANGES we've seen at a given background pixel.\n */\ntypedef struct CvFGDStatModelParams\n{\n    int    Lc;\t\t\t/* Quantized levels per 'color' component. Power of two, typically 32, 64 or 128.\t\t\t\t*/\n    int    N1c;\t\t\t/* Number of color vectors used to model normal background color variation at a given pixel.\t\t\t*/\n    int    N2c;\t\t\t/* Number of color vectors retained at given pixel.  Must be > N1c, typically ~ 5/3 of N1c.\t\t\t*/\n    /* Used to allow the first N1c vectors to adapt over time to changing background.\t\t\t\t*/\n\n    int    Lcc;\t\t\t/* Quantized levels per 'color co-occurrence' component.  Power of two, typically 16, 32 or 64.\t\t\t*/\n    int    N1cc;\t\t/* Number of color co-occurrence vectors used to model normal background color variation at a given pixel.\t*/\n    int    N2cc;\t\t/* Number of color co-occurrence vectors retained at given pixel.  Must be > N1cc, typically ~ 5/3 of N1cc.\t*/\n    /* Used to allow the first N1cc vectors to adapt over time to changing background.\t\t\t\t*/\n\n    int    is_obj_without_holes;/* If TRUE we ignore holes within foreground blobs. Defaults to TRUE.\t\t\t\t\t\t*/\n    int    perform_morphing;\t/* Number of erode-dilate-erode foreground-blob cleanup iterations.\t\t\t\t\t\t*/\n    /* These erase one-pixel junk blobs and merge almost-touching blobs. Default value is 1.\t\t\t*/\n\n    float  alpha1;\t\t/* How quickly we forget old background pixel values seen.  Typically set to 0.1  \t\t\t\t*/\n    float  alpha2;\t\t/* \"Controls speed of feature learning\". Depends on T. Typical value circa 0.005. \t\t\t\t*/\n    float  alpha3;\t\t/* Alternate to alpha2, used (e.g.) for quicker initial convergence. Typical value 0.1.\t\t\t\t*/\n\n    float  delta;\t\t/* Affects color and color co-occurrence quantization, typically set to 2.\t\t\t\t\t*/\n    float  T;\t\t\t/* \"A percentage value which determines when new features can be recognized as new background.\" (Typically 0.9).*/\n    float  minArea;\t\t/* Discard foreground blobs whose bounding box is smaller than this threshold.\t\t\t\t\t*/\n} CvFGDStatModelParams;\n\ntypedef struct CvBGPixelCStatTable\n{\n    float          Pv, Pvb;\n    uchar          v[3];\n} CvBGPixelCStatTable;\n\ntypedef struct CvBGPixelCCStatTable\n{\n    float          Pv, Pvb;\n    uchar          v[6];\n} CvBGPixelCCStatTable;\n\ntypedef struct CvBGPixelStat\n{\n    float                 Pbc;\n    float                 Pbcc;\n    CvBGPixelCStatTable*  ctable;\n    CvBGPixelCCStatTable* cctable;\n    uchar                 is_trained_st_model;\n    uchar                 is_trained_dyn_model;\n} CvBGPixelStat;\n\n\ntypedef struct CvFGDStatModel\n{\n    CV_BG_STAT_MODEL_FIELDS();\n    CvBGPixelStat*         pixel_stat;\n    IplImage*              Ftd;\n    IplImage*              Fbd;\n    IplImage*              prev_frame;\n    CvFGDStatModelParams   params;\n} CvFGDStatModel;\n\n/* Creates FGD model */\nCVAPI(CvBGStatModel*) cvCreateFGDStatModel( IplImage* first_frame,\n                                           CvFGDStatModelParams* parameters CV_DEFAULT(NULL));\n\n/*\n Interface of Gaussian mixture algorithm\n\n \"An improved adaptive background mixture model for real-time tracking with shadow detection\"\n P. KadewTraKuPong and R. Bowden,\n Proc. 2nd European Workshp on Advanced Video-Based Surveillance Systems, 2001.\"\n http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf\n */\n\n/* Note:  \"MOG\" == \"Mixture Of Gaussians\": */\n\n#define CV_BGFG_MOG_MAX_NGAUSSIANS 500\n\n/* default parameters of gaussian background detection algorithm */\n#define CV_BGFG_MOG_BACKGROUND_THRESHOLD     0.7     /* threshold sum of weights for background test */\n#define CV_BGFG_MOG_STD_THRESHOLD            2.5     /* lambda=2.5 is 99% */\n#define CV_BGFG_MOG_WINDOW_SIZE              200     /* Learning rate; alpha = 1/CV_GBG_WINDOW_SIZE */\n#define CV_BGFG_MOG_NGAUSSIANS               5       /* = K = number of Gaussians in mixture */\n#define CV_BGFG_MOG_WEIGHT_INIT              0.05\n#define CV_BGFG_MOG_SIGMA_INIT               30\n#define CV_BGFG_MOG_MINAREA                  15.f\n\n\n#define CV_BGFG_MOG_NCOLORS                  3\n\ntypedef struct CvGaussBGStatModelParams\n{\n    int     win_size;               /* = 1/alpha */\n    int     n_gauss;\n    double  bg_threshold, std_threshold, minArea;\n    double  weight_init, variance_init;\n}CvGaussBGStatModelParams;\n\ntypedef struct CvGaussBGValues\n{\n    int         match_sum;\n    double      weight;\n    double      variance[CV_BGFG_MOG_NCOLORS];\n    double      mean[CV_BGFG_MOG_NCOLORS];\n} CvGaussBGValues;\n\ntypedef struct CvGaussBGPoint\n{\n    CvGaussBGValues* g_values;\n} CvGaussBGPoint;\n\n\ntypedef struct CvGaussBGModel\n{\n    CV_BG_STAT_MODEL_FIELDS();\n    CvGaussBGStatModelParams   params;\n    CvGaussBGPoint*            g_point;\n    int                        countFrames;\n    void*                      mog;\n} CvGaussBGModel;\n\n\n/* Creates Gaussian mixture background model */\nCVAPI(CvBGStatModel*) cvCreateGaussianBGModel( IplImage* first_frame,\n                                              CvGaussBGStatModelParams* parameters CV_DEFAULT(NULL));\n\n\ntypedef struct CvBGCodeBookElem\n{\n    struct CvBGCodeBookElem* next;\n    int tLastUpdate;\n    int stale;\n    uchar boxMin[3];\n    uchar boxMax[3];\n    uchar learnMin[3];\n    uchar learnMax[3];\n} CvBGCodeBookElem;\n\ntypedef struct CvBGCodeBookModel\n{\n    CvSize size;\n    int t;\n    uchar cbBounds[3];\n    uchar modMin[3];\n    uchar modMax[3];\n    CvBGCodeBookElem** cbmap;\n    CvMemStorage* storage;\n    CvBGCodeBookElem* freeList;\n} CvBGCodeBookModel;\n\nCVAPI(CvBGCodeBookModel*) cvCreateBGCodeBookModel( void );\nCVAPI(void) cvReleaseBGCodeBookModel( CvBGCodeBookModel** model );\n\nCVAPI(void) cvBGCodeBookUpdate( CvBGCodeBookModel* model, const CvArr* image,\n                               CvRect roi CV_DEFAULT(cvRect(0,0,0,0)),\n                               const CvArr* mask CV_DEFAULT(0) );\n\nCVAPI(int) cvBGCodeBookDiff( const CvBGCodeBookModel* model, const CvArr* image,\n                            CvArr* fgmask, CvRect roi CV_DEFAULT(cvRect(0,0,0,0)) );\n\nCVAPI(void) cvBGCodeBookClearStale( CvBGCodeBookModel* model, int staleThresh,\n                                   CvRect roi CV_DEFAULT(cvRect(0,0,0,0)),\n                                   const CvArr* mask CV_DEFAULT(0) );\n\nCVAPI(CvSeq*) cvSegmentFGMask( CvArr *fgmask, int poly1Hull0 CV_DEFAULT(1),\n                              float perimScale CV_DEFAULT(4.f),\n                              CvMemStorage* storage CV_DEFAULT(0),\n                              CvPoint offset CV_DEFAULT(cvPoint(0,0)));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/legacy/streams.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_CVSTREAMS_H__\n#define __OPENCV_CVSTREAMS_H__\n\n#ifdef WIN32\n#include <streams.h>  /* !!! IF YOU'VE GOT AN ERROR HERE, PLEASE READ BELOW !!! */\n/***************** How to get Visual Studio understand streams.h ****************\\\n\nYou need DirectShow SDK that is now a part of Platform SDK\n(Windows Server 2003 SP1 SDK or later),\nand DirectX SDK (2006 April or later).\n\n1. Download the Platform SDK from\n   http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\n   and DirectX SDK from msdn.microsoft.com/directx/\n   (They are huge, but you can download it by parts).\n   If it doesn't work for you, consider HighGUI that can capture video via VFW or MIL\n\n2. Install Platform SDK together with DirectShow SDK.\n   Install DirectX (with or without sample code).\n\n3. Build baseclasses.\n   See <PlatformSDKInstallFolder>\\samples\\multimedia\\directshow\\readme.txt.\n\n4. Copy the built libraries (called strmbase.lib and strmbasd.lib\n   in Release and Debug versions, respectively) to\n   <PlatformSDKInstallFolder>\\lib.\n\n5. In Developer Studio add the following paths:\n      <DirectXSDKInstallFolder>\\include\n      <PlatformSDKInstallFolder>\\include\n      <PlatformSDKInstallFolder>\\samples\\multimedia\\directshow\\baseclasses\n    to the includes' search path\n    (at Tools->Options->Directories->Include files in case of Visual Studio 6.0,\n     at Tools->Options->Projects and Solutions->VC++ Directories->Include files in case\n     of Visual Studio 2005)\n   Add\n      <DirectXSDKInstallFolder>\\lib\n      <PlatformSDKInstallFolder>\\lib\n   to the libraries' search path (in the same dialog, ...->\"Library files\" page)\n\n   NOTE: PUT THE ADDED LINES ON THE VERY TOP OF THE LISTS, OTHERWISE YOU MAY STILL GET\n   COMPILER OR LINKER ERRORS. This is necessary, because Visual Studio\n   may include older versions of the same headers and libraries.\n\n6. Now you can build OpenCV DirectShow filters.\n\n\\***********************************************************************************/\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/ml/ml.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                        Intel License Agreement\n//\n// Copyright (C) 2000, Intel Corporation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of Intel Corporation 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_ML_HPP__\n#define __OPENCV_ML_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include <limits.h>\n\n#ifdef __cplusplus\n\n#include <map>\n#include <string>\n#include <iostream>\n\n// Apple defines a check() macro somewhere in the debug headers\n// that interferes with a method definiton in this header\n#undef check\n\n/****************************************************************************************\\\n*                               Main struct definitions                                  *\n\\****************************************************************************************/\n\n/* log(2*PI) */\n#define CV_LOG2PI (1.8378770664093454835606594728112)\n\n/* columns of <trainData> matrix are training samples */\n#define CV_COL_SAMPLE 0\n\n/* rows of <trainData> matrix are training samples */\n#define CV_ROW_SAMPLE 1\n\n#define CV_IS_ROW_SAMPLE(flags) ((flags) & CV_ROW_SAMPLE)\n\nstruct CvVectors\n{\n    int type;\n    int dims, count;\n    CvVectors* next;\n    union\n    {\n        uchar** ptr;\n        float** fl;\n        double** db;\n    } data;\n};\n\n#if 0\n/* A structure, representing the lattice range of statmodel parameters.\n   It is used for optimizing statmodel parameters by cross-validation method.\n   The lattice is logarithmic, so <step> must be greater then 1. */\ntypedef struct CvParamLattice\n{\n    double min_val;\n    double max_val;\n    double step;\n}\nCvParamLattice;\n\nCV_INLINE CvParamLattice cvParamLattice( double min_val, double max_val,\n                                         double log_step )\n{\n    CvParamLattice pl;\n    pl.min_val = MIN( min_val, max_val );\n    pl.max_val = MAX( min_val, max_val );\n    pl.step = MAX( log_step, 1. );\n    return pl;\n}\n\nCV_INLINE CvParamLattice cvDefaultParamLattice( void )\n{\n    CvParamLattice pl = {0,0,0};\n    return pl;\n}\n#endif\n\n/* Variable type */\n#define CV_VAR_NUMERICAL    0\n#define CV_VAR_ORDERED      0\n#define CV_VAR_CATEGORICAL  1\n\n#define CV_TYPE_NAME_ML_SVM         \"opencv-ml-svm\"\n#define CV_TYPE_NAME_ML_KNN         \"opencv-ml-knn\"\n#define CV_TYPE_NAME_ML_NBAYES      \"opencv-ml-bayesian\"\n#define CV_TYPE_NAME_ML_EM          \"opencv-ml-em\"\n#define CV_TYPE_NAME_ML_BOOSTING    \"opencv-ml-boost-tree\"\n#define CV_TYPE_NAME_ML_TREE        \"opencv-ml-tree\"\n#define CV_TYPE_NAME_ML_ANN_MLP     \"opencv-ml-ann-mlp\"\n#define CV_TYPE_NAME_ML_CNN         \"opencv-ml-cnn\"\n#define CV_TYPE_NAME_ML_RTREES      \"opencv-ml-random-trees\"\n#define CV_TYPE_NAME_ML_ERTREES     \"opencv-ml-extremely-randomized-trees\"\n#define CV_TYPE_NAME_ML_GBT         \"opencv-ml-gradient-boosting-trees\"\n\n#define CV_TRAIN_ERROR  0\n#define CV_TEST_ERROR   1\n\nclass CV_EXPORTS_W CvStatModel\n{\npublic:\n    CvStatModel();\n    virtual ~CvStatModel();\n\n    virtual void clear();\n\n    CV_WRAP virtual void save( const char* filename, const char* name=0 ) const;\n    CV_WRAP virtual void load( const char* filename, const char* name=0 );\n\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n    virtual void read( CvFileStorage* storage, CvFileNode* node );\n\nprotected:\n    const char* default_model_name;\n};\n\n/****************************************************************************************\\\n*                                 Normal Bayes Classifier                                *\n\\****************************************************************************************/\n\n/* The structure, representing the grid range of statmodel parameters.\n   It is used for optimizing statmodel accuracy by varying model parameters,\n   the accuracy estimate being computed by cross-validation.\n   The grid is logarithmic, so <step> must be greater then 1. */\n\nclass CvMLData;\n\nstruct CV_EXPORTS_W_MAP CvParamGrid\n{\n    // SVM params type\n    enum { SVM_C=0, SVM_GAMMA=1, SVM_P=2, SVM_NU=3, SVM_COEF=4, SVM_DEGREE=5 };\n\n    CvParamGrid()\n    {\n        min_val = max_val = step = 0;\n    }\n\n    CvParamGrid( double min_val, double max_val, double log_step );\n    //CvParamGrid( int param_id );\n    bool check() const;\n\n    CV_PROP_RW double min_val;\n    CV_PROP_RW double max_val;\n    CV_PROP_RW double step;\n};\n\ninline CvParamGrid::CvParamGrid( double _min_val, double _max_val, double _log_step )\n{\n    min_val = _min_val;\n    max_val = _max_val;\n    step = _log_step;\n}\n\nclass CV_EXPORTS_W CvNormalBayesClassifier : public CvStatModel\n{\npublic:\n    CV_WRAP CvNormalBayesClassifier();\n    virtual ~CvNormalBayesClassifier();\n\n    CvNormalBayesClassifier( const CvMat* trainData, const CvMat* responses,\n        const CvMat* varIdx=0, const CvMat* sampleIdx=0 );\n\n    virtual bool train( const CvMat* trainData, const CvMat* responses,\n        const CvMat* varIdx = 0, const CvMat* sampleIdx=0, bool update=false );\n\n    virtual float predict( const CvMat* samples, CV_OUT CvMat* results=0 ) const;\n    CV_WRAP virtual void clear();\n\n    CV_WRAP CvNormalBayesClassifier( const cv::Mat& trainData, const cv::Mat& responses,\n                            const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat() );\n    CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses,\n                       const cv::Mat& varIdx = cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(),\n                       bool update=false );\n    CV_WRAP virtual float predict( const cv::Mat& samples, CV_OUT cv::Mat* results=0 ) const;\n\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n    virtual void read( CvFileStorage* storage, CvFileNode* node );\n\nprotected:\n    int     var_count, var_all;\n    CvMat*  var_idx;\n    CvMat*  cls_labels;\n    CvMat** count;\n    CvMat** sum;\n    CvMat** productsum;\n    CvMat** avg;\n    CvMat** inv_eigen_values;\n    CvMat** cov_rotate_mats;\n    CvMat*  c;\n};\n\n\n/****************************************************************************************\\\n*                          K-Nearest Neighbour Classifier                                *\n\\****************************************************************************************/\n\n// k Nearest Neighbors\nclass CV_EXPORTS_W CvKNearest : public CvStatModel\n{\npublic:\n\n    CV_WRAP CvKNearest();\n    virtual ~CvKNearest();\n\n    CvKNearest( const CvMat* trainData, const CvMat* responses,\n                const CvMat* sampleIdx=0, bool isRegression=false, int max_k=32 );\n\n    virtual bool train( const CvMat* trainData, const CvMat* responses,\n                        const CvMat* sampleIdx=0, bool is_regression=false,\n                        int maxK=32, bool updateBase=false );\n\n    virtual float find_nearest( const CvMat* samples, int k, CV_OUT CvMat* results=0,\n        const float** neighbors=0, CV_OUT CvMat* neighborResponses=0, CV_OUT CvMat* dist=0 ) const;\n\n    CV_WRAP CvKNearest( const cv::Mat& trainData, const cv::Mat& responses,\n               const cv::Mat& sampleIdx=cv::Mat(), bool isRegression=false, int max_k=32 );\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses,\n                       const cv::Mat& sampleIdx=cv::Mat(), bool isRegression=false,\n                       int maxK=32, bool updateBase=false );\n\n    virtual float find_nearest( const cv::Mat& samples, int k, cv::Mat* results=0,\n                                const float** neighbors=0, cv::Mat* neighborResponses=0,\n                                cv::Mat* dist=0 ) const;\n    CV_WRAP virtual float find_nearest( const cv::Mat& samples, int k, CV_OUT cv::Mat& results,\n                                        CV_OUT cv::Mat& neighborResponses, CV_OUT cv::Mat& dists) const;\n\n    virtual void clear();\n    int get_max_k() const;\n    int get_var_count() const;\n    int get_sample_count() const;\n    bool is_regression() const;\n\n    virtual float write_results( int k, int k1, int start, int end,\n        const float* neighbor_responses, const float* dist, CvMat* _results,\n        CvMat* _neighbor_responses, CvMat* _dist, Cv32suf* sort_buf ) const;\n\n    virtual void find_neighbors_direct( const CvMat* _samples, int k, int start, int end,\n        float* neighbor_responses, const float** neighbors, float* dist ) const;\n\nprotected:\n\n    int max_k, var_count;\n    int total;\n    bool regression;\n    CvVectors* samples;\n};\n\n/****************************************************************************************\\\n*                                   Support Vector Machines                              *\n\\****************************************************************************************/\n\n// SVM training parameters\nstruct CV_EXPORTS_W_MAP CvSVMParams\n{\n    CvSVMParams();\n    CvSVMParams( int svm_type, int kernel_type,\n                 double degree, double gamma, double coef0,\n                 double Cvalue, double nu, double p,\n                 CvMat* class_weights, CvTermCriteria term_crit );\n\n    CV_PROP_RW int         svm_type;\n    CV_PROP_RW int         kernel_type;\n    CV_PROP_RW double      degree; // for poly\n    CV_PROP_RW double      gamma;  // for poly/rbf/sigmoid\n    CV_PROP_RW double      coef0;  // for poly/sigmoid\n\n    CV_PROP_RW double      C;  // for CV_SVM_C_SVC, CV_SVM_EPS_SVR and CV_SVM_NU_SVR\n    CV_PROP_RW double      nu; // for CV_SVM_NU_SVC, CV_SVM_ONE_CLASS, and CV_SVM_NU_SVR\n    CV_PROP_RW double      p; // for CV_SVM_EPS_SVR\n    CvMat*      class_weights; // for CV_SVM_C_SVC\n    CV_PROP_RW CvTermCriteria term_crit; // termination criteria\n};\n\n\nstruct CV_EXPORTS CvSVMKernel\n{\n    typedef void (CvSVMKernel::*Calc)( int vec_count, int vec_size, const float** vecs,\n                                       const float* another, float* results );\n    CvSVMKernel();\n    CvSVMKernel( const CvSVMParams* params, Calc _calc_func );\n    virtual bool create( const CvSVMParams* params, Calc _calc_func );\n    virtual ~CvSVMKernel();\n\n    virtual void clear();\n    virtual void calc( int vcount, int n, const float** vecs, const float* another, float* results );\n\n    const CvSVMParams* params;\n    Calc calc_func;\n\n    virtual void calc_non_rbf_base( int vec_count, int vec_size, const float** vecs,\n                                    const float* another, float* results,\n                                    double alpha, double beta );\n\n    virtual void calc_linear( int vec_count, int vec_size, const float** vecs,\n                              const float* another, float* results );\n    virtual void calc_rbf( int vec_count, int vec_size, const float** vecs,\n                           const float* another, float* results );\n    virtual void calc_poly( int vec_count, int vec_size, const float** vecs,\n                            const float* another, float* results );\n    virtual void calc_sigmoid( int vec_count, int vec_size, const float** vecs,\n                               const float* another, float* results );\n};\n\n\nstruct CvSVMKernelRow\n{\n    CvSVMKernelRow* prev;\n    CvSVMKernelRow* next;\n    float* data;\n};\n\n\nstruct CvSVMSolutionInfo\n{\n    double obj;\n    double rho;\n    double upper_bound_p;\n    double upper_bound_n;\n    double r;   // for Solver_NU\n};\n\nclass CV_EXPORTS CvSVMSolver\n{\npublic:\n    typedef bool (CvSVMSolver::*SelectWorkingSet)( int& i, int& j );\n    typedef float* (CvSVMSolver::*GetRow)( int i, float* row, float* dst, bool existed );\n    typedef void (CvSVMSolver::*CalcRho)( double& rho, double& r );\n\n    CvSVMSolver();\n\n    CvSVMSolver( int count, int var_count, const float** samples, schar* y,\n                 int alpha_count, double* alpha, double Cp, double Cn,\n                 CvMemStorage* storage, CvSVMKernel* kernel, GetRow get_row,\n                 SelectWorkingSet select_working_set, CalcRho calc_rho );\n    virtual bool create( int count, int var_count, const float** samples, schar* y,\n                 int alpha_count, double* alpha, double Cp, double Cn,\n                 CvMemStorage* storage, CvSVMKernel* kernel, GetRow get_row,\n                 SelectWorkingSet select_working_set, CalcRho calc_rho );\n    virtual ~CvSVMSolver();\n\n    virtual void clear();\n    virtual bool solve_generic( CvSVMSolutionInfo& si );\n\n    virtual bool solve_c_svc( int count, int var_count, const float** samples, schar* y,\n                              double Cp, double Cn, CvMemStorage* storage,\n                              CvSVMKernel* kernel, double* alpha, CvSVMSolutionInfo& si );\n    virtual bool solve_nu_svc( int count, int var_count, const float** samples, schar* y,\n                               CvMemStorage* storage, CvSVMKernel* kernel,\n                               double* alpha, CvSVMSolutionInfo& si );\n    virtual bool solve_one_class( int count, int var_count, const float** samples,\n                                  CvMemStorage* storage, CvSVMKernel* kernel,\n                                  double* alpha, CvSVMSolutionInfo& si );\n\n    virtual bool solve_eps_svr( int count, int var_count, const float** samples, const float* y,\n                                CvMemStorage* storage, CvSVMKernel* kernel,\n                                double* alpha, CvSVMSolutionInfo& si );\n\n    virtual bool solve_nu_svr( int count, int var_count, const float** samples, const float* y,\n                               CvMemStorage* storage, CvSVMKernel* kernel,\n                               double* alpha, CvSVMSolutionInfo& si );\n\n    virtual float* get_row_base( int i, bool* _existed );\n    virtual float* get_row( int i, float* dst );\n\n    int sample_count;\n    int var_count;\n    int cache_size;\n    int cache_line_size;\n    const float** samples;\n    const CvSVMParams* params;\n    CvMemStorage* storage;\n    CvSVMKernelRow lru_list;\n    CvSVMKernelRow* rows;\n\n    int alpha_count;\n\n    double* G;\n    double* alpha;\n\n    // -1 - lower bound, 0 - free, 1 - upper bound\n    schar* alpha_status;\n\n    schar* y;\n    double* b;\n    float* buf[2];\n    double eps;\n    int max_iter;\n    double C[2];  // C[0] == Cn, C[1] == Cp\n    CvSVMKernel* kernel;\n\n    SelectWorkingSet select_working_set_func;\n    CalcRho calc_rho_func;\n    GetRow get_row_func;\n\n    virtual bool select_working_set( int& i, int& j );\n    virtual bool select_working_set_nu_svm( int& i, int& j );\n    virtual void calc_rho( double& rho, double& r );\n    virtual void calc_rho_nu_svm( double& rho, double& r );\n\n    virtual float* get_row_svc( int i, float* row, float* dst, bool existed );\n    virtual float* get_row_one_class( int i, float* row, float* dst, bool existed );\n    virtual float* get_row_svr( int i, float* row, float* dst, bool existed );\n};\n\n\nstruct CvSVMDecisionFunc\n{\n    double rho;\n    int sv_count;\n    double* alpha;\n    int* sv_index;\n};\n\n\n// SVM model\nclass CV_EXPORTS_W CvSVM : public CvStatModel\n{\npublic:\n    // SVM type\n    enum { C_SVC=100, NU_SVC=101, ONE_CLASS=102, EPS_SVR=103, NU_SVR=104 };\n\n    // SVM kernel type\n    enum { LINEAR=0, POLY=1, RBF=2, SIGMOID=3 };\n\n    // SVM params type\n    enum { C=0, GAMMA=1, P=2, NU=3, COEF=4, DEGREE=5 };\n\n    CV_WRAP CvSVM();\n    virtual ~CvSVM();\n\n    CvSVM( const CvMat* trainData, const CvMat* responses,\n           const CvMat* varIdx=0, const CvMat* sampleIdx=0,\n           CvSVMParams params=CvSVMParams() );\n\n    virtual bool train( const CvMat* trainData, const CvMat* responses,\n                        const CvMat* varIdx=0, const CvMat* sampleIdx=0,\n                        CvSVMParams params=CvSVMParams() );\n\n    virtual bool train_auto( const CvMat* trainData, const CvMat* responses,\n        const CvMat* varIdx, const CvMat* sampleIdx, CvSVMParams params,\n        int kfold = 10,\n        CvParamGrid Cgrid      = get_default_grid(CvSVM::C),\n        CvParamGrid gammaGrid  = get_default_grid(CvSVM::GAMMA),\n        CvParamGrid pGrid      = get_default_grid(CvSVM::P),\n        CvParamGrid nuGrid     = get_default_grid(CvSVM::NU),\n        CvParamGrid coeffGrid  = get_default_grid(CvSVM::COEF),\n        CvParamGrid degreeGrid = get_default_grid(CvSVM::DEGREE),\n        bool balanced=false );\n\n    virtual float predict( const CvMat* sample, bool returnDFVal=false ) const;\n    virtual float predict( const CvMat* samples, CV_OUT CvMat* results ) const;\n\n    CV_WRAP CvSVM( const cv::Mat& trainData, const cv::Mat& responses,\n          const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(),\n          CvSVMParams params=CvSVMParams() );\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses,\n                       const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(),\n                       CvSVMParams params=CvSVMParams() );\n\n    CV_WRAP virtual bool train_auto( const cv::Mat& trainData, const cv::Mat& responses,\n                            const cv::Mat& varIdx, const cv::Mat& sampleIdx, CvSVMParams params,\n                            int k_fold = 10,\n                            CvParamGrid Cgrid      = CvSVM::get_default_grid(CvSVM::C),\n                            CvParamGrid gammaGrid  = CvSVM::get_default_grid(CvSVM::GAMMA),\n                            CvParamGrid pGrid      = CvSVM::get_default_grid(CvSVM::P),\n                            CvParamGrid nuGrid     = CvSVM::get_default_grid(CvSVM::NU),\n                            CvParamGrid coeffGrid  = CvSVM::get_default_grid(CvSVM::COEF),\n                            CvParamGrid degreeGrid = CvSVM::get_default_grid(CvSVM::DEGREE),\n                            bool balanced=false);\n    CV_WRAP virtual float predict( const cv::Mat& sample, bool returnDFVal=false ) const;\n    CV_WRAP_AS(predict_all) void predict( cv::InputArray samples, cv::OutputArray results ) const;\n\n    CV_WRAP virtual int get_support_vector_count() const;\n    virtual const float* get_support_vector(int i) const;\n    virtual CvSVMParams get_params() const { return params; };\n    CV_WRAP virtual void clear();\n\n    static CvParamGrid get_default_grid( int param_id );\n\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n    virtual void read( CvFileStorage* storage, CvFileNode* node );\n    CV_WRAP int get_var_count() const { return var_idx ? var_idx->cols : var_all; }\n\nprotected:\n\n    virtual bool set_params( const CvSVMParams& params );\n    virtual bool train1( int sample_count, int var_count, const float** samples,\n                    const void* responses, double Cp, double Cn,\n                    CvMemStorage* _storage, double* alpha, double& rho );\n    virtual bool do_train( int svm_type, int sample_count, int var_count, const float** samples,\n                    const CvMat* responses, CvMemStorage* _storage, double* alpha );\n    virtual void create_kernel();\n    virtual void create_solver();\n\n    virtual float predict( const float* row_sample, int row_len, bool returnDFVal=false ) const;\n\n    virtual void write_params( CvFileStorage* fs ) const;\n    virtual void read_params( CvFileStorage* fs, CvFileNode* node );\n\n    void optimize_linear_svm();\n\n    CvSVMParams params;\n    CvMat* class_labels;\n    int var_all;\n    float** sv;\n    int sv_total;\n    CvMat* var_idx;\n    CvMat* class_weights;\n    CvSVMDecisionFunc* decision_func;\n    CvMemStorage* storage;\n\n    CvSVMSolver* solver;\n    CvSVMKernel* kernel;\n\nprivate:\n    CvSVM(const CvSVM&);\n    CvSVM& operator = (const CvSVM&);\n};\n\n/****************************************************************************************\\\n*                              Expectation - Maximization                                *\n\\****************************************************************************************/\nnamespace cv\n{\nclass CV_EXPORTS_W EM : public Algorithm\n{\npublic:\n    // Type of covariation matrices\n    enum {COV_MAT_SPHERICAL=0, COV_MAT_DIAGONAL=1, COV_MAT_GENERIC=2, COV_MAT_DEFAULT=COV_MAT_DIAGONAL};\n\n    // Default parameters\n    enum {DEFAULT_NCLUSTERS=5, DEFAULT_MAX_ITERS=100};\n\n    // The initial step\n    enum {START_E_STEP=1, START_M_STEP=2, START_AUTO_STEP=0};\n\n    CV_WRAP EM(int nclusters=EM::DEFAULT_NCLUSTERS, int covMatType=EM::COV_MAT_DIAGONAL,\n       const TermCriteria& termCrit=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS,\n                                                 EM::DEFAULT_MAX_ITERS, FLT_EPSILON));\n\n    virtual ~EM();\n    CV_WRAP virtual void clear();\n\n    CV_WRAP virtual bool train(InputArray samples,\n                       OutputArray logLikelihoods=noArray(),\n                       OutputArray labels=noArray(),\n                       OutputArray probs=noArray());\n\n    CV_WRAP virtual bool trainE(InputArray samples,\n                        InputArray means0,\n                        InputArray covs0=noArray(),\n                        InputArray weights0=noArray(),\n                        OutputArray logLikelihoods=noArray(),\n                        OutputArray labels=noArray(),\n                        OutputArray probs=noArray());\n\n    CV_WRAP virtual bool trainM(InputArray samples,\n                        InputArray probs0,\n                        OutputArray logLikelihoods=noArray(),\n                        OutputArray labels=noArray(),\n                        OutputArray probs=noArray());\n\n    CV_WRAP Vec2d predict(InputArray sample,\n                OutputArray probs=noArray()) const;\n\n    CV_WRAP bool isTrained() const;\n\n    AlgorithmInfo* info() const;\n    virtual void read(const FileNode& fn);\n\nprotected:\n\n    virtual void setTrainData(int startStep, const Mat& samples,\n                              const Mat* probs0,\n                              const Mat* means0,\n                              const vector<Mat>* covs0,\n                              const Mat* weights0);\n\n    bool doTrain(int startStep,\n                 OutputArray logLikelihoods,\n                 OutputArray labels,\n                 OutputArray probs);\n    virtual void eStep();\n    virtual void mStep();\n\n    void clusterTrainSamples();\n    void decomposeCovs();\n    void computeLogWeightDivDet();\n\n    Vec2d computeProbabilities(const Mat& sample, Mat* probs) const;\n\n    // all inner matrices have type CV_64FC1\n    CV_PROP_RW int nclusters;\n    CV_PROP_RW int covMatType;\n    CV_PROP_RW int maxIters;\n    CV_PROP_RW double epsilon;\n\n    Mat trainSamples;\n    Mat trainProbs;\n    Mat trainLogLikelihoods;\n    Mat trainLabels;\n\n    CV_PROP Mat weights;\n    CV_PROP Mat means;\n    CV_PROP vector<Mat> covs;\n\n    vector<Mat> covsEigenValues;\n    vector<Mat> covsRotateMats;\n    vector<Mat> invCovsEigenValues;\n    Mat logWeightDivDet;\n};\n} // namespace cv\n\n/****************************************************************************************\\\n*                                      Decision Tree                                     *\n\\****************************************************************************************/\\\nstruct CvPair16u32s\n{\n    unsigned short* u;\n    int* i;\n};\n\n\n#define CV_DTREE_CAT_DIR(idx,subset) \\\n    (2*((subset[(idx)>>5]&(1 << ((idx) & 31)))==0)-1)\n\nstruct CvDTreeSplit\n{\n    int var_idx;\n    int condensed_idx;\n    int inversed;\n    float quality;\n    CvDTreeSplit* next;\n    union\n    {\n        int subset[2];\n        struct\n        {\n            float c;\n            int split_point;\n        }\n        ord;\n    };\n};\n\nstruct CvDTreeNode\n{\n    int class_idx;\n    int Tn;\n    double value;\n\n    CvDTreeNode* parent;\n    CvDTreeNode* left;\n    CvDTreeNode* right;\n\n    CvDTreeSplit* split;\n\n    int sample_count;\n    int depth;\n    int* num_valid;\n    int offset;\n    int buf_idx;\n    double maxlr;\n\n    // global pruning data\n    int complexity;\n    double alpha;\n    double node_risk, tree_risk, tree_error;\n\n    // cross-validation pruning data\n    int* cv_Tn;\n    double* cv_node_risk;\n    double* cv_node_error;\n\n    int get_num_valid(int vi) { return num_valid ? num_valid[vi] : sample_count; }\n    void set_num_valid(int vi, int n) { if( num_valid ) num_valid[vi] = n; }\n};\n\n\nstruct CV_EXPORTS_W_MAP CvDTreeParams\n{\n    CV_PROP_RW int   max_categories;\n    CV_PROP_RW int   max_depth;\n    CV_PROP_RW int   min_sample_count;\n    CV_PROP_RW int   cv_folds;\n    CV_PROP_RW bool  use_surrogates;\n    CV_PROP_RW bool  use_1se_rule;\n    CV_PROP_RW bool  truncate_pruned_tree;\n    CV_PROP_RW float regression_accuracy;\n    const float* priors;\n\n    CvDTreeParams();\n    CvDTreeParams( int max_depth, int min_sample_count,\n                   float regression_accuracy, bool use_surrogates,\n                   int max_categories, int cv_folds,\n                   bool use_1se_rule, bool truncate_pruned_tree,\n                   const float* priors );\n};\n\n\nstruct CV_EXPORTS CvDTreeTrainData\n{\n    CvDTreeTrainData();\n    CvDTreeTrainData( const CvMat* trainData, int tflag,\n                      const CvMat* responses, const CvMat* varIdx=0,\n                      const CvMat* sampleIdx=0, const CvMat* varType=0,\n                      const CvMat* missingDataMask=0,\n                      const CvDTreeParams& params=CvDTreeParams(),\n                      bool _shared=false, bool _add_labels=false );\n    virtual ~CvDTreeTrainData();\n\n    virtual void set_data( const CvMat* trainData, int tflag,\n                          const CvMat* responses, const CvMat* varIdx=0,\n                          const CvMat* sampleIdx=0, const CvMat* varType=0,\n                          const CvMat* missingDataMask=0,\n                          const CvDTreeParams& params=CvDTreeParams(),\n                          bool _shared=false, bool _add_labels=false,\n                          bool _update_data=false );\n    virtual void do_responses_copy();\n\n    virtual void get_vectors( const CvMat* _subsample_idx,\n         float* values, uchar* missing, float* responses, bool get_class_idx=false );\n\n    virtual CvDTreeNode* subsample_data( const CvMat* _subsample_idx );\n\n    virtual void write_params( CvFileStorage* fs ) const;\n    virtual void read_params( CvFileStorage* fs, CvFileNode* node );\n\n    // release all the data\n    virtual void clear();\n\n    int get_num_classes() const;\n    int get_var_type(int vi) const;\n    int get_work_var_count() const {return work_var_count;}\n\n    virtual const float* get_ord_responses( CvDTreeNode* n, float* values_buf, int* sample_indices_buf );\n    virtual const int* get_class_labels( CvDTreeNode* n, int* labels_buf );\n    virtual const int* get_cv_labels( CvDTreeNode* n, int* labels_buf );\n    virtual const int* get_sample_indices( CvDTreeNode* n, int* indices_buf );\n    virtual const int* get_cat_var_data( CvDTreeNode* n, int vi, int* cat_values_buf );\n    virtual void get_ord_var_data( CvDTreeNode* n, int vi, float* ord_values_buf, int* sorted_indices_buf,\n                                   const float** ord_values, const int** sorted_indices, int* sample_indices_buf );\n    virtual int get_child_buf_idx( CvDTreeNode* n );\n\n    ////////////////////////////////////\n\n    virtual bool set_params( const CvDTreeParams& params );\n    virtual CvDTreeNode* new_node( CvDTreeNode* parent, int count,\n                                   int storage_idx, int offset );\n\n    virtual CvDTreeSplit* new_split_ord( int vi, float cmp_val,\n                int split_point, int inversed, float quality );\n    virtual CvDTreeSplit* new_split_cat( int vi, float quality );\n    virtual void free_node_data( CvDTreeNode* node );\n    virtual void free_train_data();\n    virtual void free_node( CvDTreeNode* node );\n\n    int sample_count, var_all, var_count, max_c_count;\n    int ord_var_count, cat_var_count, work_var_count;\n    bool have_labels, have_priors;\n    bool is_classifier;\n    int tflag;\n\n    const CvMat* train_data;\n    const CvMat* responses;\n    CvMat* responses_copy; // used in Boosting\n\n    int buf_count, buf_size; // buf_size is obsolete, please do not use it, use expression ((int64)buf->rows * (int64)buf->cols / buf_count) instead\n    bool shared;\n    int is_buf_16u;\n\n    CvMat* cat_count;\n    CvMat* cat_ofs;\n    CvMat* cat_map;\n\n    CvMat* counts;\n    CvMat* buf;\n    inline size_t get_length_subbuf() const\n    {\n        size_t res = (size_t)(work_var_count + 1) * (size_t)sample_count;\n        return res;\n    }\n\n    CvMat* direction;\n    CvMat* split_buf;\n\n    CvMat* var_idx;\n    CvMat* var_type; // i-th element =\n                     //   k<0  - ordered\n                     //   k>=0 - categorical, see k-th element of cat_* arrays\n    CvMat* priors;\n    CvMat* priors_mult;\n\n    CvDTreeParams params;\n\n    CvMemStorage* tree_storage;\n    CvMemStorage* temp_storage;\n\n    CvDTreeNode* data_root;\n\n    CvSet* node_heap;\n    CvSet* split_heap;\n    CvSet* cv_heap;\n    CvSet* nv_heap;\n\n    cv::RNG* rng;\n};\n\nclass CvDTree;\nclass CvForestTree;\n\nnamespace cv\n{\n    struct DTreeBestSplitFinder;\n    struct ForestTreeBestSplitFinder;\n}\n\nclass CV_EXPORTS_W CvDTree : public CvStatModel\n{\npublic:\n    CV_WRAP CvDTree();\n    virtual ~CvDTree();\n\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvDTreeParams params=CvDTreeParams() );\n\n    virtual bool train( CvMLData* trainData, CvDTreeParams params=CvDTreeParams() );\n\n    // type in {CV_TRAIN_ERROR, CV_TEST_ERROR}\n    virtual float calc_error( CvMLData* trainData, int type, std::vector<float> *resp = 0 );\n\n    virtual bool train( CvDTreeTrainData* trainData, const CvMat* subsampleIdx );\n\n    virtual CvDTreeNode* predict( const CvMat* sample, const CvMat* missingDataMask=0,\n                                  bool preprocessedInput=false ) const;\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvDTreeParams params=CvDTreeParams() );\n\n    CV_WRAP virtual CvDTreeNode* predict( const cv::Mat& sample, const cv::Mat& missingDataMask=cv::Mat(),\n                                  bool preprocessedInput=false ) const;\n    CV_WRAP virtual cv::Mat getVarImportance();\n\n    virtual const CvMat* get_var_importance();\n    CV_WRAP virtual void clear();\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void write( CvFileStorage* fs, const char* name ) const;\n\n    // special read & write methods for trees in the tree ensembles\n    virtual void read( CvFileStorage* fs, CvFileNode* node,\n                       CvDTreeTrainData* data );\n    virtual void write( CvFileStorage* fs ) const;\n\n    const CvDTreeNode* get_root() const;\n    int get_pruned_tree_idx() const;\n    CvDTreeTrainData* get_data();\n\nprotected:\n    friend struct cv::DTreeBestSplitFinder;\n\n    virtual bool do_train( const CvMat* _subsample_idx );\n\n    virtual void try_split_node( CvDTreeNode* n );\n    virtual void split_node_data( CvDTreeNode* n );\n    virtual CvDTreeSplit* find_best_split( CvDTreeNode* n );\n    virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi,\n                            float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi,\n                            float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi,\n                            float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi,\n                            float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_surrogate_split_ord( CvDTreeNode* n, int vi, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_surrogate_split_cat( CvDTreeNode* n, int vi, uchar* ext_buf = 0 );\n    virtual double calc_node_dir( CvDTreeNode* node );\n    virtual void complete_node_dir( CvDTreeNode* node );\n    virtual void cluster_categories( const int* vectors, int vector_count,\n        int var_count, int* sums, int k, int* cluster_labels );\n\n    virtual void calc_node_value( CvDTreeNode* node );\n\n    virtual void prune_cv();\n    virtual double update_tree_rnc( int T, int fold );\n    virtual int cut_tree( int T, int fold, double min_alpha );\n    virtual void free_prune_data(bool cut_tree);\n    virtual void free_tree();\n\n    virtual void write_node( CvFileStorage* fs, CvDTreeNode* node ) const;\n    virtual void write_split( CvFileStorage* fs, CvDTreeSplit* split ) const;\n    virtual CvDTreeNode* read_node( CvFileStorage* fs, CvFileNode* node, CvDTreeNode* parent );\n    virtual CvDTreeSplit* read_split( CvFileStorage* fs, CvFileNode* node );\n    virtual void write_tree_nodes( CvFileStorage* fs ) const;\n    virtual void read_tree_nodes( CvFileStorage* fs, CvFileNode* node );\n\n    CvDTreeNode* root;\n    CvMat* var_importance;\n    CvDTreeTrainData* data;\n\npublic:\n    int pruned_tree_idx;\n};\n\n\n/****************************************************************************************\\\n*                                   Random Trees Classifier                              *\n\\****************************************************************************************/\n\nclass CvRTrees;\n\nclass CV_EXPORTS CvForestTree: public CvDTree\n{\npublic:\n    CvForestTree();\n    virtual ~CvForestTree();\n\n    virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx, CvRTrees* forest );\n\n    virtual int get_var_count() const {return data ? data->var_count : 0;}\n    virtual void read( CvFileStorage* fs, CvFileNode* node, CvRTrees* forest, CvDTreeTrainData* _data );\n\n    /* dummy methods to avoid warnings: BEGIN */\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvDTreeParams params=CvDTreeParams() );\n\n    virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx );\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void read( CvFileStorage* fs, CvFileNode* node,\n                       CvDTreeTrainData* data );\n    /* dummy methods to avoid warnings: END */\n\nprotected:\n    friend struct cv::ForestTreeBestSplitFinder;\n\n    virtual CvDTreeSplit* find_best_split( CvDTreeNode* n );\n    CvRTrees* forest;\n};\n\n\nstruct CV_EXPORTS_W_MAP CvRTParams : public CvDTreeParams\n{\n    //Parameters for the forest\n    CV_PROP_RW bool calc_var_importance; // true <=> RF processes variable importance\n    CV_PROP_RW int nactive_vars;\n    CV_PROP_RW CvTermCriteria term_crit;\n\n    CvRTParams();\n    CvRTParams( int max_depth, int min_sample_count,\n                float regression_accuracy, bool use_surrogates,\n                int max_categories, const float* priors, bool calc_var_importance,\n                int nactive_vars, int max_num_of_trees_in_the_forest,\n                float forest_accuracy, int termcrit_type );\n};\n\n\nclass CV_EXPORTS_W CvRTrees : public CvStatModel\n{\npublic:\n    CV_WRAP CvRTrees();\n    virtual ~CvRTrees();\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvRTParams params=CvRTParams() );\n\n    virtual bool train( CvMLData* data, CvRTParams params=CvRTParams() );\n    virtual float predict( const CvMat* sample, const CvMat* missing = 0 ) const;\n    virtual float predict_prob( const CvMat* sample, const CvMat* missing = 0 ) const;\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvRTParams params=CvRTParams() );\n    CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing = cv::Mat() ) const;\n    CV_WRAP virtual float predict_prob( const cv::Mat& sample, const cv::Mat& missing = cv::Mat() ) const;\n    CV_WRAP virtual cv::Mat getVarImportance();\n\n    CV_WRAP virtual void clear();\n\n    virtual const CvMat* get_var_importance();\n    virtual float get_proximity( const CvMat* sample1, const CvMat* sample2,\n        const CvMat* missing1 = 0, const CvMat* missing2 = 0 ) const;\n\n    virtual float calc_error( CvMLData* data, int type , std::vector<float>* resp = 0 ); // type in {CV_TRAIN_ERROR, CV_TEST_ERROR}\n\n    virtual float get_train_error();\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void write( CvFileStorage* fs, const char* name ) const;\n\n    CvMat* get_active_var_mask();\n    CvRNG* get_rng();\n\n    int get_tree_count() const;\n    CvForestTree* get_tree(int i) const;\n\nprotected:\n    virtual std::string getName() const;\n\n    virtual bool grow_forest( const CvTermCriteria term_crit );\n\n    // array of the trees of the forest\n    CvForestTree** trees;\n    CvDTreeTrainData* data;\n    int ntrees;\n    int nclasses;\n    double oob_error;\n    CvMat* var_importance;\n    int nsamples;\n\n    cv::RNG* rng;\n    CvMat* active_var_mask;\n};\n\n/****************************************************************************************\\\n*                           Extremely randomized trees Classifier                        *\n\\****************************************************************************************/\nstruct CV_EXPORTS CvERTreeTrainData : public CvDTreeTrainData\n{\n    virtual void set_data( const CvMat* trainData, int tflag,\n                          const CvMat* responses, const CvMat* varIdx=0,\n                          const CvMat* sampleIdx=0, const CvMat* varType=0,\n                          const CvMat* missingDataMask=0,\n                          const CvDTreeParams& params=CvDTreeParams(),\n                          bool _shared=false, bool _add_labels=false,\n                          bool _update_data=false );\n    virtual void get_ord_var_data( CvDTreeNode* n, int vi, float* ord_values_buf, int* missing_buf,\n                                   const float** ord_values, const int** missing, int* sample_buf = 0 );\n    virtual const int* get_sample_indices( CvDTreeNode* n, int* indices_buf );\n    virtual const int* get_cv_labels( CvDTreeNode* n, int* labels_buf );\n    virtual const int* get_cat_var_data( CvDTreeNode* n, int vi, int* cat_values_buf );\n    virtual void get_vectors( const CvMat* _subsample_idx, float* values, uchar* missing,\n                              float* responses, bool get_class_idx=false );\n    virtual CvDTreeNode* subsample_data( const CvMat* _subsample_idx );\n    const CvMat* missing_mask;\n};\n\nclass CV_EXPORTS CvForestERTree : public CvForestTree\n{\nprotected:\n    virtual double calc_node_dir( CvDTreeNode* node );\n    virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual void split_node_data( CvDTreeNode* n );\n};\n\nclass CV_EXPORTS_W CvERTrees : public CvRTrees\n{\npublic:\n    CV_WRAP CvERTrees();\n    virtual ~CvERTrees();\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvRTParams params=CvRTParams());\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvRTParams params=CvRTParams());\n    virtual bool train( CvMLData* data, CvRTParams params=CvRTParams() );\nprotected:\n    virtual std::string getName() const;\n    virtual bool grow_forest( const CvTermCriteria term_crit );\n};\n\n\n/****************************************************************************************\\\n*                                   Boosted tree classifier                              *\n\\****************************************************************************************/\n\nstruct CV_EXPORTS_W_MAP CvBoostParams : public CvDTreeParams\n{\n    CV_PROP_RW int boost_type;\n    CV_PROP_RW int weak_count;\n    CV_PROP_RW int split_criteria;\n    CV_PROP_RW double weight_trim_rate;\n\n    CvBoostParams();\n    CvBoostParams( int boost_type, int weak_count, double weight_trim_rate,\n                   int max_depth, bool use_surrogates, const float* priors );\n};\n\n\nclass CvBoost;\n\nclass CV_EXPORTS CvBoostTree: public CvDTree\n{\npublic:\n    CvBoostTree();\n    virtual ~CvBoostTree();\n\n    virtual bool train( CvDTreeTrainData* trainData,\n                        const CvMat* subsample_idx, CvBoost* ensemble );\n\n    virtual void scale( double s );\n    virtual void read( CvFileStorage* fs, CvFileNode* node,\n                       CvBoost* ensemble, CvDTreeTrainData* _data );\n    virtual void clear();\n\n    /* dummy methods to avoid warnings: BEGIN */\n    virtual bool train( const CvMat* trainData, int tflag,\n                        const CvMat* responses, const CvMat* varIdx=0,\n                        const CvMat* sampleIdx=0, const CvMat* varType=0,\n                        const CvMat* missingDataMask=0,\n                        CvDTreeParams params=CvDTreeParams() );\n    virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx );\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void read( CvFileStorage* fs, CvFileNode* node,\n                       CvDTreeTrainData* data );\n    /* dummy methods to avoid warnings: END */\n\nprotected:\n\n    virtual void try_split_node( CvDTreeNode* n );\n    virtual CvDTreeSplit* find_surrogate_split_ord( CvDTreeNode* n, int vi, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_surrogate_split_cat( CvDTreeNode* n, int vi, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi,\n        float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 );\n    virtual void calc_node_value( CvDTreeNode* n );\n    virtual double calc_node_dir( CvDTreeNode* n );\n\n    CvBoost* ensemble;\n};\n\n\nclass CV_EXPORTS_W CvBoost : public CvStatModel\n{\npublic:\n    // Boosting type\n    enum { DISCRETE=0, REAL=1, LOGIT=2, GENTLE=3 };\n\n    // Splitting criteria\n    enum { DEFAULT=0, GINI=1, MISCLASS=3, SQERR=4 };\n\n    CV_WRAP CvBoost();\n    virtual ~CvBoost();\n\n    CvBoost( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvBoostParams params=CvBoostParams() );\n\n    virtual bool train( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvBoostParams params=CvBoostParams(),\n             bool update=false );\n\n    virtual bool train( CvMLData* data,\n             CvBoostParams params=CvBoostParams(),\n             bool update=false );\n\n    virtual float predict( const CvMat* sample, const CvMat* missing=0,\n                           CvMat* weak_responses=0, CvSlice slice=CV_WHOLE_SEQ,\n                           bool raw_mode=false, bool return_sum=false ) const;\n\n    CV_WRAP CvBoost( const cv::Mat& trainData, int tflag,\n            const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n            const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n            const cv::Mat& missingDataMask=cv::Mat(),\n            CvBoostParams params=CvBoostParams() );\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvBoostParams params=CvBoostParams(),\n                       bool update=false );\n\n    CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing=cv::Mat(),\n                                   const cv::Range& slice=cv::Range::all(), bool rawMode=false,\n                                   bool returnSum=false ) const;\n\n    virtual float calc_error( CvMLData* _data, int type , std::vector<float> *resp = 0 ); // type in {CV_TRAIN_ERROR, CV_TEST_ERROR}\n\n    CV_WRAP virtual void prune( CvSlice slice );\n\n    CV_WRAP virtual void clear();\n\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n    virtual void read( CvFileStorage* storage, CvFileNode* node );\n    virtual const CvMat* get_active_vars(bool absolute_idx=true);\n\n    CvSeq* get_weak_predictors();\n\n    CvMat* get_weights();\n    CvMat* get_subtree_weights();\n    CvMat* get_weak_response();\n    const CvBoostParams& get_params() const;\n    const CvDTreeTrainData* get_data() const;\n\nprotected:\n\n    void update_weights_impl( CvBoostTree* tree, double initial_weights[2] );\n\n    virtual bool set_params( const CvBoostParams& params );\n    virtual void update_weights( CvBoostTree* tree );\n    virtual void trim_weights();\n    virtual void write_params( CvFileStorage* fs ) const;\n    virtual void read_params( CvFileStorage* fs, CvFileNode* node );\n\n    CvDTreeTrainData* data;\n    CvBoostParams params;\n    CvSeq* weak;\n\n    CvMat* active_vars;\n    CvMat* active_vars_abs;\n    bool have_active_cat_vars;\n\n    CvMat* orig_response;\n    CvMat* sum_response;\n    CvMat* weak_eval;\n    CvMat* subsample_mask;\n    CvMat* weights;\n    CvMat* subtree_weights;\n    bool have_subsample;\n};\n\n\n/****************************************************************************************\\\n*                                   Gradient Boosted Trees                               *\n\\****************************************************************************************/\n\n// DataType: STRUCT CvGBTreesParams\n// Parameters of GBT (Gradient Boosted trees model), including single\n// tree settings and ensemble parameters.\n//\n// weak_count          - count of trees in the ensemble\n// loss_function_type  - loss function used for ensemble training\n// subsample_portion   - portion of whole training set used for\n//                       every single tree training.\n//                       subsample_portion value is in (0.0, 1.0].\n//                       subsample_portion == 1.0 when whole dataset is\n//                       used on each step. Count of sample used on each\n//                       step is computed as\n//                       int(total_samples_count * subsample_portion).\n// shrinkage           - regularization parameter.\n//                       Each tree prediction is multiplied on shrinkage value.\n\n\nstruct CV_EXPORTS_W_MAP CvGBTreesParams : public CvDTreeParams\n{\n    CV_PROP_RW int weak_count;\n    CV_PROP_RW int loss_function_type;\n    CV_PROP_RW float subsample_portion;\n    CV_PROP_RW float shrinkage;\n\n    CvGBTreesParams();\n    CvGBTreesParams( int loss_function_type, int weak_count, float shrinkage,\n        float subsample_portion, int max_depth, bool use_surrogates );\n};\n\n// DataType: CLASS CvGBTrees\n// Gradient Boosting Trees (GBT) algorithm implementation.\n//\n// data             - training dataset\n// params           - parameters of the CvGBTrees\n// weak             - array[0..(class_count-1)] of CvSeq\n//                    for storing tree ensembles\n// orig_response    - original responses of the training set samples\n// sum_response     - predicitons of the current model on the training dataset.\n//                    this matrix is updated on every iteration.\n// sum_response_tmp - predicitons of the model on the training set on the next\n//                    step. On every iteration values of sum_responses_tmp are\n//                    computed via sum_responses values. When the current\n//                    step is complete sum_response values become equal to\n//                    sum_responses_tmp.\n// sampleIdx       - indices of samples used for training the ensemble.\n//                    CvGBTrees training procedure takes a set of samples\n//                    (train_data) and a set of responses (responses).\n//                    Only pairs (train_data[i], responses[i]), where i is\n//                    in sample_idx are used for training the ensemble.\n// subsample_train  - indices of samples used for training a single decision\n//                    tree on the current step. This indices are countered\n//                    relatively to the sample_idx, so that pairs\n//                    (train_data[sample_idx[i]], responses[sample_idx[i]])\n//                    are used for training a decision tree.\n//                    Training set is randomly splited\n//                    in two parts (subsample_train and subsample_test)\n//                    on every iteration accordingly to the portion parameter.\n// subsample_test   - relative indices of samples from the training set,\n//                    which are not used for training a tree on the current\n//                    step.\n// missing          - mask of the missing values in the training set. This\n//                    matrix has the same size as train_data. 1 - missing\n//                    value, 0 - not a missing value.\n// class_labels     - output class labels map.\n// rng              - random number generator. Used for spliting the\n//                    training set.\n// class_count      - count of output classes.\n//                    class_count == 1 in the case of regression,\n//                    and > 1 in the case of classification.\n// delta            - Huber loss function parameter.\n// base_value       - start point of the gradient descent procedure.\n//                    model prediction is\n//                    f(x) = f_0 + sum_{i=1..weak_count-1}(f_i(x)), where\n//                    f_0 is the base value.\n\n\n\nclass CV_EXPORTS_W CvGBTrees : public CvStatModel\n{\npublic:\n\n    /*\n    // DataType: ENUM\n    // Loss functions implemented in CvGBTrees.\n    //\n    // SQUARED_LOSS\n    // problem: regression\n    // loss = (x - x')^2\n    //\n    // ABSOLUTE_LOSS\n    // problem: regression\n    // loss = abs(x - x')\n    //\n    // HUBER_LOSS\n    // problem: regression\n    // loss = delta*( abs(x - x') - delta/2), if abs(x - x') > delta\n    //           1/2*(x - x')^2, if abs(x - x') <= delta,\n    //           where delta is the alpha-quantile of pseudo responses from\n    //           the training set.\n    //\n    // DEVIANCE_LOSS\n    // problem: classification\n    //\n    */\n    enum {SQUARED_LOSS=0, ABSOLUTE_LOSS, HUBER_LOSS=3, DEVIANCE_LOSS};\n\n\n    /*\n    // Default constructor. Creates a model only (without training).\n    // Should be followed by one form of the train(...) function.\n    //\n    // API\n    // CvGBTrees();\n\n    // INPUT\n    // OUTPUT\n    // RESULT\n    */\n    CV_WRAP CvGBTrees();\n\n\n    /*\n    // Full form constructor. Creates a gradient boosting model and does the\n    // train.\n    //\n    // API\n    // CvGBTrees( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvGBTreesParams params=CvGBTreesParams() );\n\n    // INPUT\n    // trainData    - a set of input feature vectors.\n    //                  size of matrix is\n    //                  <count of samples> x <variables count>\n    //                  or <variables count> x <count of samples>\n    //                  depending on the tflag parameter.\n    //                  matrix values are float.\n    // tflag         - a flag showing how do samples stored in the\n    //                  trainData matrix row by row (tflag=CV_ROW_SAMPLE)\n    //                  or column by column (tflag=CV_COL_SAMPLE).\n    // responses     - a vector of responses corresponding to the samples\n    //                  in trainData.\n    // varIdx       - indices of used variables. zero value means that all\n    //                  variables are active.\n    // sampleIdx    - indices of used samples. zero value means that all\n    //                  samples from trainData are in the training set.\n    // varType      - vector of <variables count> length. gives every\n    //                  variable type CV_VAR_CATEGORICAL or CV_VAR_ORDERED.\n    //                  varType = 0 means all variables are numerical.\n    // missingDataMask  - a mask of misiing values in trainData.\n    //                  missingDataMask = 0 means that there are no missing\n    //                  values.\n    // params         - parameters of GTB algorithm.\n    // OUTPUT\n    // RESULT\n    */\n    CvGBTrees( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvGBTreesParams params=CvGBTreesParams() );\n\n\n    /*\n    // Destructor.\n    */\n    virtual ~CvGBTrees();\n\n\n    /*\n    // Gradient tree boosting model training\n    //\n    // API\n    // virtual bool train( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvGBTreesParams params=CvGBTreesParams(),\n             bool update=false );\n\n    // INPUT\n    // trainData    - a set of input feature vectors.\n    //                  size of matrix is\n    //                  <count of samples> x <variables count>\n    //                  or <variables count> x <count of samples>\n    //                  depending on the tflag parameter.\n    //                  matrix values are float.\n    // tflag         - a flag showing how do samples stored in the\n    //                  trainData matrix row by row (tflag=CV_ROW_SAMPLE)\n    //                  or column by column (tflag=CV_COL_SAMPLE).\n    // responses     - a vector of responses corresponding to the samples\n    //                  in trainData.\n    // varIdx       - indices of used variables. zero value means that all\n    //                  variables are active.\n    // sampleIdx    - indices of used samples. zero value means that all\n    //                  samples from trainData are in the training set.\n    // varType      - vector of <variables count> length. gives every\n    //                  variable type CV_VAR_CATEGORICAL or CV_VAR_ORDERED.\n    //                  varType = 0 means all variables are numerical.\n    // missingDataMask  - a mask of misiing values in trainData.\n    //                  missingDataMask = 0 means that there are no missing\n    //                  values.\n    // params         - parameters of GTB algorithm.\n    // update         - is not supported now. (!)\n    // OUTPUT\n    // RESULT\n    // Error state.\n    */\n    virtual bool train( const CvMat* trainData, int tflag,\n             const CvMat* responses, const CvMat* varIdx=0,\n             const CvMat* sampleIdx=0, const CvMat* varType=0,\n             const CvMat* missingDataMask=0,\n             CvGBTreesParams params=CvGBTreesParams(),\n             bool update=false );\n\n\n    /*\n    // Gradient tree boosting model training\n    //\n    // API\n    // virtual bool train( CvMLData* data,\n             CvGBTreesParams params=CvGBTreesParams(),\n             bool update=false ) {return false;};\n\n    // INPUT\n    // data          - training set.\n    // params        - parameters of GTB algorithm.\n    // update        - is not supported now. (!)\n    // OUTPUT\n    // RESULT\n    // Error state.\n    */\n    virtual bool train( CvMLData* data,\n             CvGBTreesParams params=CvGBTreesParams(),\n             bool update=false );\n\n\n    /*\n    // Response value prediction\n    //\n    // API\n    // virtual float predict_serial( const CvMat* sample, const CvMat* missing=0,\n             CvMat* weak_responses=0, CvSlice slice = CV_WHOLE_SEQ,\n             int k=-1 ) const;\n\n    // INPUT\n    // sample         - input sample of the same type as in the training set.\n    // missing        - missing values mask. missing=0 if there are no\n    //                   missing values in sample vector.\n    // weak_responses  - predictions of all of the trees.\n    //                   not implemented (!)\n    // slice           - part of the ensemble used for prediction.\n    //                   slice = CV_WHOLE_SEQ when all trees are used.\n    // k               - number of ensemble used.\n    //                   k is in {-1,0,1,..,<count of output classes-1>}.\n    //                   in the case of classification problem\n    //                   <count of output classes-1> ensembles are built.\n    //                   If k = -1 ordinary prediction is the result,\n    //                   otherwise function gives the prediction of the\n    //                   k-th ensemble only.\n    // OUTPUT\n    // RESULT\n    // Predicted value.\n    */\n    virtual float predict_serial( const CvMat* sample, const CvMat* missing=0,\n            CvMat* weakResponses=0, CvSlice slice = CV_WHOLE_SEQ,\n            int k=-1 ) const;\n\n    /*\n    // Response value prediction.\n    // Parallel version (in the case of TBB existence)\n    //\n    // API\n    // virtual float predict( const CvMat* sample, const CvMat* missing=0,\n             CvMat* weak_responses=0, CvSlice slice = CV_WHOLE_SEQ,\n             int k=-1 ) const;\n\n    // INPUT\n    // sample         - input sample of the same type as in the training set.\n    // missing        - missing values mask. missing=0 if there are no\n    //                   missing values in sample vector.\n    // weak_responses  - predictions of all of the trees.\n    //                   not implemented (!)\n    // slice           - part of the ensemble used for prediction.\n    //                   slice = CV_WHOLE_SEQ when all trees are used.\n    // k               - number of ensemble used.\n    //                   k is in {-1,0,1,..,<count of output classes-1>}.\n    //                   in the case of classification problem\n    //                   <count of output classes-1> ensembles are built.\n    //                   If k = -1 ordinary prediction is the result,\n    //                   otherwise function gives the prediction of the\n    //                   k-th ensemble only.\n    // OUTPUT\n    // RESULT\n    // Predicted value.\n    */\n    virtual float predict( const CvMat* sample, const CvMat* missing=0,\n            CvMat* weakResponses=0, CvSlice slice = CV_WHOLE_SEQ,\n            int k=-1 ) const;\n\n    /*\n    // Deletes all the data.\n    //\n    // API\n    // virtual void clear();\n\n    // INPUT\n    // OUTPUT\n    // delete data, weak, orig_response, sum_response,\n    //        weak_eval, subsample_train, subsample_test,\n    //        sample_idx, missing, lass_labels\n    // delta = 0.0\n    // RESULT\n    */\n    CV_WRAP virtual void clear();\n\n    /*\n    // Compute error on the train/test set.\n    //\n    // API\n    // virtual float calc_error( CvMLData* _data, int type,\n    //        std::vector<float> *resp = 0 );\n    //\n    // INPUT\n    // data  - dataset\n    // type  - defines which error is to compute: train (CV_TRAIN_ERROR) or\n    //         test (CV_TEST_ERROR).\n    // OUTPUT\n    // resp  - vector of predicitons\n    // RESULT\n    // Error value.\n    */\n    virtual float calc_error( CvMLData* _data, int type,\n            std::vector<float> *resp = 0 );\n\n    /*\n    //\n    // Write parameters of the gtb model and data. Write learned model.\n    //\n    // API\n    // virtual void write( CvFileStorage* fs, const char* name ) const;\n    //\n    // INPUT\n    // fs     - file storage to read parameters from.\n    // name   - model name.\n    // OUTPUT\n    // RESULT\n    */\n    virtual void write( CvFileStorage* fs, const char* name ) const;\n\n\n    /*\n    //\n    // Read parameters of the gtb model and data. Read learned model.\n    //\n    // API\n    // virtual void read( CvFileStorage* fs, CvFileNode* node );\n    //\n    // INPUT\n    // fs     - file storage to read parameters from.\n    // node   - file node.\n    // OUTPUT\n    // RESULT\n    */\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n\n\n    // new-style C++ interface\n    CV_WRAP CvGBTrees( const cv::Mat& trainData, int tflag,\n              const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n              const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n              const cv::Mat& missingDataMask=cv::Mat(),\n              CvGBTreesParams params=CvGBTreesParams() );\n\n    CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag,\n                       const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(),\n                       const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(),\n                       const cv::Mat& missingDataMask=cv::Mat(),\n                       CvGBTreesParams params=CvGBTreesParams(),\n                       bool update=false );\n\n    CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing=cv::Mat(),\n                           const cv::Range& slice = cv::Range::all(),\n                           int k=-1 ) const;\n\nprotected:\n\n    /*\n    // Compute the gradient vector components.\n    //\n    // API\n    // virtual void find_gradient( const int k = 0);\n\n    // INPUT\n    // k        - used for classification problem, determining current\n    //            tree ensemble.\n    // OUTPUT\n    // changes components of data->responses\n    // which correspond to samples used for training\n    // on the current step.\n    // RESULT\n    */\n    virtual void find_gradient( const int k = 0);\n\n\n    /*\n    //\n    // Change values in tree leaves according to the used loss function.\n    //\n    // API\n    // virtual void change_values(CvDTree* tree, const int k = 0);\n    //\n    // INPUT\n    // tree      - decision tree to change.\n    // k         - used for classification problem, determining current\n    //             tree ensemble.\n    // OUTPUT\n    // changes 'value' fields of the trees' leaves.\n    // changes sum_response_tmp.\n    // RESULT\n    */\n    virtual void change_values(CvDTree* tree, const int k = 0);\n\n\n    /*\n    //\n    // Find optimal constant prediction value according to the used loss\n    // function.\n    // The goal is to find a constant which gives the minimal summary loss\n    // on the _Idx samples.\n    //\n    // API\n    // virtual float find_optimal_value( const CvMat* _Idx );\n    //\n    // INPUT\n    // _Idx        - indices of the samples from the training set.\n    // OUTPUT\n    // RESULT\n    // optimal constant value.\n    */\n    virtual float find_optimal_value( const CvMat* _Idx );\n\n\n    /*\n    //\n    // Randomly split the whole training set in two parts according\n    // to params.portion.\n    //\n    // API\n    // virtual void do_subsample();\n    //\n    // INPUT\n    // OUTPUT\n    // subsample_train - indices of samples used for training\n    // subsample_test  - indices of samples used for test\n    // RESULT\n    */\n    virtual void do_subsample();\n\n\n    /*\n    //\n    // Internal recursive function giving an array of subtree tree leaves.\n    //\n    // API\n    // void leaves_get( CvDTreeNode** leaves, int& count, CvDTreeNode* node );\n    //\n    // INPUT\n    // node         - current leaf.\n    // OUTPUT\n    // count        - count of leaves in the subtree.\n    // leaves       - array of pointers to leaves.\n    // RESULT\n    */\n    void leaves_get( CvDTreeNode** leaves, int& count, CvDTreeNode* node );\n\n\n    /*\n    //\n    // Get leaves of the tree.\n    //\n    // API\n    // CvDTreeNode** GetLeaves( const CvDTree* dtree, int& len );\n    //\n    // INPUT\n    // dtree            - decision tree.\n    // OUTPUT\n    // len              - count of the leaves.\n    // RESULT\n    // CvDTreeNode**    - array of pointers to leaves.\n    */\n    CvDTreeNode** GetLeaves( const CvDTree* dtree, int& len );\n\n\n    /*\n    //\n    // Is it a regression or a classification.\n    //\n    // API\n    // bool problem_type();\n    //\n    // INPUT\n    // OUTPUT\n    // RESULT\n    // false if it is a classification problem,\n    // true - if regression.\n    */\n    virtual bool problem_type() const;\n\n\n    /*\n    //\n    // Write parameters of the gtb model.\n    //\n    // API\n    // virtual void write_params( CvFileStorage* fs ) const;\n    //\n    // INPUT\n    // fs           - file storage to write parameters to.\n    // OUTPUT\n    // RESULT\n    */\n    virtual void write_params( CvFileStorage* fs ) const;\n\n\n    /*\n    //\n    // Read parameters of the gtb model and data.\n    //\n    // API\n    // virtual void read_params( CvFileStorage* fs );\n    //\n    // INPUT\n    // fs           - file storage to read parameters from.\n    // OUTPUT\n    // params       - parameters of the gtb model.\n    // data         - contains information about the structure\n    //                of the data set (count of variables,\n    //                their types, etc.).\n    // class_labels - output class labels map.\n    // RESULT\n    */\n    virtual void read_params( CvFileStorage* fs, CvFileNode* fnode );\n    int get_len(const CvMat* mat) const;\n\n\n    CvDTreeTrainData* data;\n    CvGBTreesParams params;\n\n    CvSeq** weak;\n    CvMat* orig_response;\n    CvMat* sum_response;\n    CvMat* sum_response_tmp;\n    CvMat* sample_idx;\n    CvMat* subsample_train;\n    CvMat* subsample_test;\n    CvMat* missing;\n    CvMat* class_labels;\n\n    cv::RNG* rng;\n\n    int class_count;\n    float delta;\n    float base_value;\n\n};\n\n\n\n/****************************************************************************************\\\n*                              Artificial Neural Networks (ANN)                          *\n\\****************************************************************************************/\n\n/////////////////////////////////// Multi-Layer Perceptrons //////////////////////////////\n\nstruct CV_EXPORTS_W_MAP CvANN_MLP_TrainParams\n{\n    CvANN_MLP_TrainParams();\n    CvANN_MLP_TrainParams( CvTermCriteria term_crit, int train_method,\n                           double param1, double param2=0 );\n    ~CvANN_MLP_TrainParams();\n\n    enum { BACKPROP=0, RPROP=1 };\n\n    CV_PROP_RW CvTermCriteria term_crit;\n    CV_PROP_RW int train_method;\n\n    // backpropagation parameters\n    CV_PROP_RW double bp_dw_scale, bp_moment_scale;\n\n    // rprop parameters\n    CV_PROP_RW double rp_dw0, rp_dw_plus, rp_dw_minus, rp_dw_min, rp_dw_max;\n};\n\n\nclass CV_EXPORTS_W CvANN_MLP : public CvStatModel\n{\npublic:\n    CV_WRAP CvANN_MLP();\n    CvANN_MLP( const CvMat* layerSizes,\n               int activateFunc=CvANN_MLP::SIGMOID_SYM,\n               double fparam1=0, double fparam2=0 );\n\n    virtual ~CvANN_MLP();\n\n    virtual void create( const CvMat* layerSizes,\n                         int activateFunc=CvANN_MLP::SIGMOID_SYM,\n                         double fparam1=0, double fparam2=0 );\n\n    virtual int train( const CvMat* inputs, const CvMat* outputs,\n                       const CvMat* sampleWeights, const CvMat* sampleIdx=0,\n                       CvANN_MLP_TrainParams params = CvANN_MLP_TrainParams(),\n                       int flags=0 );\n    virtual float predict( const CvMat* inputs, CV_OUT CvMat* outputs ) const;\n\n    CV_WRAP CvANN_MLP( const cv::Mat& layerSizes,\n              int activateFunc=CvANN_MLP::SIGMOID_SYM,\n              double fparam1=0, double fparam2=0 );\n\n    CV_WRAP virtual void create( const cv::Mat& layerSizes,\n                        int activateFunc=CvANN_MLP::SIGMOID_SYM,\n                        double fparam1=0, double fparam2=0 );\n\n    CV_WRAP virtual int train( const cv::Mat& inputs, const cv::Mat& outputs,\n                      const cv::Mat& sampleWeights, const cv::Mat& sampleIdx=cv::Mat(),\n                      CvANN_MLP_TrainParams params = CvANN_MLP_TrainParams(),\n                      int flags=0 );\n\n    CV_WRAP virtual float predict( const cv::Mat& inputs, CV_OUT cv::Mat& outputs ) const;\n\n    CV_WRAP virtual void clear();\n\n    // possible activation functions\n    enum { IDENTITY = 0, SIGMOID_SYM = 1, GAUSSIAN = 2 };\n\n    // available training flags\n    enum { UPDATE_WEIGHTS = 1, NO_INPUT_SCALE = 2, NO_OUTPUT_SCALE = 4 };\n\n    virtual void read( CvFileStorage* fs, CvFileNode* node );\n    virtual void write( CvFileStorage* storage, const char* name ) const;\n\n    int get_layer_count() { return layer_sizes ? layer_sizes->cols : 0; }\n    const CvMat* get_layer_sizes() { return layer_sizes; }\n    double* get_weights(int layer)\n    {\n        return layer_sizes && weights &&\n            (unsigned)layer <= (unsigned)layer_sizes->cols ? weights[layer] : 0;\n    }\n\n    virtual void calc_activ_func_deriv( CvMat* xf, CvMat* deriv, const double* bias ) const;\n\nprotected:\n\n    virtual bool prepare_to_train( const CvMat* _inputs, const CvMat* _outputs,\n            const CvMat* _sample_weights, const CvMat* sampleIdx,\n            CvVectors* _ivecs, CvVectors* _ovecs, double** _sw, int _flags );\n\n    // sequential random backpropagation\n    virtual int train_backprop( CvVectors _ivecs, CvVectors _ovecs, const double* _sw );\n\n    // RPROP algorithm\n    virtual int train_rprop( CvVectors _ivecs, CvVectors _ovecs, const double* _sw );\n\n    virtual void calc_activ_func( CvMat* xf, const double* bias ) const;\n    virtual void set_activ_func( int _activ_func=SIGMOID_SYM,\n                                 double _f_param1=0, double _f_param2=0 );\n    virtual void init_weights();\n    virtual void scale_input( const CvMat* _src, CvMat* _dst ) const;\n    virtual void scale_output( const CvMat* _src, CvMat* _dst ) const;\n    virtual void calc_input_scale( const CvVectors* vecs, int flags );\n    virtual void calc_output_scale( const CvVectors* vecs, int flags );\n\n    virtual void write_params( CvFileStorage* fs ) const;\n    virtual void read_params( CvFileStorage* fs, CvFileNode* node );\n\n    CvMat* layer_sizes;\n    CvMat* wbuf;\n    CvMat* sample_weights;\n    double** weights;\n    double f_param1, f_param2;\n    double min_val, max_val, min_val1, max_val1;\n    int activ_func;\n    int max_count, max_buf_sz;\n    CvANN_MLP_TrainParams params;\n    cv::RNG* rng;\n};\n\n/****************************************************************************************\\\n*                           Auxilary functions declarations                              *\n\\****************************************************************************************/\n\n/* Generates <sample> from multivariate normal distribution, where <mean> - is an\n   average row vector, <cov> - symmetric covariation matrix */\nCVAPI(void) cvRandMVNormal( CvMat* mean, CvMat* cov, CvMat* sample,\n                           CvRNG* rng CV_DEFAULT(0) );\n\n/* Generates sample from gaussian mixture distribution */\nCVAPI(void) cvRandGaussMixture( CvMat* means[],\n                               CvMat* covs[],\n                               float weights[],\n                               int clsnum,\n                               CvMat* sample,\n                               CvMat* sampClasses CV_DEFAULT(0) );\n\n#define CV_TS_CONCENTRIC_SPHERES 0\n\n/* creates test set */\nCVAPI(void) cvCreateTestSet( int type, CvMat** samples,\n                 int num_samples,\n                 int num_features,\n                 CvMat** responses,\n                 int num_classes, ... );\n\n/****************************************************************************************\\\n*                                      Data                                             *\n\\****************************************************************************************/\n\n#define CV_COUNT     0\n#define CV_PORTION   1\n\nstruct CV_EXPORTS CvTrainTestSplit\n{\n    CvTrainTestSplit();\n    CvTrainTestSplit( int train_sample_count, bool mix = true);\n    CvTrainTestSplit( float train_sample_portion, bool mix = true);\n\n    union\n    {\n        int count;\n        float portion;\n    } train_sample_part;\n    int train_sample_part_mode;\n\n    bool mix;\n};\n\nclass CV_EXPORTS CvMLData\n{\npublic:\n    CvMLData();\n    virtual ~CvMLData();\n\n    // returns:\n    // 0 - OK\n    // -1 - file can not be opened or is not correct\n    int read_csv( const char* filename );\n\n    const CvMat* get_values() const;\n    const CvMat* get_responses();\n    const CvMat* get_missing() const;\n\n    void set_response_idx( int idx ); // old response become predictors, new response_idx = idx\n                                      // if idx < 0 there will be no response\n    int get_response_idx() const;\n\n    void set_train_test_split( const CvTrainTestSplit * spl );\n    const CvMat* get_train_sample_idx() const;\n    const CvMat* get_test_sample_idx() const;\n    void mix_train_and_test_idx();\n\n    const CvMat* get_var_idx();\n    void chahge_var_idx( int vi, bool state ); // misspelled (saved for back compitability),\n                                               // use change_var_idx\n    void change_var_idx( int vi, bool state ); // state == true to set vi-variable as predictor\n\n    const CvMat* get_var_types();\n    int get_var_type( int var_idx ) const;\n    // following 2 methods enable to change vars type\n    // use these methods to assign CV_VAR_CATEGORICAL type for categorical variable\n    // with numerical labels; in the other cases var types are correctly determined automatically\n    void set_var_types( const char* str );  // str examples:\n                                            // \"ord[0-17],cat[18]\", \"ord[0,2,4,10-12], cat[1,3,5-9,13,14]\",\n                                            // \"cat\", \"ord\" (all vars are categorical/ordered)\n    void change_var_type( int var_idx, int type); // type in { CV_VAR_ORDERED, CV_VAR_CATEGORICAL }\n\n    void set_delimiter( char ch );\n    char get_delimiter() const;\n\n    void set_miss_ch( char ch );\n    char get_miss_ch() const;\n\n    const std::map<std::string, int>& get_class_labels_map() const;\n\nprotected:\n    virtual void clear();\n\n    void str_to_flt_elem( const char* token, float& flt_elem, int& type);\n    void free_train_test_idx();\n\n    char delimiter;\n    char miss_ch;\n    //char flt_separator;\n\n    CvMat* values;\n    CvMat* missing;\n    CvMat* var_types;\n    CvMat* var_idx_mask;\n\n    CvMat* response_out; // header\n    CvMat* var_idx_out; // mat\n    CvMat* var_types_out; // mat\n\n    int response_idx;\n\n    int train_sample_count;\n    bool mix;\n\n    int total_class_count;\n    std::map<std::string, int> class_map;\n\n    CvMat* train_sample_idx;\n    CvMat* test_sample_idx;\n    int* sample_idx; // data of train_sample_idx and test_sample_idx\n\n    cv::RNG* rng;\n};\n\n\nnamespace cv\n{\n\ntypedef CvStatModel StatModel;\ntypedef CvParamGrid ParamGrid;\ntypedef CvNormalBayesClassifier NormalBayesClassifier;\ntypedef CvKNearest KNearest;\ntypedef CvSVMParams SVMParams;\ntypedef CvSVMKernel SVMKernel;\ntypedef CvSVMSolver SVMSolver;\ntypedef CvSVM SVM;\ntypedef CvDTreeParams DTreeParams;\ntypedef CvMLData TrainData;\ntypedef CvDTree DecisionTree;\ntypedef CvForestTree ForestTree;\ntypedef CvRTParams RandomTreeParams;\ntypedef CvRTrees RandomTrees;\ntypedef CvERTreeTrainData ERTreeTRainData;\ntypedef CvForestERTree ERTree;\ntypedef CvERTrees ERTrees;\ntypedef CvBoostParams BoostParams;\ntypedef CvBoostTree BoostTree;\ntypedef CvBoost Boost;\ntypedef CvANN_MLP_TrainParams ANN_MLP_TrainParams;\ntypedef CvANN_MLP NeuralNet_MLP;\ntypedef CvGBTreesParams GradientBoostingTreeParams;\ntypedef CvGBTrees GradientBoostingTrees;\n\ntemplate<> CV_EXPORTS void Ptr<CvDTreeSplit>::delete_obj();\n\nCV_EXPORTS bool initModule_ml(void);\n\n}\n\n#endif // __cplusplus\n#endif // __OPENCV_ML_HPP__\n\n/* End of file. */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/nonfree/features2d.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_NONFREE_FEATURES_2D_HPP__\n#define __OPENCV_NONFREE_FEATURES_2D_HPP__\n\n#include \"opencv2/features2d/features2d.hpp\"\n\n#ifdef __cplusplus\n\nnamespace cv\n{\n\n/*!\n SIFT implementation.\n\n The class implements SIFT algorithm by D. Lowe.\n*/\nclass CV_EXPORTS_W SIFT : public Feature2D\n{\npublic:\n    CV_WRAP explicit SIFT( int nfeatures=0, int nOctaveLayers=3,\n          double contrastThreshold=0.04, double edgeThreshold=10,\n          double sigma=1.6);\n\n    //! returns the descriptor size in floats (128)\n    CV_WRAP int descriptorSize() const;\n\n    //! returns the descriptor type\n    CV_WRAP int descriptorType() const;\n\n    //! finds the keypoints using SIFT algorithm\n    void operator()(InputArray img, InputArray mask,\n                    vector<KeyPoint>& keypoints) const;\n    //! finds the keypoints and computes descriptors for them using SIFT algorithm.\n    //! Optionally it can compute descriptors for the user-provided keypoints\n    void operator()(InputArray img, InputArray mask,\n                    vector<KeyPoint>& keypoints,\n                    OutputArray descriptors,\n                    bool useProvidedKeypoints=false) const;\n\n    AlgorithmInfo* info() const;\n\n    void buildGaussianPyramid( const Mat& base, vector<Mat>& pyr, int nOctaves ) const;\n    void buildDoGPyramid( const vector<Mat>& pyr, vector<Mat>& dogpyr ) const;\n    void findScaleSpaceExtrema( const vector<Mat>& gauss_pyr, const vector<Mat>& dog_pyr,\n                                vector<KeyPoint>& keypoints ) const;\n\nprotected:\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n    void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n\n    CV_PROP_RW int nfeatures;\n    CV_PROP_RW int nOctaveLayers;\n    CV_PROP_RW double contrastThreshold;\n    CV_PROP_RW double edgeThreshold;\n    CV_PROP_RW double sigma;\n};\n\ntypedef SIFT SiftFeatureDetector;\ntypedef SIFT SiftDescriptorExtractor;\n\n/*!\n SURF implementation.\n\n The class implements SURF algorithm by H. Bay et al.\n */\nclass CV_EXPORTS_W SURF : public Feature2D\n{\npublic:\n    //! the default constructor\n    CV_WRAP SURF();\n    //! the full constructor taking all the necessary parameters\n    explicit CV_WRAP SURF(double hessianThreshold,\n                  int nOctaves=4, int nOctaveLayers=2,\n                  bool extended=true, bool upright=false);\n\n    //! returns the descriptor size in float's (64 or 128)\n    CV_WRAP int descriptorSize() const;\n\n    //! returns the descriptor type\n    CV_WRAP int descriptorType() const;\n\n    //! finds the keypoints using fast hessian detector used in SURF\n    void operator()(InputArray img, InputArray mask,\n                    CV_OUT vector<KeyPoint>& keypoints) const;\n    //! finds the keypoints and computes their descriptors. Optionally it can compute descriptors for the user-provided keypoints\n    void operator()(InputArray img, InputArray mask,\n                    CV_OUT vector<KeyPoint>& keypoints,\n                    OutputArray descriptors,\n                    bool useProvidedKeypoints=false) const;\n\n    AlgorithmInfo* info() const;\n\n    CV_PROP_RW double hessianThreshold;\n    CV_PROP_RW int nOctaves;\n    CV_PROP_RW int nOctaveLayers;\n    CV_PROP_RW bool extended;\n    CV_PROP_RW bool upright;\n\nprotected:\n\n    void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\n    void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\n};\n\ntypedef SURF SurfFeatureDetector;\ntypedef SURF SurfDescriptorExtractor;\n\n} /* namespace cv */\n\n#endif /* __cplusplus */\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/nonfree/gpu.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_NONFREE_GPU_HPP__\n#define __OPENCV_NONFREE_GPU_HPP__\n\n#include \"opencv2/core/gpumat.hpp\"\n\nnamespace cv { namespace gpu {\n\nclass CV_EXPORTS SURF_GPU\n{\npublic:\n    enum KeypointLayout\n    {\n        X_ROW = 0,\n        Y_ROW,\n        LAPLACIAN_ROW,\n        OCTAVE_ROW,\n        SIZE_ROW,\n        ANGLE_ROW,\n        HESSIAN_ROW,\n        ROWS_COUNT\n    };\n\n    //! the default constructor\n    SURF_GPU();\n    //! the full constructor taking all the necessary parameters\n    explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4,\n         int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f, bool _upright = false);\n\n    //! returns the descriptor size in float's (64 or 128)\n    int descriptorSize() const;\n\n    //! upload host keypoints to device memory\n    void uploadKeypoints(const std::vector<KeyPoint>& keypoints, GpuMat& keypointsGPU);\n    //! download keypoints from device to host memory\n    void downloadKeypoints(const GpuMat& keypointsGPU, std::vector<KeyPoint>& keypoints);\n\n    //! download descriptors from device to host memory\n    void downloadDescriptors(const GpuMat& descriptorsGPU, std::vector<float>& descriptors);\n\n    //! finds the keypoints using fast hessian detector used in SURF\n    //! supports CV_8UC1 images\n    //! keypoints will have nFeature cols and 6 rows\n    //! keypoints.ptr<float>(X_ROW)[i] will contain x coordinate of i'th feature\n    //! keypoints.ptr<float>(Y_ROW)[i] will contain y coordinate of i'th feature\n    //! keypoints.ptr<float>(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature\n    //! keypoints.ptr<float>(OCTAVE_ROW)[i] will contain octave of i'th feature\n    //! keypoints.ptr<float>(SIZE_ROW)[i] will contain size of i'th feature\n    //! keypoints.ptr<float>(ANGLE_ROW)[i] will contain orientation of i'th feature\n    //! keypoints.ptr<float>(HESSIAN_ROW)[i] will contain response of i'th feature\n    void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints);\n    //! finds the keypoints and computes their descriptors.\n    //! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction\n    void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints, GpuMat& descriptors,\n        bool useProvidedKeypoints = false);\n\n    void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints);\n    void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, GpuMat& descriptors,\n        bool useProvidedKeypoints = false);\n\n    void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, std::vector<float>& descriptors,\n        bool useProvidedKeypoints = false);\n\n    void releaseMemory();\n\n    // SURF parameters\n    double hessianThreshold;\n    int nOctaves;\n    int nOctaveLayers;\n    bool extended;\n    bool upright;\n\n    //! max keypoints = min(keypointsRatio * img.size().area(), 65535)\n    float keypointsRatio;\n\n    GpuMat sum, mask1, maskSum, intBuffer;\n\n    GpuMat det, trace;\n\n    GpuMat maxPosBuffer;\n};\n\n} // namespace gpu\n\n} // namespace cv\n\n#endif // __OPENCV_NONFREE_GPU_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/nonfree/nonfree.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_NONFREE_HPP__\n#define __OPENCV_NONFREE_HPP__\n\n#include \"opencv2/nonfree/features2d.hpp\"\n\nnamespace cv\n{\n\nCV_EXPORTS_W bool initModule_nonfree();\n\n}\n\n#endif\n\n/* End of file. */\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/nonfree/ocl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n// By downloading, copying, installing or using the software you agree to this license.\n// If you do not agree to this license, do not download, install,\n// copy or use the software.\n//\n//\n// License Agreement\n// For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Copyright (C) 2013, OpenCV Foundation, all rights reserved.\n// Third party copyrights are property of their respective owners.\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// * Redistribution's of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// * Redistribution's in binary form must reproduce the above copyright notice,\n// this list of conditions and the following disclaimer in the documentation\n// and/or other materials provided with the distribution.\n//\n// * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_NONFREE_OCL_HPP__\n#define __OPENCV_NONFREE_OCL_HPP__\n\n#include \"opencv2/ocl/ocl.hpp\"\n\nnamespace cv\n{\n    namespace ocl\n    {\n        //! Speeded up robust features, port from GPU module.\n        ////////////////////////////////// SURF //////////////////////////////////////////\n\n        class CV_EXPORTS SURF_OCL : public cv::Feature2D\n        {\n        public:\n            enum KeypointLayout\n            {\n                X_ROW = 0,\n                Y_ROW,\n                LAPLACIAN_ROW,\n                OCTAVE_ROW,\n                SIZE_ROW,\n                ANGLE_ROW,\n                HESSIAN_ROW,\n                ROWS_COUNT\n            };\n\n            //! the default constructor\n            SURF_OCL();\n            //! the full constructor taking all the necessary parameters\n            explicit SURF_OCL(double _hessianThreshold, int _nOctaves = 4,\n                              int _nOctaveLayers = 2, bool _extended = true, float _keypointsRatio = 0.01f, bool _upright = false);\n\n            //! returns the descriptor size in float's (64 or 128)\n            int descriptorSize() const;\n\n            int descriptorType() const;\n\n            //! upload host keypoints to device memory\n            void uploadKeypoints(const vector<cv::KeyPoint> &keypoints, oclMat &keypointsocl);\n            //! download keypoints from device to host memory\n            void downloadKeypoints(const oclMat &keypointsocl, vector<KeyPoint> &keypoints);\n            //! download descriptors from device to host memory\n            void downloadDescriptors(const oclMat &descriptorsocl, vector<float> &descriptors);\n            //! finds the keypoints using fast hessian detector used in SURF\n            //! supports CV_8UC1 images\n            //! keypoints will have nFeature cols and 6 rows\n            //! keypoints.ptr<float>(X_ROW)[i] will contain x coordinate of i'th feature\n            //! keypoints.ptr<float>(Y_ROW)[i] will contain y coordinate of i'th feature\n            //! keypoints.ptr<float>(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature\n            //! keypoints.ptr<float>(OCTAVE_ROW)[i] will contain octave of i'th feature\n            //! keypoints.ptr<float>(SIZE_ROW)[i] will contain size of i'th feature\n            //! keypoints.ptr<float>(ANGLE_ROW)[i] will contain orientation of i'th feature\n            //! keypoints.ptr<float>(HESSIAN_ROW)[i] will contain response of i'th feature\n            void operator()(const oclMat &img, const oclMat &mask, oclMat &keypoints);\n            //! finds the keypoints and computes their descriptors.\n            //! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction\n            void operator()(const oclMat &img, const oclMat &mask, oclMat &keypoints, oclMat &descriptors,\n                            bool useProvidedKeypoints = false);\n            void operator()(const oclMat &img, const oclMat &mask, std::vector<KeyPoint> &keypoints);\n            void operator()(const oclMat &img, const oclMat &mask, std::vector<KeyPoint> &keypoints, oclMat &descriptors,\n                            bool useProvidedKeypoints = false);\n            void operator()(const oclMat &img, const oclMat &mask, std::vector<KeyPoint> &keypoints, std::vector<float> &descriptors,\n                            bool useProvidedKeypoints = false);\n\n            //! finds the keypoints using fast hessian detector used in SURF\n            void operator()(InputArray img, InputArray mask,\n                            CV_OUT vector<KeyPoint>& keypoints) const;\n            //! finds the keypoints and computes their descriptors. Optionally it can compute descriptors for the user-provided keypoints\n            void operator()(InputArray img, InputArray mask,\n                            CV_OUT vector<KeyPoint>& keypoints,\n                            OutputArray descriptors,\n                            bool useProvidedKeypoints=false) const;\n\n            AlgorithmInfo* info() const;\n\n            void releaseMemory();\n\n            // SURF parameters\n            float hessianThreshold;\n            int nOctaves;\n            int nOctaveLayers;\n            bool extended;\n            bool upright;\n            //! max keypoints = min(keypointsRatio * img.size().area(), 65535)\n            float keypointsRatio;\n            oclMat sum, mask1, maskSum, intBuffer;\n            oclMat det, trace;\n            oclMat maxPosBuffer;\n        protected:\n            void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask) const;\n            void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const;\n        };\n    }\n}\n\n#endif //__OPENCV_NONFREE_OCL_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/objdetect/objdetect.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_OBJDETECT_HPP__\n#define __OPENCV_OBJDETECT_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\n#ifdef __cplusplus\n#include <map>\n#include <deque>\n\nextern \"C\" {\n#endif\n\n/****************************************************************************************\\\n*                         Haar-like Object Detection functions                           *\n\\****************************************************************************************/\n\n#define CV_HAAR_MAGIC_VAL    0x42500000\n#define CV_TYPE_NAME_HAAR    \"opencv-haar-classifier\"\n\n#define CV_IS_HAAR_CLASSIFIER( haar )                                                    \\\n    ((haar) != NULL &&                                                                   \\\n    (((const CvHaarClassifierCascade*)(haar))->flags & CV_MAGIC_MASK)==CV_HAAR_MAGIC_VAL)\n\n#define CV_HAAR_FEATURE_MAX  3\n\ntypedef struct CvHaarFeature\n{\n    int tilted;\n    struct\n    {\n        CvRect r;\n        float weight;\n    } rect[CV_HAAR_FEATURE_MAX];\n} CvHaarFeature;\n\ntypedef struct CvHaarClassifier\n{\n    int count;\n    CvHaarFeature* haar_feature;\n    float* threshold;\n    int* left;\n    int* right;\n    float* alpha;\n} CvHaarClassifier;\n\ntypedef struct CvHaarStageClassifier\n{\n    int  count;\n    float threshold;\n    CvHaarClassifier* classifier;\n\n    int next;\n    int child;\n    int parent;\n} CvHaarStageClassifier;\n\ntypedef struct CvHidHaarClassifierCascade CvHidHaarClassifierCascade;\n\ntypedef struct CvHaarClassifierCascade\n{\n    int  flags;\n    int  count;\n    CvSize orig_window_size;\n    CvSize real_window_size;\n    double scale;\n    CvHaarStageClassifier* stage_classifier;\n    CvHidHaarClassifierCascade* hid_cascade;\n} CvHaarClassifierCascade;\n\ntypedef struct CvAvgComp\n{\n    CvRect rect;\n    int neighbors;\n} CvAvgComp;\n\n/* Loads haar classifier cascade from a directory.\n   It is obsolete: convert your cascade to xml and use cvLoad instead */\nCVAPI(CvHaarClassifierCascade*) cvLoadHaarClassifierCascade(\n                    const char* directory, CvSize orig_window_size);\n\nCVAPI(void) cvReleaseHaarClassifierCascade( CvHaarClassifierCascade** cascade );\n\n#define CV_HAAR_DO_CANNY_PRUNING    1\n#define CV_HAAR_SCALE_IMAGE         2\n#define CV_HAAR_FIND_BIGGEST_OBJECT 4\n#define CV_HAAR_DO_ROUGH_SEARCH     8\n\n//CVAPI(CvSeq*) cvHaarDetectObjectsForROC( const CvArr* image,\n//                     CvHaarClassifierCascade* cascade, CvMemStorage* storage,\n//                     CvSeq** rejectLevels, CvSeq** levelWeightds,\n//                     double scale_factor CV_DEFAULT(1.1),\n//                     int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),\n//                     CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)),\n//                     bool outputRejectLevels = false );\n\n\nCVAPI(CvSeq*) cvHaarDetectObjects( const CvArr* image,\n                     CvHaarClassifierCascade* cascade, CvMemStorage* storage,\n                     double scale_factor CV_DEFAULT(1.1),\n                     int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),\n                     CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)));\n\n/* sets images for haar classifier cascade */\nCVAPI(void) cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade,\n                                                const CvArr* sum, const CvArr* sqsum,\n                                                const CvArr* tilted_sum, double scale );\n\n/* runs the cascade on the specified window */\nCVAPI(int) cvRunHaarClassifierCascade( const CvHaarClassifierCascade* cascade,\n                                       CvPoint pt, int start_stage CV_DEFAULT(0));\n\n\n/****************************************************************************************\\\n*                         Latent SVM Object Detection functions                          *\n\\****************************************************************************************/\n\n// DataType: STRUCT position\n// Structure describes the position of the filter in the feature pyramid\n// l - level in the feature pyramid\n// (x, y) - coordinate in level l\ntypedef struct CvLSVMFilterPosition\n{\n    int x;\n    int y;\n    int l;\n} CvLSVMFilterPosition;\n\n// DataType: STRUCT filterObject\n// Description of the filter, which corresponds to the part of the object\n// V               - ideal (penalty = 0) position of the partial filter\n//                   from the root filter position (V_i in the paper)\n// penaltyFunction - vector describes penalty function (d_i in the paper)\n//                   pf[0] * x + pf[1] * y + pf[2] * x^2 + pf[3] * y^2\n// FILTER DESCRIPTION\n//   Rectangular map (sizeX x sizeY),\n//   every cell stores feature vector (dimension = p)\n// H               - matrix of feature vectors\n//                   to set and get feature vectors (i,j)\n//                   used formula H[(j * sizeX + i) * p + k], where\n//                   k - component of feature vector in cell (i, j)\n// END OF FILTER DESCRIPTION\ntypedef struct CvLSVMFilterObject{\n    CvLSVMFilterPosition V;\n    float fineFunction[4];\n    int sizeX;\n    int sizeY;\n    int numFeatures;\n    float *H;\n} CvLSVMFilterObject;\n\n// data type: STRUCT CvLatentSvmDetector\n// structure contains internal representation of trained Latent SVM detector\n// num_filters          - total number of filters (root plus part) in model\n// num_components       - number of components in model\n// num_part_filters     - array containing number of part filters for each component\n// filters              - root and part filters for all model components\n// b                    - biases for all model components\n// score_threshold      - confidence level threshold\ntypedef struct CvLatentSvmDetector\n{\n    int num_filters;\n    int num_components;\n    int* num_part_filters;\n    CvLSVMFilterObject** filters;\n    float* b;\n    float score_threshold;\n}\nCvLatentSvmDetector;\n\n// data type: STRUCT CvObjectDetection\n// structure contains the bounding box and confidence level for detected object\n// rect                 - bounding box for a detected object\n// score                - confidence level\ntypedef struct CvObjectDetection\n{\n    CvRect rect;\n    float score;\n} CvObjectDetection;\n\n//////////////// Object Detection using Latent SVM //////////////\n\n\n/*\n// load trained detector from a file\n//\n// API\n// CvLatentSvmDetector* cvLoadLatentSvmDetector(const char* filename);\n// INPUT\n// filename             - path to the file containing the parameters of\n                        - trained Latent SVM detector\n// OUTPUT\n// trained Latent SVM detector in internal representation\n*/\nCVAPI(CvLatentSvmDetector*) cvLoadLatentSvmDetector(const char* filename);\n\n/*\n// release memory allocated for CvLatentSvmDetector structure\n//\n// API\n// void cvReleaseLatentSvmDetector(CvLatentSvmDetector** detector);\n// INPUT\n// detector             - CvLatentSvmDetector structure to be released\n// OUTPUT\n*/\nCVAPI(void) cvReleaseLatentSvmDetector(CvLatentSvmDetector** detector);\n\n/*\n// find rectangular regions in the given image that are likely\n// to contain objects and corresponding confidence levels\n//\n// API\n// CvSeq* cvLatentSvmDetectObjects(const IplImage* image,\n//                                  CvLatentSvmDetector* detector,\n//                                  CvMemStorage* storage,\n//                                  float overlap_threshold = 0.5f,\n//                                  int numThreads = -1);\n// INPUT\n// image                - image to detect objects in\n// detector             - Latent SVM detector in internal representation\n// storage              - memory storage to store the resultant sequence\n//                          of the object candidate rectangles\n// overlap_threshold    - threshold for the non-maximum suppression algorithm\n                           = 0.5f [here will be the reference to original paper]\n// OUTPUT\n// sequence of detected objects (bounding boxes and confidence levels stored in CvObjectDetection structures)\n*/\nCVAPI(CvSeq*) cvLatentSvmDetectObjects(IplImage* image,\n                                CvLatentSvmDetector* detector,\n                                CvMemStorage* storage,\n                                float overlap_threshold CV_DEFAULT(0.5f),\n                                int numThreads CV_DEFAULT(-1));\n\n#ifdef __cplusplus\n}\n\nCV_EXPORTS CvSeq* cvHaarDetectObjectsForROC( const CvArr* image,\n                     CvHaarClassifierCascade* cascade, CvMemStorage* storage,\n                     std::vector<int>& rejectLevels, std::vector<double>& levelWeightds,\n                     double scale_factor CV_DEFAULT(1.1),\n                     int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),\n                     CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)),\n                     bool outputRejectLevels = false );\n\nnamespace cv\n{\n\n///////////////////////////// Object Detection ////////////////////////////\n\n/*\n * This is a class wrapping up the structure CvLatentSvmDetector and functions working with it.\n * The class goals are:\n * 1) provide c++ interface;\n * 2) make it possible to load and detect more than one class (model) unlike CvLatentSvmDetector.\n */\nclass CV_EXPORTS LatentSvmDetector\n{\npublic:\n    struct CV_EXPORTS ObjectDetection\n    {\n        ObjectDetection();\n        ObjectDetection( const Rect& rect, float score, int classID=-1 );\n        Rect rect;\n        float score;\n        int classID;\n    };\n\n    LatentSvmDetector();\n    LatentSvmDetector( const vector<string>& filenames, const vector<string>& classNames=vector<string>() );\n    virtual ~LatentSvmDetector();\n\n    virtual void clear();\n    virtual bool empty() const;\n    bool load( const vector<string>& filenames, const vector<string>& classNames=vector<string>() );\n\n    virtual void detect( const Mat& image,\n                         vector<ObjectDetection>& objectDetections,\n                         float overlapThreshold=0.5f,\n                         int numThreads=-1 );\n\n    const vector<string>& getClassNames() const;\n    size_t getClassCount() const;\n\nprivate:\n    vector<CvLatentSvmDetector*> detectors;\n    vector<string> classNames;\n};\n\n// class for grouping object candidates, detected by Cascade Classifier, HOG etc.\n// instance of the class is to be passed to cv::partition (see cxoperations.hpp)\nclass CV_EXPORTS SimilarRects\n{\npublic:\n    SimilarRects(double _eps) : eps(_eps) {}\n    inline bool operator()(const Rect& r1, const Rect& r2) const\n    {\n        double delta = eps*(std::min(r1.width, r2.width) + std::min(r1.height, r2.height))*0.5;\n        return std::abs(r1.x - r2.x) <= delta &&\n            std::abs(r1.y - r2.y) <= delta &&\n            std::abs(r1.x + r1.width - r2.x - r2.width) <= delta &&\n            std::abs(r1.y + r1.height - r2.y - r2.height) <= delta;\n    }\n    double eps;\n};\n\nCV_EXPORTS void groupRectangles(CV_OUT CV_IN_OUT vector<Rect>& rectList, int groupThreshold, double eps=0.2);\nCV_EXPORTS_W void groupRectangles(CV_OUT CV_IN_OUT vector<Rect>& rectList, CV_OUT vector<int>& weights, int groupThreshold, double eps=0.2);\nCV_EXPORTS void groupRectangles( vector<Rect>& rectList, int groupThreshold, double eps, vector<int>* weights, vector<double>* levelWeights );\nCV_EXPORTS void groupRectangles(vector<Rect>& rectList, vector<int>& rejectLevels,\n                                vector<double>& levelWeights, int groupThreshold, double eps=0.2);\nCV_EXPORTS void groupRectangles_meanshift(vector<Rect>& rectList, vector<double>& foundWeights, vector<double>& foundScales,\n                                          double detectThreshold = 0.0, Size winDetSize = Size(64, 128));\n\n\nclass CV_EXPORTS FeatureEvaluator\n{\npublic:\n    enum { HAAR = 0, LBP = 1, HOG = 2 };\n    virtual ~FeatureEvaluator();\n\n    virtual bool read(const FileNode& node);\n    virtual Ptr<FeatureEvaluator> clone() const;\n    virtual int getFeatureType() const;\n\n    virtual bool setImage(const Mat& img, Size origWinSize);\n    virtual bool setWindow(Point p);\n\n    virtual double calcOrd(int featureIdx) const;\n    virtual int calcCat(int featureIdx) const;\n\n    static Ptr<FeatureEvaluator> create(int type);\n};\n\ntemplate<> CV_EXPORTS void Ptr<CvHaarClassifierCascade>::delete_obj();\n\nenum\n{\n    CASCADE_DO_CANNY_PRUNING=1,\n    CASCADE_SCALE_IMAGE=2,\n    CASCADE_FIND_BIGGEST_OBJECT=4,\n    CASCADE_DO_ROUGH_SEARCH=8\n};\n\nclass CV_EXPORTS_W CascadeClassifier\n{\npublic:\n    CV_WRAP CascadeClassifier();\n    CV_WRAP CascadeClassifier( const string& filename );\n    virtual ~CascadeClassifier();\n\n    CV_WRAP virtual bool empty() const;\n    CV_WRAP bool load( const string& filename );\n    virtual bool read( const FileNode& node );\n    CV_WRAP virtual void detectMultiScale( const Mat& image,\n                                   CV_OUT vector<Rect>& objects,\n                                   double scaleFactor=1.1,\n                                   int minNeighbors=3, int flags=0,\n                                   Size minSize=Size(),\n                                   Size maxSize=Size() );\n\n    CV_WRAP virtual void detectMultiScale( const Mat& image,\n                                   CV_OUT vector<Rect>& objects,\n                                   vector<int>& rejectLevels,\n                                   vector<double>& levelWeights,\n                                   double scaleFactor=1.1,\n                                   int minNeighbors=3, int flags=0,\n                                   Size minSize=Size(),\n                                   Size maxSize=Size(),\n                                   bool outputRejectLevels=false );\n\n\n    bool isOldFormatCascade() const;\n    virtual Size getOriginalWindowSize() const;\n    int getFeatureType() const;\n    bool setImage( const Mat& );\n\nprotected:\n    //virtual bool detectSingleScale( const Mat& image, int stripCount, Size processingRectSize,\n    //                                int stripSize, int yStep, double factor, vector<Rect>& candidates );\n\n    virtual bool detectSingleScale( const Mat& image, int stripCount, Size processingRectSize,\n                                    int stripSize, int yStep, double factor, vector<Rect>& candidates,\n                                    vector<int>& rejectLevels, vector<double>& levelWeights, bool outputRejectLevels=false);\n\nprotected:\n    enum { BOOST = 0 };\n    enum { DO_CANNY_PRUNING = 1, SCALE_IMAGE = 2,\n           FIND_BIGGEST_OBJECT = 4, DO_ROUGH_SEARCH = 8 };\n\n    friend class CascadeClassifierInvoker;\n\n    template<class FEval>\n    friend int predictOrdered( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &featureEvaluator, double& weight);\n\n    template<class FEval>\n    friend int predictCategorical( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &featureEvaluator, double& weight);\n\n    template<class FEval>\n    friend int predictOrderedStump( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &featureEvaluator, double& weight);\n\n    template<class FEval>\n    friend int predictCategoricalStump( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &featureEvaluator, double& weight);\n\n    bool setImage( Ptr<FeatureEvaluator>& feval, const Mat& image);\n    virtual int runAt( Ptr<FeatureEvaluator>& feval, Point pt, double& weight );\n\n    class Data\n    {\n    public:\n        struct CV_EXPORTS DTreeNode\n        {\n            int featureIdx;\n            float threshold; // for ordered features only\n            int left;\n            int right;\n        };\n\n        struct CV_EXPORTS DTree\n        {\n            int nodeCount;\n        };\n\n        struct CV_EXPORTS Stage\n        {\n            int first;\n            int ntrees;\n            float threshold;\n        };\n\n        bool read(const FileNode &node);\n\n        bool isStumpBased;\n\n        int stageType;\n        int featureType;\n        int ncategories;\n        Size origWinSize;\n\n        vector<Stage> stages;\n        vector<DTree> classifiers;\n        vector<DTreeNode> nodes;\n        vector<float> leaves;\n        vector<int> subsets;\n    };\n\n    Data data;\n    Ptr<FeatureEvaluator> featureEvaluator;\n    Ptr<CvHaarClassifierCascade> oldCascade;\n\npublic:\n    class CV_EXPORTS MaskGenerator\n    {\n    public:\n        virtual ~MaskGenerator() {}\n        virtual cv::Mat generateMask(const cv::Mat& src)=0;\n        virtual void initializeMask(const cv::Mat& /*src*/) {};\n    };\n    void setMaskGenerator(Ptr<MaskGenerator> maskGenerator);\n    Ptr<MaskGenerator> getMaskGenerator();\n\n    void setFaceDetectionMaskGenerator();\n\nprotected:\n    Ptr<MaskGenerator> maskGenerator;\n};\n\n\n//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////\n\n// struct for detection region of interest (ROI)\nstruct DetectionROI\n{\n   // scale(size) of the bounding box\n   double scale;\n   // set of requrested locations to be evaluated\n   vector<cv::Point> locations;\n   // vector that will contain confidence values for each location\n   vector<double> confidences;\n};\n\nstruct CV_EXPORTS_W HOGDescriptor\n{\npublic:\n    enum { L2Hys=0 };\n    enum { DEFAULT_NLEVELS=64 };\n\n    CV_WRAP HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),\n        cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),\n        histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true),\n        nlevels(HOGDescriptor::DEFAULT_NLEVELS)\n    {}\n\n    CV_WRAP HOGDescriptor(Size _winSize, Size _blockSize, Size _blockStride,\n                  Size _cellSize, int _nbins, int _derivAperture=1, double _winSigma=-1,\n                  int _histogramNormType=HOGDescriptor::L2Hys,\n                  double _L2HysThreshold=0.2, bool _gammaCorrection=false,\n                  int _nlevels=HOGDescriptor::DEFAULT_NLEVELS)\n    : winSize(_winSize), blockSize(_blockSize), blockStride(_blockStride), cellSize(_cellSize),\n    nbins(_nbins), derivAperture(_derivAperture), winSigma(_winSigma),\n    histogramNormType(_histogramNormType), L2HysThreshold(_L2HysThreshold),\n    gammaCorrection(_gammaCorrection), nlevels(_nlevels)\n    {}\n\n    CV_WRAP HOGDescriptor(const String& filename)\n    {\n        load(filename);\n    }\n\n    HOGDescriptor(const HOGDescriptor& d)\n    {\n        d.copyTo(*this);\n    }\n\n    virtual ~HOGDescriptor() {}\n\n    CV_WRAP size_t getDescriptorSize() const;\n    CV_WRAP bool checkDetectorSize() const;\n    CV_WRAP double getWinSigma() const;\n\n    CV_WRAP virtual void setSVMDetector(InputArray _svmdetector);\n\n    virtual bool read(FileNode& fn);\n    virtual void write(FileStorage& fs, const String& objname) const;\n\n    CV_WRAP virtual bool load(const String& filename, const String& objname=String());\n    CV_WRAP virtual void save(const String& filename, const String& objname=String()) const;\n    virtual void copyTo(HOGDescriptor& c) const;\n\n    CV_WRAP virtual void compute(const Mat& img,\n                         CV_OUT vector<float>& descriptors,\n                         Size winStride=Size(), Size padding=Size(),\n                         const vector<Point>& locations=vector<Point>()) const;\n    //with found weights output\n    CV_WRAP virtual void detect(const Mat& img, CV_OUT vector<Point>& foundLocations,\n                        CV_OUT vector<double>& weights,\n                        double hitThreshold=0, Size winStride=Size(),\n                        Size padding=Size(),\n                        const vector<Point>& searchLocations=vector<Point>()) const;\n    //without found weights output\n    virtual void detect(const Mat& img, CV_OUT vector<Point>& foundLocations,\n                        double hitThreshold=0, Size winStride=Size(),\n                        Size padding=Size(),\n                        const vector<Point>& searchLocations=vector<Point>()) const;\n    //with result weights output\n    CV_WRAP virtual void detectMultiScale(const Mat& img, CV_OUT vector<Rect>& foundLocations,\n                                  CV_OUT vector<double>& foundWeights, double hitThreshold=0,\n                                  Size winStride=Size(), Size padding=Size(), double scale=1.05,\n                                  double finalThreshold=2.0,bool useMeanshiftGrouping = false) const;\n    //without found weights output\n    virtual void detectMultiScale(const Mat& img, CV_OUT vector<Rect>& foundLocations,\n                                  double hitThreshold=0, Size winStride=Size(),\n                                  Size padding=Size(), double scale=1.05,\n                                  double finalThreshold=2.0, bool useMeanshiftGrouping = false) const;\n\n    CV_WRAP virtual void computeGradient(const Mat& img, CV_OUT Mat& grad, CV_OUT Mat& angleOfs,\n                                 Size paddingTL=Size(), Size paddingBR=Size()) const;\n\n    CV_WRAP static vector<float> getDefaultPeopleDetector();\n    CV_WRAP static vector<float> getDaimlerPeopleDetector();\n\n    CV_PROP Size winSize;\n    CV_PROP Size blockSize;\n    CV_PROP Size blockStride;\n    CV_PROP Size cellSize;\n    CV_PROP int nbins;\n    CV_PROP int derivAperture;\n    CV_PROP double winSigma;\n    CV_PROP int histogramNormType;\n    CV_PROP double L2HysThreshold;\n    CV_PROP bool gammaCorrection;\n    CV_PROP vector<float> svmDetector;\n    CV_PROP int nlevels;\n\n\n   // evaluate specified ROI and return confidence value for each location\n   void detectROI(const cv::Mat& img, const vector<cv::Point> &locations,\n                                   CV_OUT std::vector<cv::Point>& foundLocations, CV_OUT std::vector<double>& confidences,\n                                   double hitThreshold = 0, cv::Size winStride = Size(),\n                                   cv::Size padding = Size()) const;\n\n   // evaluate specified ROI and return confidence value for each location in multiple scales\n   void detectMultiScaleROI(const cv::Mat& img,\n                                                       CV_OUT std::vector<cv::Rect>& foundLocations,\n                                                       std::vector<DetectionROI>& locations,\n                                                       double hitThreshold = 0,\n                                                       int groupThreshold = 0) const;\n\n   // read/parse Dalal's alt model file\n   void readALTModel(std::string modelfile);\n   void groupRectangles(vector<cv::Rect>& rectList, vector<double>& weights, int groupThreshold, double eps) const;\n};\n\n\nCV_EXPORTS_W void findDataMatrix(InputArray image,\n                                 CV_OUT vector<string>& codes,\n                                 OutputArray corners=noArray(),\n                                 OutputArrayOfArrays dmtx=noArray());\nCV_EXPORTS_W void drawDataMatrixCodes(InputOutputArray image,\n                                      const vector<string>& codes,\n                                      InputArray corners);\n}\n\n/****************************************************************************************\\\n*                                Datamatrix                                              *\n\\****************************************************************************************/\n\nstruct CV_EXPORTS CvDataMatrixCode {\n  char msg[4];\n  CvMat *original;\n  CvMat *corners;\n};\n\nCV_EXPORTS std::deque<CvDataMatrixCode> cvFindDataMatrix(CvMat *im);\n\n/****************************************************************************************\\\n*                                 LINE-MOD                                               *\n\\****************************************************************************************/\n\nnamespace cv {\nnamespace linemod {\n\nusing cv::FileNode;\nusing cv::FileStorage;\nusing cv::Mat;\nusing cv::noArray;\nusing cv::OutputArrayOfArrays;\nusing cv::Point;\nusing cv::Ptr;\nusing cv::Rect;\nusing cv::Size;\n\n/// @todo Convert doxy comments to rst\n\n/**\n * \\brief Discriminant feature described by its location and label.\n */\nstruct CV_EXPORTS Feature\n{\n  int x; ///< x offset\n  int y; ///< y offset\n  int label; ///< Quantization\n\n  Feature() : x(0), y(0), label(0) {}\n  Feature(int x, int y, int label);\n\n  void read(const FileNode& fn);\n  void write(FileStorage& fs) const;\n};\n\ninline Feature::Feature(int _x, int _y, int _label) : x(_x), y(_y), label(_label) {}\n\nstruct CV_EXPORTS Template\n{\n  int width;\n  int height;\n  int pyramid_level;\n  std::vector<Feature> features;\n\n  void read(const FileNode& fn);\n  void write(FileStorage& fs) const;\n};\n\n/**\n * \\brief Represents a modality operating over an image pyramid.\n */\nclass QuantizedPyramid\n{\npublic:\n  // Virtual destructor\n  virtual ~QuantizedPyramid() {}\n\n  /**\n   * \\brief Compute quantized image at current pyramid level for online detection.\n   *\n   * \\param[out] dst The destination 8-bit image. For each pixel at most one bit is set,\n   *                 representing its classification.\n   */\n  virtual void quantize(Mat& dst) const =0;\n\n  /**\n   * \\brief Extract most discriminant features at current pyramid level to form a new template.\n   *\n   * \\param[out] templ The new template.\n   */\n  virtual bool extractTemplate(Template& templ) const =0;\n\n  /**\n   * \\brief Go to the next pyramid level.\n   *\n   * \\todo Allow pyramid scale factor other than 2\n   */\n  virtual void pyrDown() =0;\n\nprotected:\n  /// Candidate feature with a score\n  struct Candidate\n  {\n    Candidate(int x, int y, int label, float score);\n\n    /// Sort candidates with high score to the front\n    bool operator<(const Candidate& rhs) const\n    {\n      return score > rhs.score;\n    }\n\n    Feature f;\n    float score;\n  };\n\n  /**\n   * \\brief Choose candidate features so that they are not bunched together.\n   *\n   * \\param[in]  candidates   Candidate features sorted by score.\n   * \\param[out] features     Destination vector of selected features.\n   * \\param[in]  num_features Number of candidates to select.\n   * \\param[in]  distance     Hint for desired distance between features.\n   */\n  static void selectScatteredFeatures(const std::vector<Candidate>& candidates,\n                                      std::vector<Feature>& features,\n                                      size_t num_features, float distance);\n};\n\ninline QuantizedPyramid::Candidate::Candidate(int x, int y, int label, float _score) : f(x, y, label), score(_score) {}\n\n/**\n * \\brief Interface for modalities that plug into the LINE template matching representation.\n *\n * \\todo Max response, to allow optimization of summing (255/MAX) features as uint8\n */\nclass CV_EXPORTS Modality\n{\npublic:\n  // Virtual destructor\n  virtual ~Modality() {}\n\n  /**\n   * \\brief Form a quantized image pyramid from a source image.\n   *\n   * \\param[in] src  The source image. Type depends on the modality.\n   * \\param[in] mask Optional mask. If not empty, unmasked pixels are set to zero\n   *                 in quantized image and cannot be extracted as features.\n   */\n  Ptr<QuantizedPyramid> process(const Mat& src,\n                    const Mat& mask = Mat()) const\n  {\n    return processImpl(src, mask);\n  }\n\n  virtual std::string name() const =0;\n\n  virtual void read(const FileNode& fn) =0;\n  virtual void write(FileStorage& fs) const =0;\n\n  /**\n   * \\brief Create modality by name.\n   *\n   * The following modality types are supported:\n   * - \"ColorGradient\"\n   * - \"DepthNormal\"\n   */\n  static Ptr<Modality> create(const std::string& modality_type);\n\n  /**\n   * \\brief Load a modality from file.\n   */\n  static Ptr<Modality> create(const FileNode& fn);\n\nprotected:\n  // Indirection is because process() has a default parameter.\n  virtual Ptr<QuantizedPyramid> processImpl(const Mat& src,\n                        const Mat& mask) const =0;\n};\n\n/**\n * \\brief Modality that computes quantized gradient orientations from a color image.\n */\nclass CV_EXPORTS ColorGradient : public Modality\n{\npublic:\n  /**\n   * \\brief Default constructor. Uses reasonable default parameter values.\n   */\n  ColorGradient();\n\n  /**\n   * \\brief Constructor.\n   *\n   * \\param weak_threshold   When quantizing, discard gradients with magnitude less than this.\n   * \\param num_features     How many features a template must contain.\n   * \\param strong_threshold Consider as candidate features only gradients whose norms are\n   *                         larger than this.\n   */\n  ColorGradient(float weak_threshold, size_t num_features, float strong_threshold);\n\n  virtual std::string name() const;\n\n  virtual void read(const FileNode& fn);\n  virtual void write(FileStorage& fs) const;\n\n  float weak_threshold;\n  size_t num_features;\n  float strong_threshold;\n\nprotected:\n  virtual Ptr<QuantizedPyramid> processImpl(const Mat& src,\n                        const Mat& mask) const;\n};\n\n/**\n * \\brief Modality that computes quantized surface normals from a dense depth map.\n */\nclass CV_EXPORTS DepthNormal : public Modality\n{\npublic:\n  /**\n   * \\brief Default constructor. Uses reasonable default parameter values.\n   */\n  DepthNormal();\n\n  /**\n   * \\brief Constructor.\n   *\n   * \\param distance_threshold   Ignore pixels beyond this distance.\n   * \\param difference_threshold When computing normals, ignore contributions of pixels whose\n   *                             depth difference with the central pixel is above this threshold.\n   * \\param num_features         How many features a template must contain.\n   * \\param extract_threshold    Consider as candidate feature only if there are no differing\n   *                             orientations within a distance of extract_threshold.\n   */\n  DepthNormal(int distance_threshold, int difference_threshold, size_t num_features,\n              int extract_threshold);\n\n  virtual std::string name() const;\n\n  virtual void read(const FileNode& fn);\n  virtual void write(FileStorage& fs) const;\n\n  int distance_threshold;\n  int difference_threshold;\n  size_t num_features;\n  int extract_threshold;\n\nprotected:\n  virtual Ptr<QuantizedPyramid> processImpl(const Mat& src,\n                        const Mat& mask) const;\n};\n\n/**\n * \\brief Debug function to colormap a quantized image for viewing.\n */\nvoid colormap(const Mat& quantized, Mat& dst);\n\n/**\n * \\brief Represents a successful template match.\n */\nstruct CV_EXPORTS Match\n{\n  Match()\n  {\n  }\n\n  Match(int x, int y, float similarity, const std::string& class_id, int template_id);\n\n  /// Sort matches with high similarity to the front\n  bool operator<(const Match& rhs) const\n  {\n    // Secondarily sort on template_id for the sake of duplicate removal\n    if (similarity != rhs.similarity)\n      return similarity > rhs.similarity;\n    else\n      return template_id < rhs.template_id;\n  }\n\n  bool operator==(const Match& rhs) const\n  {\n    return x == rhs.x && y == rhs.y && similarity == rhs.similarity && class_id == rhs.class_id;\n  }\n\n  int x;\n  int y;\n  float similarity;\n  std::string class_id;\n  int template_id;\n};\n\ninline  Match::Match(int _x, int _y, float _similarity, const std::string& _class_id, int _template_id)\n    : x(_x), y(_y), similarity(_similarity), class_id(_class_id), template_id(_template_id)\n  {\n  }\n\n/**\n * \\brief Object detector using the LINE template matching algorithm with any set of\n * modalities.\n */\nclass CV_EXPORTS Detector\n{\npublic:\n  /**\n   * \\brief Empty constructor, initialize with read().\n   */\n  Detector();\n\n  /**\n   * \\brief Constructor.\n   *\n   * \\param modalities       Modalities to use (color gradients, depth normals, ...).\n   * \\param T_pyramid        Value of the sampling step T at each pyramid level. The\n   *                         number of pyramid levels is T_pyramid.size().\n   */\n  Detector(const std::vector< Ptr<Modality> >& modalities, const std::vector<int>& T_pyramid);\n\n  /**\n   * \\brief Detect objects by template matching.\n   *\n   * Matches globally at the lowest pyramid level, then refines locally stepping up the pyramid.\n   *\n   * \\param      sources   Source images, one for each modality.\n   * \\param      threshold Similarity threshold, a percentage between 0 and 100.\n   * \\param[out] matches   Template matches, sorted by similarity score.\n   * \\param      class_ids If non-empty, only search for the desired object classes.\n   * \\param[out] quantized_images Optionally return vector<Mat> of quantized images.\n   * \\param      masks     The masks for consideration during matching. The masks should be CV_8UC1\n   *                       where 255 represents a valid pixel.  If non-empty, the vector must be\n   *                       the same size as sources.  Each element must be\n   *                       empty or the same size as its corresponding source.\n   */\n  void match(const std::vector<Mat>& sources, float threshold, std::vector<Match>& matches,\n             const std::vector<std::string>& class_ids = std::vector<std::string>(),\n             OutputArrayOfArrays quantized_images = noArray(),\n             const std::vector<Mat>& masks = std::vector<Mat>()) const;\n\n  /**\n   * \\brief Add new object template.\n   *\n   * \\param      sources      Source images, one for each modality.\n   * \\param      class_id     Object class ID.\n   * \\param      object_mask  Mask separating object from background.\n   * \\param[out] bounding_box Optionally return bounding box of the extracted features.\n   *\n   * \\return Template ID, or -1 if failed to extract a valid template.\n   */\n  int addTemplate(const std::vector<Mat>& sources, const std::string& class_id,\n          const Mat& object_mask, Rect* bounding_box = NULL);\n\n  /**\n   * \\brief Add a new object template computed by external means.\n   */\n  int addSyntheticTemplate(const std::vector<Template>& templates, const std::string& class_id);\n\n  /**\n   * \\brief Get the modalities used by this detector.\n   *\n   * You are not permitted to add/remove modalities, but you may dynamic_cast them to\n   * tweak parameters.\n   */\n  const std::vector< Ptr<Modality> >& getModalities() const { return modalities; }\n\n  /**\n   * \\brief Get sampling step T at pyramid_level.\n   */\n  int getT(int pyramid_level) const { return T_at_level[pyramid_level]; }\n\n  /**\n   * \\brief Get number of pyramid levels used by this detector.\n   */\n  int pyramidLevels() const { return pyramid_levels; }\n\n  /**\n   * \\brief Get the template pyramid identified by template_id.\n   *\n   * For example, with 2 modalities (Gradient, Normal) and two pyramid levels\n   * (L0, L1), the order is (GradientL0, NormalL0, GradientL1, NormalL1).\n   */\n  const std::vector<Template>& getTemplates(const std::string& class_id, int template_id) const;\n\n  int numTemplates() const;\n  int numTemplates(const std::string& class_id) const;\n  int numClasses() const { return static_cast<int>(class_templates.size()); }\n\n  std::vector<std::string> classIds() const;\n\n  void read(const FileNode& fn);\n  void write(FileStorage& fs) const;\n\n  std::string readClass(const FileNode& fn, const std::string &class_id_override = \"\");\n  void writeClass(const std::string& class_id, FileStorage& fs) const;\n\n  void readClasses(const std::vector<std::string>& class_ids,\n                   const std::string& format = \"templates_%s.yml.gz\");\n  void writeClasses(const std::string& format = \"templates_%s.yml.gz\") const;\n\nprotected:\n  std::vector< Ptr<Modality> > modalities;\n  int pyramid_levels;\n  std::vector<int> T_at_level;\n\n  typedef std::vector<Template> TemplatePyramid;\n  typedef std::map<std::string, std::vector<TemplatePyramid> > TemplatesMap;\n  TemplatesMap class_templates;\n\n  typedef std::vector<Mat> LinearMemories;\n  // Indexed as [pyramid level][modality][quantized label]\n  typedef std::vector< std::vector<LinearMemories> > LinearMemoryPyramid;\n\n  void matchClass(const LinearMemoryPyramid& lm_pyramid,\n                  const std::vector<Size>& sizes,\n                  float threshold, std::vector<Match>& matches,\n                  const std::string& class_id,\n                  const std::vector<TemplatePyramid>& template_pyramids) const;\n};\n\n/**\n * \\brief Factory function for detector using LINE algorithm with color gradients.\n *\n * Default parameter settings suitable for VGA images.\n */\nCV_EXPORTS Ptr<Detector> getDefaultLINE();\n\n/**\n * \\brief Factory function for detector using LINE-MOD algorithm with color gradients\n * and depth normals.\n *\n * Default parameter settings suitable for VGA images.\n */\nCV_EXPORTS Ptr<Detector> getDefaultLINEMOD();\n\n} // namespace linemod\n} // namespace cv\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/opencv.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_ALL_HPP__\n#define __OPENCV_ALL_HPP__\n\n#include \"opencv2/core/core_c.h\"\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/flann/miniflann.hpp\"\n#include \"opencv2/imgproc/imgproc_c.h\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/photo/photo.hpp\"\n//#include \"opencv2/video/video.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/objdetect/objdetect.hpp\"\n#include \"opencv2/calib3d/calib3d.hpp\"\n#include \"opencv2/ml/ml.hpp\"\n#include \"opencv2/highgui/highgui_c.h\"\n#include \"opencv2/highgui/highgui.hpp\"\n#include \"opencv2/contrib/contrib.hpp\"\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/opencv_modules.hpp",
    "content": "/*\n *      ** File generated automatically, do not modify **\n *\n * This file defines the list of modules available in current build configuration\n *\n *\n*/\n\n#define HAVE_OPENCV_CALIB3D\n#define HAVE_OPENCV_CONTRIB\n#define HAVE_OPENCV_CORE\n#define HAVE_OPENCV_FEATURES2D\n#define HAVE_OPENCV_FLANN\n#define HAVE_OPENCV_HIGHGUI\n#define HAVE_OPENCV_IMGPROC\n#define HAVE_OPENCV_LEGACY\n#define HAVE_OPENCV_ML\n#define HAVE_OPENCV_NONFREE\n#define HAVE_OPENCV_OBJDETECT\n#define HAVE_OPENCV_PHOTO\n#define HAVE_OPENCV_STITCHING\n#define HAVE_OPENCV_VIDEO\n#define HAVE_OPENCV_VIDEOSTAB\n#define HAVE_OPENCV_WORLD\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/photo/photo.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_PHOTO_HPP__\n#define __OPENCV_PHOTO_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n\n#include \"opencv2/photo/photo_c.h\"\n\n#ifdef __cplusplus\n\n/*! \\namespace cv\n Namespace where all the C++ OpenCV functionality resides\n */\nnamespace cv\n{\n\n//! the inpainting algorithm\nenum\n{\n    INPAINT_NS=CV_INPAINT_NS, // Navier-Stokes algorithm\n    INPAINT_TELEA=CV_INPAINT_TELEA // A. Telea algorithm\n};\n\n//! restores the damaged image areas using one of the available intpainting algorithms\nCV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask,\n                           OutputArray dst, double inpaintRadius, int flags );\n\n\nCV_EXPORTS_W void fastNlMeansDenoising( InputArray src, OutputArray dst, float h = 3,\n                                        int templateWindowSize = 7, int searchWindowSize = 21);\n\nCV_EXPORTS_W void fastNlMeansDenoisingColored( InputArray src, OutputArray dst,\n                                               float h = 3, float hColor = 3,\n                                               int templateWindowSize = 7, int searchWindowSize = 21);\n\nCV_EXPORTS_W void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs, OutputArray dst,\n                                             int imgToDenoiseIndex, int temporalWindowSize,\n                                             float h = 3, int templateWindowSize = 7, int searchWindowSize = 21);\n\nCV_EXPORTS_W void fastNlMeansDenoisingColoredMulti( InputArrayOfArrays srcImgs, OutputArray dst,\n                                                    int imgToDenoiseIndex, int temporalWindowSize,\n                                                    float h = 3, float hColor = 3,\n                                                    int templateWindowSize = 7, int searchWindowSize = 21);\n\n}\n\n#endif //__cplusplus\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/photo/photo_c.h",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_PHOTO_C_H__\n#define __OPENCV_PHOTO_C_H__\n\n#include \"opencv2/core/core_c.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Inpainting algorithms */\nenum\n{\n    CV_INPAINT_NS      =0,\n    CV_INPAINT_TELEA   =1\n};\n\n\n/* Inpaints the selected region in the image */\nCVAPI(void) cvInpaint( const CvArr* src, const CvArr* inpaint_mask,\n                       CvArr* dst, double inpaintRange, int flags );\n\n\n#ifdef __cplusplus\n} //extern \"C\"\n#endif\n\n#endif //__OPENCV_PHOTO_C_H__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/autocalib.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_AUTOCALIB_HPP__\n#define __OPENCV_STITCHING_AUTOCALIB_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"matchers.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n// See \"Construction of Panoramic Image Mosaics with Global and Local Alignment\"\n// by Heung-Yeung Shum and Richard Szeliski.\nvoid CV_EXPORTS focalsFromHomography(const Mat &H, double &f0, double &f1, bool &f0_ok, bool &f1_ok);\n\nvoid CV_EXPORTS estimateFocal(const std::vector<ImageFeatures> &features,\n                              const std::vector<MatchesInfo> &pairwise_matches,\n                              std::vector<double> &focals);\n\nbool CV_EXPORTS calibrateRotatingCamera(const std::vector<Mat> &Hs, Mat &K);\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_AUTOCALIB_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/blenders.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_BLENDERS_HPP__\n#define __OPENCV_STITCHING_BLENDERS_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\n\n// Simple blender which puts one image over another\nclass CV_EXPORTS Blender\n{\npublic:\n    virtual ~Blender() {}\n\n    enum { NO, FEATHER, MULTI_BAND };\n    static Ptr<Blender> createDefault(int type, bool try_gpu = false);\n\n    void prepare(const std::vector<Point> &corners, const std::vector<Size> &sizes);\n    virtual void prepare(Rect dst_roi);\n    virtual void feed(const Mat &img, const Mat &mask, Point tl);\n    virtual void blend(Mat &dst, Mat &dst_mask);\n\nprotected:\n    Mat dst_, dst_mask_;\n    Rect dst_roi_;\n};\n\n\nclass CV_EXPORTS FeatherBlender : public Blender\n{\npublic:\n    FeatherBlender(float sharpness = 0.02f);\n\n    float sharpness() const { return sharpness_; }\n    void setSharpness(float val) { sharpness_ = val; }\n\n    void prepare(Rect dst_roi);\n    void feed(const Mat &img, const Mat &mask, Point tl);\n    void blend(Mat &dst, Mat &dst_mask);\n\n    // Creates weight maps for fixed set of source images by their masks and top-left corners.\n    // Final image can be obtained by simple weighting of the source images.\n    Rect createWeightMaps(const std::vector<Mat> &masks, const std::vector<Point> &corners,\n                          std::vector<Mat> &weight_maps);\n\nprivate:\n    float sharpness_;\n    Mat weight_map_;\n    Mat dst_weight_map_;\n};\n\ninline FeatherBlender::FeatherBlender(float _sharpness) { setSharpness(_sharpness); }\n\n\nclass CV_EXPORTS MultiBandBlender : public Blender\n{\npublic:\n    MultiBandBlender(int try_gpu = false, int num_bands = 5, int weight_type = CV_32F);\n\n    int numBands() const { return actual_num_bands_; }\n    void setNumBands(int val) { actual_num_bands_ = val; }\n\n    void prepare(Rect dst_roi);\n    void feed(const Mat &img, const Mat &mask, Point tl);\n    void blend(Mat &dst, Mat &dst_mask);\n\nprivate:\n    int actual_num_bands_, num_bands_;\n    std::vector<Mat> dst_pyr_laplace_;\n    std::vector<Mat> dst_band_weights_;\n    Rect dst_roi_final_;\n    bool can_use_gpu_;\n    int weight_type_; //CV_32F or CV_16S\n};\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\nvoid CV_EXPORTS normalizeUsingWeightMap(const Mat& weight, Mat& src);\n\nvoid CV_EXPORTS createWeightMap(const Mat& mask, float sharpness, Mat& weight);\n\nvoid CV_EXPORTS createLaplacePyr(const Mat &img, int num_levels, std::vector<Mat>& pyr);\nvoid CV_EXPORTS createLaplacePyrGpu(const Mat &img, int num_levels, std::vector<Mat>& pyr);\n\n// Restores source image\nvoid CV_EXPORTS restoreImageFromLaplacePyr(std::vector<Mat>& pyr);\nvoid CV_EXPORTS restoreImageFromLaplacePyrGpu(std::vector<Mat>& pyr);\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_BLENDERS_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/camera.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_CAMERA_HPP__\n#define __OPENCV_STITCHING_CAMERA_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nstruct CV_EXPORTS CameraParams\n{\n    CameraParams();\n    CameraParams(const CameraParams& other);\n    const CameraParams& operator =(const CameraParams& other);\n    Mat K() const;\n\n    double focal; // Focal length\n    double aspect; // Aspect ratio\n    double ppx; // Principal point X\n    double ppy; // Principal point Y\n    Mat R; // Rotation\n    Mat t; // Translation\n};\n\n} // namespace detail\n} // namespace cv\n\n#endif // #ifndef __OPENCV_STITCHING_CAMERA_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/exposure_compensate.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n#define __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS ExposureCompensator\n{\npublic:\n    virtual ~ExposureCompensator() {}\n\n    enum { NO, GAIN, GAIN_BLOCKS };\n    static Ptr<ExposureCompensator> createDefault(int type);\n\n    void feed(const std::vector<Point> &corners, const std::vector<Mat> &images,\n              const std::vector<Mat> &masks);\n    virtual void feed(const std::vector<Point> &corners, const std::vector<Mat> &images,\n                      const std::vector<std::pair<Mat,uchar> > &masks) = 0;\n    virtual void apply(int index, Point corner, Mat &image, const Mat &mask) = 0;\n};\n\n\nclass CV_EXPORTS NoExposureCompensator : public ExposureCompensator\n{\npublic:\n    void feed(const std::vector<Point> &/*corners*/, const std::vector<Mat> &/*images*/,\n              const std::vector<std::pair<Mat,uchar> > &/*masks*/) {};\n    void apply(int /*index*/, Point /*corner*/, Mat &/*image*/, const Mat &/*mask*/) {};\n};\n\n\nclass CV_EXPORTS GainCompensator : public ExposureCompensator\n{\npublic:\n    void feed(const std::vector<Point> &corners, const std::vector<Mat> &images,\n              const std::vector<std::pair<Mat,uchar> > &masks);\n    void apply(int index, Point corner, Mat &image, const Mat &mask);\n    std::vector<double> gains() const;\n\nprivate:\n    Mat_<double> gains_;\n};\n\n\nclass CV_EXPORTS BlocksGainCompensator : public ExposureCompensator\n{\npublic:\n    BlocksGainCompensator(int bl_width = 32, int bl_height = 32)\n            : bl_width_(bl_width), bl_height_(bl_height) {}\n    void feed(const std::vector<Point> &corners, const std::vector<Mat> &images,\n              const std::vector<std::pair<Mat,uchar> > &masks);\n    void apply(int index, Point corner, Mat &image, const Mat &mask);\n\nprivate:\n    int bl_width_, bl_height_;\n    std::vector<Mat_<float> > gain_maps_;\n};\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/matchers.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_MATCHERS_HPP__\n#define __OPENCV_STITCHING_MATCHERS_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/gpumat.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n\n#include \"opencv2/opencv_modules.hpp\"\n\n#if defined(HAVE_OPENCV_NONFREE)\n    #include \"opencv2/nonfree/gpu.hpp\"\n#endif\n\nnamespace cv {\nnamespace detail {\n\nstruct CV_EXPORTS ImageFeatures\n{\n    int img_idx;\n    Size img_size;\n    std::vector<KeyPoint> keypoints;\n    Mat descriptors;\n};\n\n\nclass CV_EXPORTS FeaturesFinder\n{\npublic:\n    virtual ~FeaturesFinder() {}\n    void operator ()(const Mat &image, ImageFeatures &features);\n    void operator ()(const Mat &image, ImageFeatures &features, const std::vector<cv::Rect> &rois);\n    virtual void collectGarbage() {}\n\nprotected:\n    virtual void find(const Mat &image, ImageFeatures &features) = 0;\n};\n\n\nclass CV_EXPORTS SurfFeaturesFinder : public FeaturesFinder\n{\npublic:\n    SurfFeaturesFinder(double hess_thresh = 300., int num_octaves = 3, int num_layers = 4,\n                       int num_octaves_descr = /*4*/3, int num_layers_descr = /*2*/4);\n\nprivate:\n    void find(const Mat &image, ImageFeatures &features);\n\n    Ptr<FeatureDetector> detector_;\n    Ptr<DescriptorExtractor> extractor_;\n    Ptr<Feature2D> surf;\n};\n\nclass CV_EXPORTS OrbFeaturesFinder : public FeaturesFinder\n{\npublic:\n    OrbFeaturesFinder(Size _grid_size = Size(3,1), int nfeatures=1500, float scaleFactor=1.3f, int nlevels=5);\n\nprivate:\n    void find(const Mat &image, ImageFeatures &features);\n\n    Ptr<ORB> orb;\n    Size grid_size;\n};\n\n\n#if defined(HAVE_OPENCV_NONFREE)\nclass CV_EXPORTS SurfFeaturesFinderGpu : public FeaturesFinder\n{\npublic:\n    SurfFeaturesFinderGpu(double hess_thresh = 300., int num_octaves = 3, int num_layers = 4,\n                          int num_octaves_descr = 4, int num_layers_descr = 2);\n\n    void collectGarbage();\n\nprivate:\n    void find(const Mat &image, ImageFeatures &features);\n\n    gpu::GpuMat image_;\n    gpu::GpuMat gray_image_;\n    gpu::SURF_GPU surf_;\n    gpu::GpuMat keypoints_;\n    gpu::GpuMat descriptors_;\n    int num_octaves_, num_layers_;\n    int num_octaves_descr_, num_layers_descr_;\n};\n#endif\n\n\nstruct CV_EXPORTS MatchesInfo\n{\n    MatchesInfo();\n    MatchesInfo(const MatchesInfo &other);\n    const MatchesInfo& operator =(const MatchesInfo &other);\n\n    int src_img_idx, dst_img_idx;       // Images indices (optional)\n    std::vector<DMatch> matches;\n    std::vector<uchar> inliers_mask;    // Geometrically consistent matches mask\n    int num_inliers;                    // Number of geometrically consistent matches\n    Mat H;                              // Estimated homography\n    double confidence;                  // Confidence two images are from the same panorama\n};\n\n\nclass CV_EXPORTS FeaturesMatcher\n{\npublic:\n    virtual ~FeaturesMatcher() {}\n\n    void operator ()(const ImageFeatures &features1, const ImageFeatures &features2,\n                     MatchesInfo& matches_info) { match(features1, features2, matches_info); }\n\n    void operator ()(const std::vector<ImageFeatures> &features, std::vector<MatchesInfo> &pairwise_matches,\n                     const cv::Mat &mask = cv::Mat());\n\n    bool isThreadSafe() const { return is_thread_safe_; }\n\n    virtual void collectGarbage() {}\n\nprotected:\n    FeaturesMatcher(bool is_thread_safe = false) : is_thread_safe_(is_thread_safe) {}\n\n    virtual void match(const ImageFeatures &features1, const ImageFeatures &features2,\n                       MatchesInfo& matches_info) = 0;\n\n    bool is_thread_safe_;\n};\n\n\nclass CV_EXPORTS BestOf2NearestMatcher : public FeaturesMatcher\n{\npublic:\n    BestOf2NearestMatcher(bool try_use_gpu = false, float match_conf = 0.3f, int num_matches_thresh1 = 6,\n                          int num_matches_thresh2 = 6);\n\n    void collectGarbage();\n\nprotected:\n    void match(const ImageFeatures &features1, const ImageFeatures &features2, MatchesInfo &matches_info);\n\n    int num_matches_thresh1_;\n    int num_matches_thresh2_;\n    Ptr<FeaturesMatcher> impl_;\n};\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_MATCHERS_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/motion_estimators.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n#define __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"matchers.hpp\"\n#include \"util.hpp\"\n#include \"camera.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS Estimator\n{\npublic:\n    virtual ~Estimator() {}\n\n    void operator ()(const std::vector<ImageFeatures> &features, const std::vector<MatchesInfo> &pairwise_matches,\n                     std::vector<CameraParams> &cameras)\n        { estimate(features, pairwise_matches, cameras); }\n\nprotected:\n    virtual void estimate(const std::vector<ImageFeatures> &features, const std::vector<MatchesInfo> &pairwise_matches,\n                          std::vector<CameraParams> &cameras) = 0;\n};\n\n\nclass CV_EXPORTS HomographyBasedEstimator : public Estimator\n{\npublic:\n    HomographyBasedEstimator(bool is_focals_estimated = false)\n        : is_focals_estimated_(is_focals_estimated) {}\n\nprivate:\n    void estimate(const std::vector<ImageFeatures> &features, const std::vector<MatchesInfo> &pairwise_matches,\n                  std::vector<CameraParams> &cameras);\n\n    bool is_focals_estimated_;\n};\n\n\nclass CV_EXPORTS BundleAdjusterBase : public Estimator\n{\npublic:\n    const Mat refinementMask() const { return refinement_mask_.clone(); }\n    void setRefinementMask(const Mat &mask)\n    {\n        CV_Assert(mask.type() == CV_8U && mask.size() == Size(3, 3));\n        refinement_mask_ = mask.clone();\n    }\n\n    double confThresh() const { return conf_thresh_; }\n    void setConfThresh(double conf_thresh) { conf_thresh_ = conf_thresh; }\n\n    CvTermCriteria termCriteria() { return term_criteria_; }\n    void setTermCriteria(const CvTermCriteria& term_criteria) { term_criteria_ = term_criteria; }\n\nprotected:\n    BundleAdjusterBase(int num_params_per_cam, int num_errs_per_measurement)\n        : num_params_per_cam_(num_params_per_cam),\n          num_errs_per_measurement_(num_errs_per_measurement)\n    {\n        setRefinementMask(Mat::ones(3, 3, CV_8U));\n        setConfThresh(1.);\n        setTermCriteria(cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 1000, DBL_EPSILON));\n    }\n\n    // Runs bundle adjustment\n    virtual void estimate(const std::vector<ImageFeatures> &features,\n                          const std::vector<MatchesInfo> &pairwise_matches,\n                          std::vector<CameraParams> &cameras);\n\n    virtual void setUpInitialCameraParams(const std::vector<CameraParams> &cameras) = 0;\n    virtual void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const = 0;\n    virtual void calcError(Mat &err) = 0;\n    virtual void calcJacobian(Mat &jac) = 0;\n\n    // 3x3 8U mask, where 0 means don't refine respective parameter, != 0 means refine\n    Mat refinement_mask_;\n\n    int num_images_;\n    int total_num_matches_;\n\n    int num_params_per_cam_;\n    int num_errs_per_measurement_;\n\n    const ImageFeatures *features_;\n    const MatchesInfo *pairwise_matches_;\n\n    // Threshold to filter out poorly matched image pairs\n    double conf_thresh_;\n\n    //Levenberg–Marquardt algorithm termination criteria\n    CvTermCriteria term_criteria_;\n\n    // Camera parameters matrix (CV_64F)\n    Mat cam_params_;\n\n    // Connected images pairs\n    std::vector<std::pair<int,int> > edges_;\n};\n\n\n// Minimizes reprojection error.\n// It can estimate focal length, aspect ratio, principal point.\n// You can affect only on them via the refinement mask.\nclass CV_EXPORTS BundleAdjusterReproj : public BundleAdjusterBase\n{\npublic:\n    BundleAdjusterReproj() : BundleAdjusterBase(7, 2) {}\n\nprivate:\n    void setUpInitialCameraParams(const std::vector<CameraParams> &cameras);\n    void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const;\n    void calcError(Mat &err);\n    void calcJacobian(Mat &jac);\n\n    Mat err1_, err2_;\n};\n\n\n// Minimizes sun of ray-to-ray distances.\n// It can estimate focal length. It ignores the refinement mask for now.\nclass CV_EXPORTS BundleAdjusterRay : public BundleAdjusterBase\n{\npublic:\n    BundleAdjusterRay() : BundleAdjusterBase(4, 3) {}\n\nprivate:\n    void setUpInitialCameraParams(const std::vector<CameraParams> &cameras);\n    void obtainRefinedCameraParams(std::vector<CameraParams> &cameras) const;\n    void calcError(Mat &err);\n    void calcJacobian(Mat &jac);\n\n    Mat err1_, err2_;\n};\n\n\nenum WaveCorrectKind\n{\n    WAVE_CORRECT_HORIZ,\n    WAVE_CORRECT_VERT\n};\n\nvoid CV_EXPORTS waveCorrect(std::vector<Mat> &rmats, WaveCorrectKind kind);\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\n// Returns matches graph representation in DOT language\nstd::string CV_EXPORTS matchesGraphAsString(std::vector<std::string> &pathes, std::vector<MatchesInfo> &pairwise_matches,\n                                            float conf_threshold);\n\nstd::vector<int> CV_EXPORTS leaveBiggestComponent(std::vector<ImageFeatures> &features, std::vector<MatchesInfo> &pairwise_matches,\n                                                  float conf_threshold);\n\nvoid CV_EXPORTS findMaxSpanningTree(int num_images, const std::vector<MatchesInfo> &pairwise_matches,\n                                    Graph &span_tree, std::vector<int> &centers);\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_MOTION_ESTIMATORS_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/seam_finders.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n#define __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n\n#include <set>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/gpumat.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS SeamFinder\n{\npublic:\n    virtual ~SeamFinder() {}\n    virtual void find(const std::vector<Mat> &src, const std::vector<Point> &corners,\n                      std::vector<Mat> &masks) = 0;\n};\n\n\nclass CV_EXPORTS NoSeamFinder : public SeamFinder\n{\npublic:\n    void find(const std::vector<Mat>&, const std::vector<Point>&, std::vector<Mat>&) {}\n};\n\n\nclass CV_EXPORTS PairwiseSeamFinder : public SeamFinder\n{\npublic:\n    virtual void find(const std::vector<Mat> &src, const std::vector<Point> &corners,\n                      std::vector<Mat> &masks);\n\nprotected:\n    void run();\n    virtual void findInPair(size_t first, size_t second, Rect roi) = 0;\n\n    std::vector<Mat> images_;\n    std::vector<Size> sizes_;\n    std::vector<Point> corners_;\n    std::vector<Mat> masks_;\n};\n\n\nclass CV_EXPORTS VoronoiSeamFinder : public PairwiseSeamFinder\n{\npublic:\n    virtual void find(const std::vector<Size> &size, const std::vector<Point> &corners,\n                      std::vector<Mat> &masks);\nprivate:\n    void findInPair(size_t first, size_t second, Rect roi);\n};\n\n\nclass CV_EXPORTS DpSeamFinder : public SeamFinder\n{\npublic:\n    enum CostFunction { COLOR, COLOR_GRAD };\n\n    DpSeamFinder(CostFunction costFunc = COLOR);\n\n    CostFunction costFunction() const { return costFunc_; }\n    void setCostFunction(CostFunction val) { costFunc_ = val; }\n\n    virtual void find(const std::vector<Mat> &src, const std::vector<Point> &corners,\n                      std::vector<Mat> &masks);\n\nprivate:\n    enum ComponentState\n    {\n        FIRST = 1, SECOND = 2, INTERS = 4,\n        INTERS_FIRST = INTERS | FIRST,\n        INTERS_SECOND = INTERS | SECOND\n    };\n\n    class ImagePairLess\n    {\n    public:\n        ImagePairLess(const std::vector<Mat> &images, const std::vector<Point> &corners)\n            : src_(&images[0]), corners_(&corners[0]) {}\n\n        bool operator() (const std::pair<size_t, size_t> &l, const std::pair<size_t, size_t> &r) const\n        {\n            Point c1 = corners_[l.first] + Point(src_[l.first].cols / 2, src_[l.first].rows / 2);\n            Point c2 = corners_[l.second] + Point(src_[l.second].cols / 2, src_[l.second].rows / 2);\n            int d1 = (c1 - c2).dot(c1 - c2);\n\n            c1 = corners_[r.first] + Point(src_[r.first].cols / 2, src_[r.first].rows / 2);\n            c2 = corners_[r.second] + Point(src_[r.second].cols / 2, src_[r.second].rows / 2);\n            int d2 = (c1 - c2).dot(c1 - c2);\n\n            return d1 < d2;\n        }\n\n    private:\n        const Mat *src_;\n        const Point *corners_;\n    };\n\n    class ClosePoints\n    {\n    public:\n        ClosePoints(int minDist) : minDist_(minDist) {}\n\n        bool operator() (const Point &p1, const Point &p2) const\n        {\n            int dist2 = (p1.x-p2.x) * (p1.x-p2.x) + (p1.y-p2.y) * (p1.y-p2.y);\n            return dist2 < minDist_ * minDist_;\n        }\n\n    private:\n        int minDist_;\n    };\n\n    void process(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2, Mat &mask1, Mat &mask2);\n\n    void findComponents();\n\n    void findEdges();\n\n    void resolveConflicts(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2, Mat &mask1, Mat &mask2);\n\n    void computeGradients(const Mat &image1, const Mat &image2);\n\n    bool hasOnlyOneNeighbor(int comp);\n\n    bool closeToContour(int y, int x, const Mat_<uchar> &contourMask);\n\n    bool getSeamTips(int comp1, int comp2, Point &p1, Point &p2);\n\n    void computeCosts(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2,\n            int comp, Mat_<float> &costV, Mat_<float> &costH);\n\n    bool estimateSeam(\n            const Mat &image1, const Mat &image2, Point tl1, Point tl2, int comp,\n            Point p1, Point p2, std::vector<Point> &seam, bool &isHorizontal);\n\n    void updateLabelsUsingSeam(\n            int comp1, int comp2, const std::vector<Point> &seam, bool isHorizontalSeam);\n\n    CostFunction costFunc_;\n\n    // processing images pair data\n    Point unionTl_, unionBr_;\n    Size unionSize_;\n    Mat_<uchar> mask1_, mask2_;\n    Mat_<uchar> contour1mask_, contour2mask_;\n    Mat_<float> gradx1_, grady1_;\n    Mat_<float> gradx2_, grady2_;\n\n    // components data\n    int ncomps_;\n    Mat_<int> labels_;\n    std::vector<ComponentState> states_;\n    std::vector<Point> tls_, brs_;\n    std::vector<std::vector<Point> > contours_;\n    std::set<std::pair<int, int> > edges_;\n};\n\n\nclass CV_EXPORTS GraphCutSeamFinderBase\n{\npublic:\n    enum { COST_COLOR, COST_COLOR_GRAD };\n};\n\n\nclass CV_EXPORTS GraphCutSeamFinder : public GraphCutSeamFinderBase, public SeamFinder\n{\npublic:\n    GraphCutSeamFinder(int cost_type = COST_COLOR_GRAD, float terminal_cost = 10000.f,\n                       float bad_region_penalty = 1000.f);\n\n    ~GraphCutSeamFinder();\n\n    void find(const std::vector<Mat> &src, const std::vector<Point> &corners,\n              std::vector<Mat> &masks);\n\nprivate:\n    // To avoid GCGraph dependency\n    class Impl;\n    Ptr<PairwiseSeamFinder> impl_;\n};\n\n\nclass CV_EXPORTS GraphCutSeamFinderGpu : public GraphCutSeamFinderBase, public PairwiseSeamFinder\n{\npublic:\n    GraphCutSeamFinderGpu(int cost_type = COST_COLOR_GRAD, float terminal_cost = 10000.f,\n                          float bad_region_penalty = 1000.f)\n                          : cost_type_(cost_type), terminal_cost_(terminal_cost),\n                            bad_region_penalty_(bad_region_penalty) {}\n\n    void find(const std::vector<cv::Mat> &src, const std::vector<cv::Point> &corners,\n              std::vector<cv::Mat> &masks);\n    void findInPair(size_t first, size_t second, Rect roi);\n\nprivate:\n    void setGraphWeightsColor(const cv::Mat &img1, const cv::Mat &img2, const cv::Mat &mask1, const cv::Mat &mask2,\n                              cv::Mat &terminals, cv::Mat &leftT, cv::Mat &rightT, cv::Mat &top, cv::Mat &bottom);\n    void setGraphWeightsColorGrad(const cv::Mat &img1, const cv::Mat &img2, const cv::Mat &dx1, const cv::Mat &dx2,\n                                  const cv::Mat &dy1, const cv::Mat &dy2, const cv::Mat &mask1, const cv::Mat &mask2,\n                                  cv::Mat &terminals, cv::Mat &leftT, cv::Mat &rightT, cv::Mat &top, cv::Mat &bottom);\n    std::vector<Mat> dx_, dy_;\n    int cost_type_;\n    float terminal_cost_;\n    float bad_region_penalty_;\n};\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_SEAM_FINDERS_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/util.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_UTIL_HPP__\n#define __OPENCV_STITCHING_UTIL_HPP__\n\n#include <list>\n#include \"opencv2/core/core.hpp\"\n\n#define ENABLE_LOG 0\n\n// TODO remove LOG macros, add logging class\n#if ENABLE_LOG\n#ifdef ANDROID\n  #include <iostream>\n  #include <sstream>\n  #include <android/log.h>\n  #define LOG_STITCHING_MSG(msg) \\\n    do { \\\n        std::stringstream _os; \\\n        _os << msg; \\\n       __android_log_print(ANDROID_LOG_DEBUG, \"STITCHING\", \"%s\", _os.str().c_str()); \\\n    } while(0);\n#else\n  #include <iostream>\n  #define LOG_STITCHING_MSG(msg) for(;;) { std::cout << msg; std::cout.flush(); break; }\n#endif\n#else\n  #define LOG_STITCHING_MSG(msg)\n#endif\n\n#define LOG_(_level, _msg)                     \\\n    for(;;)                                    \\\n    {                                          \\\n        if ((_level) >= ::cv::detail::stitchingLogLevel()) \\\n        {                                      \\\n            LOG_STITCHING_MSG(_msg);           \\\n        }                                      \\\n    break;                                 \\\n    }\n\n\n#define LOG(msg) LOG_(1, msg)\n#define LOG_CHAT(msg) LOG_(0, msg)\n\n#define LOGLN(msg) LOG(msg << std::endl)\n#define LOGLN_CHAT(msg) LOG_CHAT(msg << std::endl)\n\n//#if DEBUG_LOG_CHAT\n//  #define LOG_CHAT(msg) LOG(msg)\n//  #define LOGLN_CHAT(msg) LOGLN(msg)\n//#else\n//  #define LOG_CHAT(msg) do{}while(0)\n//  #define LOGLN_CHAT(msg) do{}while(0)\n//#endif\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS DisjointSets\n{\npublic:\n    DisjointSets(int elem_count = 0) { createOneElemSets(elem_count); }\n\n    void createOneElemSets(int elem_count);\n    int findSetByElem(int elem);\n    int mergeSets(int set1, int set2);\n\n    std::vector<int> parent;\n    std::vector<int> size;\n\nprivate:\n    std::vector<int> rank_;\n};\n\n\nstruct CV_EXPORTS GraphEdge\n{\n    GraphEdge(int from, int to, float weight);\n    bool operator <(const GraphEdge& other) const { return weight < other.weight; }\n    bool operator >(const GraphEdge& other) const { return weight > other.weight; }\n\n    int from, to;\n    float weight;\n};\n\ninline GraphEdge::GraphEdge(int _from, int _to, float _weight) : from(_from), to(_to), weight(_weight) {}\n\n\nclass CV_EXPORTS Graph\n{\npublic:\n    Graph(int num_vertices = 0) { create(num_vertices); }\n    void create(int num_vertices) { edges_.assign(num_vertices, std::list<GraphEdge>()); }\n    int numVertices() const { return static_cast<int>(edges_.size()); }\n    void addEdge(int from, int to, float weight);\n    template <typename B> B forEach(B body) const;\n    template <typename B> B walkBreadthFirst(int from, B body) const;\n\nprivate:\n    std::vector< std::list<GraphEdge> > edges_;\n};\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Auxiliary functions\n\nCV_EXPORTS bool overlapRoi(Point tl1, Point tl2, Size sz1, Size sz2, Rect &roi);\nCV_EXPORTS Rect resultRoi(const std::vector<Point> &corners, const std::vector<Mat> &images);\nCV_EXPORTS Rect resultRoi(const std::vector<Point> &corners, const std::vector<Size> &sizes);\nCV_EXPORTS Point resultTl(const std::vector<Point> &corners);\n\n// Returns random 'count' element subset of the {0,1,...,size-1} set\nCV_EXPORTS void selectRandomSubset(int count, int size, std::vector<int> &subset);\n\nCV_EXPORTS int& stitchingLogLevel();\n\n} // namespace detail\n} // namespace cv\n\n#include \"util_inl.hpp\"\n\n#endif // __OPENCV_STITCHING_UTIL_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/util_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_UTIL_INL_HPP__\n#define __OPENCV_STITCHING_UTIL_INL_HPP__\n\n#include <queue>\n#include \"opencv2/core/core.hpp\"\n#include \"util.hpp\" // Make your IDE see declarations\n\nnamespace cv {\nnamespace detail {\n\ntemplate <typename B>\nB Graph::forEach(B body) const\n{\n    for (int i = 0; i < numVertices(); ++i)\n    {\n        std::list<GraphEdge>::const_iterator edge = edges_[i].begin();\n        for (; edge != edges_[i].end(); ++edge)\n            body(*edge);\n    }\n    return body;\n}\n\n\ntemplate <typename B>\nB Graph::walkBreadthFirst(int from, B body) const\n{\n    std::vector<bool> was(numVertices(), false);\n    std::queue<int> vertices;\n\n    was[from] = true;\n    vertices.push(from);\n\n    while (!vertices.empty())\n    {\n        int vertex = vertices.front();\n        vertices.pop();\n\n        std::list<GraphEdge>::const_iterator edge = edges_[vertex].begin();\n        for (; edge != edges_[vertex].end(); ++edge)\n        {\n            if (!was[edge->to])\n            {\n                body(*edge);\n                was[edge->to] = true;\n                vertices.push(edge->to);\n            }\n        }\n    }\n\n    return body;\n}\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Some auxiliary math functions\n\nstatic inline\nfloat normL2(const Point3f& a)\n{\n    return a.x * a.x + a.y * a.y + a.z * a.z;\n}\n\n\nstatic inline\nfloat normL2(const Point3f& a, const Point3f& b)\n{\n    return normL2(a - b);\n}\n\n\nstatic inline\ndouble normL2sq(const Mat &r)\n{\n    return r.dot(r);\n}\n\n\nstatic inline int sqr(int x) { return x * x; }\nstatic inline float sqr(float x) { return x * x; }\nstatic inline double sqr(double x) { return x * x; }\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_UTIL_INL_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/warpers.hpp",
    "content": " /*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPERS_HPP__\n#define __OPENCV_STITCHING_WARPERS_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/core/gpumat.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n\nnamespace cv {\nnamespace detail {\n\nclass CV_EXPORTS RotationWarper\n{\npublic:\n    virtual ~RotationWarper() {}\n\n    virtual Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R) = 0;\n\n    virtual Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap) = 0;\n\n    virtual Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                       Mat &dst) = 0;\n\n    virtual void warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                              Size dst_size, Mat &dst) = 0;\n\n    virtual Rect warpRoi(Size src_size, const Mat &K, const Mat &R) = 0;\n\n    float getScale() const { return 1.f; }\n    void setScale(float) {}\n};\n\n\nstruct CV_EXPORTS ProjectorBase\n{\n    void setCameraParams(const Mat &K = Mat::eye(3, 3, CV_32F),\n                         const Mat &R = Mat::eye(3, 3, CV_32F),\n                         const Mat &T = Mat::zeros(3, 1, CV_32F));\n\n    float scale;\n    float k[9];\n    float rinv[9];\n    float r_kinv[9];\n    float k_rinv[9];\n    float t[3];\n};\n\n\ntemplate <class P>\nclass CV_EXPORTS RotationWarperBase : public RotationWarper\n{\npublic:\n    Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R);\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap);\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               Mat &dst);\n\n    void warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                      Size dst_size, Mat &dst);\n\n    Rect warpRoi(Size src_size, const Mat &K, const Mat &R);\n\n    float getScale() const { return projector_.scale; }\n    void setScale(float val) { projector_.scale = val; }\n\nprotected:\n\n    // Detects ROI of the destination image. It's correct for any projection.\n    virtual void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n\n    // Detects ROI of the destination image by walking over image border.\n    // Correctness for any projection isn't guaranteed.\n    void detectResultRoiByBorder(Size src_size, Point &dst_tl, Point &dst_br);\n\n    P projector_;\n};\n\n\nstruct CV_EXPORTS PlaneProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PlaneWarper : public RotationWarperBase<PlaneProjector>\n{\npublic:\n    PlaneWarper(float scale = 1.f) { projector_.scale = scale; }\n\n    void setScale(float scale) { projector_.scale = scale; }\n\n    Point2f warpPoint(const Point2f &pt, const Mat &K, const Mat &R, const Mat &T);\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, const Mat &T, Mat &xmap, Mat &ymap);\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, const Mat &T, int interp_mode, int border_mode,\n               Mat &dst);\n\n    Rect warpRoi(Size src_size, const Mat &K, const Mat &R, const Mat &T);\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\n\nstruct CV_EXPORTS SphericalProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n// Projects image onto unit sphere with origin at (0, 0, 0).\n// Poles are located at (0, -1, 0) and (0, 1, 0) points.\nclass CV_EXPORTS SphericalWarper : public RotationWarperBase<SphericalProjector>\n{\npublic:\n    SphericalWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\n\nstruct CV_EXPORTS CylindricalProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n// Projects image onto x * x + z * z = 1 cylinder\nclass CV_EXPORTS CylindricalWarper : public RotationWarperBase<CylindricalProjector>\n{\npublic:\n    CylindricalWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<CylindricalProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\n\nstruct CV_EXPORTS FisheyeProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS FisheyeWarper : public RotationWarperBase<FisheyeProjector>\n{\npublic:\n    FisheyeWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS StereographicProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS StereographicWarper : public RotationWarperBase<StereographicProjector>\n{\npublic:\n    StereographicWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS CompressedRectilinearProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CompressedRectilinearWarper : public RotationWarperBase<CompressedRectilinearProjector>\n{\npublic:\n    CompressedRectilinearWarper(float scale, float A = 1, float B = 1)\n    {\n        projector_.a = A;\n        projector_.b = B;\n        projector_.scale = scale;\n    }\n};\n\n\nstruct CV_EXPORTS CompressedRectilinearPortraitProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CompressedRectilinearPortraitWarper : public RotationWarperBase<CompressedRectilinearPortraitProjector>\n{\npublic:\n   CompressedRectilinearPortraitWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n};\n\n\nstruct CV_EXPORTS PaniniProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PaniniWarper : public RotationWarperBase<PaniniProjector>\n{\npublic:\n   PaniniWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n};\n\n\nstruct CV_EXPORTS PaniniPortraitProjector : ProjectorBase\n{\n    float a, b;\n\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PaniniPortraitWarper : public RotationWarperBase<PaniniPortraitProjector>\n{\npublic:\n   PaniniPortraitWarper(float scale, float A = 1, float B = 1)\n   {\n       projector_.a = A;\n       projector_.b = B;\n       projector_.scale = scale;\n   }\n\n};\n\n\nstruct CV_EXPORTS MercatorProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS MercatorWarper : public RotationWarperBase<MercatorProjector>\n{\npublic:\n    MercatorWarper(float scale) { projector_.scale = scale; }\n};\n\n\nstruct CV_EXPORTS TransverseMercatorProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS TransverseMercatorWarper : public RotationWarperBase<TransverseMercatorProjector>\n{\npublic:\n    TransverseMercatorWarper(float scale) { projector_.scale = scale; }\n};\n\n\nclass CV_EXPORTS PlaneWarperGpu : public PlaneWarper\n{\npublic:\n    PlaneWarperGpu(float scale = 1.f) : PlaneWarper(scale) {}\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, const Mat &T, Mat &xmap, Mat &ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, T, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               Mat &dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, const Mat &T, int interp_mode, int border_mode,\n               Mat &dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, T, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, gpu::GpuMat &xmap, gpu::GpuMat &ymap);\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, const Mat &T, gpu::GpuMat &xmap, gpu::GpuMat &ymap);\n\n    Point warp(const gpu::GpuMat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               gpu::GpuMat &dst);\n\n    Point warp(const gpu::GpuMat &src, const Mat &K, const Mat &R, const Mat &T, int interp_mode, int border_mode,\n               gpu::GpuMat &dst);\n\nprivate:\n    gpu::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nclass CV_EXPORTS SphericalWarperGpu : public SphericalWarper\n{\npublic:\n    SphericalWarperGpu(float scale) : SphericalWarper(scale) {}\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               Mat &dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, gpu::GpuMat &xmap, gpu::GpuMat &ymap);\n\n    Point warp(const gpu::GpuMat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               gpu::GpuMat &dst);\n\nprivate:\n    gpu::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nclass CV_EXPORTS CylindricalWarperGpu : public CylindricalWarper\n{\npublic:\n    CylindricalWarperGpu(float scale) : CylindricalWarper(scale) {}\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)\n    {\n        Rect result = buildMaps(src_size, K, R, d_xmap_, d_ymap_);\n        d_xmap_.download(xmap);\n        d_ymap_.download(ymap);\n        return result;\n    }\n\n    Point warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               Mat &dst)\n    {\n        d_src_.upload(src);\n        Point result = warp(d_src_, K, R, interp_mode, border_mode, d_dst_);\n        d_dst_.download(dst);\n        return result;\n    }\n\n    Rect buildMaps(Size src_size, const Mat &K, const Mat &R, gpu::GpuMat &xmap, gpu::GpuMat &ymap);\n\n    Point warp(const gpu::GpuMat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n               gpu::GpuMat &dst);\n\nprivate:\n    gpu::GpuMat d_xmap_, d_ymap_, d_src_, d_dst_;\n};\n\n\nstruct SphericalPortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\n// Projects image onto unit sphere with origin at (0, 0, 0).\n// Poles are located NOT at (0, -1, 0) and (0, 1, 0) points, BUT at (1, 0, 0) and (-1, 0, 0) points.\nclass CV_EXPORTS SphericalPortraitWarper : public RotationWarperBase<SphericalPortraitProjector>\n{\npublic:\n    SphericalPortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br);\n};\n\nstruct CylindricalPortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS CylindricalPortraitWarper : public RotationWarperBase<CylindricalPortraitProjector>\n{\npublic:\n    CylindricalPortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<CylindricalPortraitProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\nstruct PlanePortraitProjector : ProjectorBase\n{\n    void mapForward(float x, float y, float &u, float &v);\n    void mapBackward(float u, float v, float &x, float &y);\n};\n\n\nclass CV_EXPORTS PlanePortraitWarper : public RotationWarperBase<PlanePortraitProjector>\n{\npublic:\n    PlanePortraitWarper(float scale) { projector_.scale = scale; }\n\nprotected:\n    void detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n    {\n        RotationWarperBase<PlanePortraitProjector>::detectResultRoiByBorder(src_size, dst_tl, dst_br);\n    }\n};\n\n} // namespace detail\n} // namespace cv\n\n#include \"warpers_inl.hpp\"\n\n#endif // __OPENCV_STITCHING_WARPERS_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/detail/warpers_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPERS_INL_HPP__\n#define __OPENCV_STITCHING_WARPERS_INL_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"warpers.hpp\" // Make your IDE see declarations\n\nnamespace cv {\nnamespace detail {\n\ntemplate <class P>\nPoint2f RotationWarperBase<P>::warpPoint(const Point2f &pt, const Mat &K, const Mat &R)\n{\n    projector_.setCameraParams(K, R);\n    Point2f uv;\n    projector_.mapForward(pt.x, pt.y, uv.x, uv.y);\n    return uv;\n}\n\n\ntemplate <class P>\nRect RotationWarperBase<P>::buildMaps(Size src_size, const Mat &K, const Mat &R, Mat &xmap, Mat &ymap)\n{\n    projector_.setCameraParams(K, R);\n\n    Point dst_tl, dst_br;\n    detectResultRoi(src_size, dst_tl, dst_br);\n\n    xmap.create(dst_br.y - dst_tl.y + 1, dst_br.x - dst_tl.x + 1, CV_32F);\n    ymap.create(dst_br.y - dst_tl.y + 1, dst_br.x - dst_tl.x + 1, CV_32F);\n\n    float x, y;\n    for (int v = dst_tl.y; v <= dst_br.y; ++v)\n    {\n        for (int u = dst_tl.x; u <= dst_br.x; ++u)\n        {\n            projector_.mapBackward(static_cast<float>(u), static_cast<float>(v), x, y);\n            xmap.at<float>(v - dst_tl.y, u - dst_tl.x) = x;\n            ymap.at<float>(v - dst_tl.y, u - dst_tl.x) = y;\n        }\n    }\n\n    return Rect(dst_tl, dst_br);\n}\n\n\ntemplate <class P>\nPoint RotationWarperBase<P>::warp(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                                  Mat &dst)\n{\n    Mat xmap, ymap;\n    Rect dst_roi = buildMaps(src.size(), K, R, xmap, ymap);\n\n    dst.create(dst_roi.height + 1, dst_roi.width + 1, src.type());\n    remap(src, dst, xmap, ymap, interp_mode, border_mode);\n\n    return dst_roi.tl();\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::warpBackward(const Mat &src, const Mat &K, const Mat &R, int interp_mode, int border_mode,\n                                         Size dst_size, Mat &dst)\n{\n    projector_.setCameraParams(K, R);\n\n    Point src_tl, src_br;\n    detectResultRoi(dst_size, src_tl, src_br);\n    CV_Assert(src_br.x - src_tl.x + 1 == src.cols && src_br.y - src_tl.y + 1 == src.rows);\n\n    Mat xmap(dst_size, CV_32F);\n    Mat ymap(dst_size, CV_32F);\n\n    float u, v;\n    for (int y = 0; y < dst_size.height; ++y)\n    {\n        for (int x = 0; x < dst_size.width; ++x)\n        {\n            projector_.mapForward(static_cast<float>(x), static_cast<float>(y), u, v);\n            xmap.at<float>(y, x) = u - src_tl.x;\n            ymap.at<float>(y, x) = v - src_tl.y;\n        }\n    }\n\n    dst.create(dst_size, src.type());\n    remap(src, dst, xmap, ymap, interp_mode, border_mode);\n}\n\n\ntemplate <class P>\nRect RotationWarperBase<P>::warpRoi(Size src_size, const Mat &K, const Mat &R)\n{\n    projector_.setCameraParams(K, R);\n\n    Point dst_tl, dst_br;\n    detectResultRoi(src_size, dst_tl, dst_br);\n\n    return Rect(dst_tl, Point(dst_br.x + 1, dst_br.y + 1));\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br)\n{\n    float tl_uf = std::numeric_limits<float>::max();\n    float tl_vf = std::numeric_limits<float>::max();\n    float br_uf = -std::numeric_limits<float>::max();\n    float br_vf = -std::numeric_limits<float>::max();\n\n    float u, v;\n    for (int y = 0; y < src_size.height; ++y)\n    {\n        for (int x = 0; x < src_size.width; ++x)\n        {\n            projector_.mapForward(static_cast<float>(x), static_cast<float>(y), u, v);\n            tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n            br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n        }\n    }\n\n    dst_tl.x = static_cast<int>(tl_uf);\n    dst_tl.y = static_cast<int>(tl_vf);\n    dst_br.x = static_cast<int>(br_uf);\n    dst_br.y = static_cast<int>(br_vf);\n}\n\n\ntemplate <class P>\nvoid RotationWarperBase<P>::detectResultRoiByBorder(Size src_size, Point &dst_tl, Point &dst_br)\n{\n    float tl_uf = std::numeric_limits<float>::max();\n    float tl_vf = std::numeric_limits<float>::max();\n    float br_uf = -std::numeric_limits<float>::max();\n    float br_vf = -std::numeric_limits<float>::max();\n\n    float u, v;\n    for (float x = 0; x < src_size.width; ++x)\n    {\n        projector_.mapForward(static_cast<float>(x), 0, u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n\n        projector_.mapForward(static_cast<float>(x), static_cast<float>(src_size.height - 1), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n    }\n    for (int y = 0; y < src_size.height; ++y)\n    {\n        projector_.mapForward(0, static_cast<float>(y), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n\n        projector_.mapForward(static_cast<float>(src_size.width - 1), static_cast<float>(y), u, v);\n        tl_uf = std::min(tl_uf, u); tl_vf = std::min(tl_vf, v);\n        br_uf = std::max(br_uf, u); br_vf = std::max(br_vf, v);\n    }\n\n    dst_tl.x = static_cast<int>(tl_uf);\n    dst_tl.y = static_cast<int>(tl_vf);\n    dst_br.x = static_cast<int>(br_uf);\n    dst_br.y = static_cast<int>(br_vf);\n}\n\n\ninline\nvoid PlaneProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    x_ = t[0] + x_ / z_ * (1 - t[2]);\n    y_ = t[1] + y_ / z_ * (1 - t[2]);\n\n    u = scale * x_;\n    v = scale * y_;\n}\n\n\ninline\nvoid PlaneProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u = u / scale - t[0];\n    v = v / scale - t[1];\n\n    float z;\n    x = k_rinv[0] * u + k_rinv[1] * v + k_rinv[2] * (1 - t[2]);\n    y = k_rinv[3] * u + k_rinv[4] * v + k_rinv[5] * (1 - t[2]);\n    z = k_rinv[6] * u + k_rinv[7] * v + k_rinv[8] * (1 - t[2]);\n\n    x /= z;\n    y /= z;\n}\n\n\ninline\nvoid SphericalProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    u = scale * atan2f(x_, z_);\n    float w = y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_);\n    v = scale * (static_cast<float>(CV_PI) - acosf(w == w ? w : 0));\n}\n\n\ninline\nvoid SphericalProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float sinv = sinf(static_cast<float>(CV_PI) - v);\n    float x_ = sinv * sinf(u);\n    float y_ = cosf(static_cast<float>(CV_PI) - v);\n    float z_ = sinv * cosf(u);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\n\ninline\nvoid CylindricalProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    u = scale * atan2f(x_, z_);\n    v = scale * y_ / sqrtf(x_ * x_ + z_ * z_);\n}\n\n\ninline\nvoid CylindricalProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float x_ = sinf(u);\n    float y_ = v;\n    float z_ = cosf(u);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid FisheyeProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = (float)CV_PI - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * v_ * cosf(u_);\n    v = scale * v_ * sinf(u_);\n}\n\ninline\nvoid FisheyeProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float u_ = atan2f(v, u);\n    float v_ = sqrtf(u*u + v*v);\n\n    float sinv = sinf((float)CV_PI - v_);\n    float x_ = sinv * sinf(u_);\n    float y_ = cosf((float)CV_PI - v_);\n    float z_ = sinv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid StereographicProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = (float)CV_PI - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float r = sinf(v_) / (1 - cosf(v_));\n\n    u = scale * r * cos(u_);\n    v = scale * r * sin(u_);\n}\n\ninline\nvoid StereographicProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float u_ = atan2f(v, u);\n    float r = sqrtf(u*u + v*v);\n    float v_ = 2 * atanf(1.f / r);\n\n    float sinv = sinf((float)CV_PI - v_);\n    float x_ = sinv * sinf(u_);\n    float y_ = cosf((float)CV_PI - v_);\n    float z_ = sinv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CompressedRectilinearProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * a * tanf(u_ / a);\n    v = scale * b * tanf(v_) / cosf(u_);\n}\n\ninline\nvoid CompressedRectilinearProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float aatg = a * atanf(u / a);\n    float u_ = aatg;\n    float v_ = atanf(v * cosf(aatg) / b);\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CompressedRectilinearPortraitProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float y_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float x_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = - scale * a * tanf(u_ / a);\n    v = scale * b * tanf(v_) / cosf(u_);\n}\n\ninline\nvoid CompressedRectilinearPortraitProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= - scale;\n    v /= scale;\n\n    float aatg = a * atanf(u / a);\n    float u_ = aatg;\n    float v_ = atanf(v * cosf( aatg ) / b);\n\n    float cosv = cosf(v_);\n    float y_ = cosv * sinf(u_);\n    float x_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PaniniProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float tg = a * tanf(u_ / a);\n    u = scale * tg;\n\n    float sinu = sinf(u_);\n    if ( fabs(sinu) < 1E-7 )\n        v = scale * b * tanf(v_);\n    else\n        v = scale * b * tg * tanf(v_) / sinu;\n}\n\ninline\nvoid PaniniProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float lamda = a * atanf(u / a);\n    float u_ = lamda;\n\n    float v_;\n    if ( fabs(lamda) > 1E-7)\n        v_ = atanf(v * sinf(lamda) / (b * a * tanf(lamda / a)));\n    else\n        v_ = atanf(v / b);\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PaniniPortraitProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float y_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float x_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float tg = a * tanf(u_ / a);\n    u = - scale * tg;\n\n    float sinu = sinf( u_ );\n    if ( fabs(sinu) < 1E-7 )\n        v = scale * b * tanf(v_);\n    else\n        v = scale * b * tg * tanf(v_) / sinu;\n}\n\ninline\nvoid PaniniPortraitProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= - scale;\n    v /= scale;\n\n    float lamda = a * atanf(u / a);\n    float u_ = lamda;\n\n    float v_;\n    if ( fabs(lamda) > 1E-7)\n        v_ = atanf(v * sinf(lamda) / (b * a * tanf(lamda/a)));\n    else\n        v_ = atanf(v / b);\n\n    float cosv = cosf(v_);\n    float y_ = cosv * sinf(u_);\n    float x_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid MercatorProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    u = scale * u_;\n    v = scale * logf( tanf( (float)(CV_PI/4) + v_/2 ) );\n}\n\ninline\nvoid MercatorProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float v_ = atanf( sinhf(v) );\n    float u_ = u;\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid TransverseMercatorProjector::mapForward(float x, float y, float &u, float &v)\n{\n    float x_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float u_ = atan2f(x_, z_);\n    float v_ = asinf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_));\n\n    float B = cosf(v_) * sinf(u_);\n\n    u = scale / 2 * logf( (1+B) / (1-B) );\n    v = scale * atan2f(tanf(v_), cosf(u_));\n}\n\ninline\nvoid TransverseMercatorProjector::mapBackward(float u, float v, float &x, float &y)\n{\n    u /= scale;\n    v /= scale;\n\n    float v_ = asinf( sinf(v) / coshf(u) );\n    float u_ = atan2f( sinhf(u), cos(v) );\n\n    float cosv = cosf(v_);\n    float x_ = cosv * sinf(u_);\n    float y_ = sinf(v_);\n    float z_ = cosv * cosf(u_);\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid SphericalPortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_ = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n    float u, v;\n\n    u = scale * atan2f(x_, z_);\n    v = scale * (static_cast<float>(CV_PI) - acosf(y_ / sqrtf(x_ * x_ + y_ * y_ + z_ * z_)));\n\n    u0 = -u;//v;\n    v0 = v;//u;\n}\n\n\ninline\nvoid SphericalPortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;//v0;\n    v = v0;//u0;\n\n    u /= scale;\n    v /= scale;\n\n    float sinv = sinf(static_cast<float>(CV_PI) - v);\n    float x0_ = sinv * sinf(u);\n    float y0_ = cosf(static_cast<float>(CV_PI) - v);\n    float z_ = sinv * cosf(u);\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid CylindricalPortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_  = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n    float u, v;\n\n    u = scale * atan2f(x_, z_);\n    v = scale * y_ / sqrtf(x_ * x_ + z_ * z_);\n\n    u0 = -u;//v;\n    v0 = v;//u;\n}\n\n\ninline\nvoid CylindricalPortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;//v0;\n    v = v0;//u0;\n\n    u /= scale;\n    v /= scale;\n\n    float x0_ = sinf(u);\n    float y0_ = v;\n    float z_  = cosf(u);\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    float z;\n    x = k_rinv[0] * x_ + k_rinv[1] * y_ + k_rinv[2] * z_;\n    y = k_rinv[3] * x_ + k_rinv[4] * y_ + k_rinv[5] * z_;\n    z = k_rinv[6] * x_ + k_rinv[7] * y_ + k_rinv[8] * z_;\n\n    if (z > 0) { x /= z; y /= z; }\n    else x = y = -1;\n}\n\ninline\nvoid PlanePortraitProjector::mapForward(float x, float y, float &u0, float &v0)\n{\n    float x0_ = r_kinv[0] * x + r_kinv[1] * y + r_kinv[2];\n    float y0_ = r_kinv[3] * x + r_kinv[4] * y + r_kinv[5];\n    float z_  = r_kinv[6] * x + r_kinv[7] * y + r_kinv[8];\n\n    float x_ = y0_;\n    float y_ = x0_;\n\n    x_ = t[0] + x_ / z_ * (1 - t[2]);\n    y_ = t[1] + y_ / z_ * (1 - t[2]);\n\n    float u,v;\n    u = scale * x_;\n    v = scale * y_;\n\n    u0 = -u;\n    v0 = v;\n}\n\n\ninline\nvoid PlanePortraitProjector::mapBackward(float u0, float v0, float &x, float &y)\n{\n    float u, v;\n    u = -u0;\n    v = v0;\n\n    u = u / scale - t[0];\n    v = v / scale - t[1];\n\n    float z;\n    x = k_rinv[0] * v + k_rinv[1] * u + k_rinv[2] * (1 - t[2]);\n    y = k_rinv[3] * v + k_rinv[4] * u + k_rinv[5] * (1 - t[2]);\n    z = k_rinv[6] * v + k_rinv[7] * u + k_rinv[8] * (1 - t[2]);\n\n    x /= z;\n    y /= z;\n}\n\n\n} // namespace detail\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_WARPERS_INL_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/stitcher.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_STITCHER_HPP__\n#define __OPENCV_STITCHING_STITCHER_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/stitching/warpers.hpp\"\n#include \"opencv2/stitching/detail/matchers.hpp\"\n#include \"opencv2/stitching/detail/motion_estimators.hpp\"\n#include \"opencv2/stitching/detail/exposure_compensate.hpp\"\n#include \"opencv2/stitching/detail/seam_finders.hpp\"\n#include \"opencv2/stitching/detail/blenders.hpp\"\n#include \"opencv2/stitching/detail/camera.hpp\"\n\nnamespace cv {\n\nclass CV_EXPORTS Stitcher\n{\npublic:\n    enum { ORIG_RESOL = -1 };\n    enum Status { OK, ERR_NEED_MORE_IMGS };\n\n    // Creates stitcher with default parameters\n    static Stitcher createDefault(bool try_use_gpu = false);\n\n    double registrationResol() const { return registr_resol_; }\n    void setRegistrationResol(double resol_mpx) { registr_resol_ = resol_mpx; }\n\n    double seamEstimationResol() const { return seam_est_resol_; }\n    void setSeamEstimationResol(double resol_mpx) { seam_est_resol_ = resol_mpx; }\n\n    double compositingResol() const { return compose_resol_; }\n    void setCompositingResol(double resol_mpx) { compose_resol_ = resol_mpx; }\n\n    double panoConfidenceThresh() const { return conf_thresh_; }\n    void setPanoConfidenceThresh(double conf_thresh) { conf_thresh_ = conf_thresh; }\n\n    bool waveCorrection() const { return do_wave_correct_; }\n    void setWaveCorrection(bool flag) { do_wave_correct_ = flag; }\n\n    detail::WaveCorrectKind waveCorrectKind() const { return wave_correct_kind_; }\n    void setWaveCorrectKind(detail::WaveCorrectKind kind) { wave_correct_kind_ = kind; }\n\n    Ptr<detail::FeaturesFinder> featuresFinder() { return features_finder_; }\n    const Ptr<detail::FeaturesFinder> featuresFinder() const { return features_finder_; }\n    void setFeaturesFinder(Ptr<detail::FeaturesFinder> features_finder)\n        { features_finder_ = features_finder; }\n\n    Ptr<detail::FeaturesMatcher> featuresMatcher() { return features_matcher_; }\n    const Ptr<detail::FeaturesMatcher> featuresMatcher() const { return features_matcher_; }\n    void setFeaturesMatcher(Ptr<detail::FeaturesMatcher> features_matcher)\n        { features_matcher_ = features_matcher; }\n\n    const cv::Mat& matchingMask() const { return matching_mask_; }\n    void setMatchingMask(const cv::Mat &mask)\n    {\n        CV_Assert(mask.type() == CV_8U && mask.cols == mask.rows);\n        matching_mask_ = mask.clone();\n    }\n\n    Ptr<detail::BundleAdjusterBase> bundleAdjuster() { return bundle_adjuster_; }\n    const Ptr<detail::BundleAdjusterBase> bundleAdjuster() const { return bundle_adjuster_; }\n    void setBundleAdjuster(Ptr<detail::BundleAdjusterBase> bundle_adjuster)\n        { bundle_adjuster_ = bundle_adjuster; }\n\n    Ptr<WarperCreator> warper() { return warper_; }\n    const Ptr<WarperCreator> warper() const { return warper_; }\n    void setWarper(Ptr<WarperCreator> creator) { warper_ = creator; }\n\n    Ptr<detail::ExposureCompensator> exposureCompensator() { return exposure_comp_; }\n    const Ptr<detail::ExposureCompensator> exposureCompensator() const { return exposure_comp_; }\n    void setExposureCompensator(Ptr<detail::ExposureCompensator> exposure_comp)\n        { exposure_comp_ = exposure_comp; }\n\n    Ptr<detail::SeamFinder> seamFinder() { return seam_finder_; }\n    const Ptr<detail::SeamFinder> seamFinder() const { return seam_finder_; }\n    void setSeamFinder(Ptr<detail::SeamFinder> seam_finder) { seam_finder_ = seam_finder; }\n\n    Ptr<detail::Blender> blender() { return blender_; }\n    const Ptr<detail::Blender> blender() const { return blender_; }\n    void setBlender(Ptr<detail::Blender> b) { blender_ = b; }\n\n    Status estimateTransform(InputArray images);\n    Status estimateTransform(InputArray images, const std::vector<std::vector<Rect> > &rois);\n\n    Status composePanorama(OutputArray pano);\n    Status composePanorama(InputArray images, OutputArray pano);\n\n    Status stitch(InputArray images, OutputArray pano);\n    Status stitch(InputArray images, const std::vector<std::vector<Rect> > &rois, OutputArray pano);\n\n    std::vector<int> component() const { return indices_; }\n    std::vector<detail::CameraParams> cameras() const { return cameras_; }\n    double workScale() const { return work_scale_; }\n\nprivate:\n    Stitcher() {}\n\n    Status matchImages();\n    void estimateCameraParams();\n\n    double registr_resol_;\n    double seam_est_resol_;\n    double compose_resol_;\n    double conf_thresh_;\n    Ptr<detail::FeaturesFinder> features_finder_;\n    Ptr<detail::FeaturesMatcher> features_matcher_;\n    cv::Mat matching_mask_;\n    Ptr<detail::BundleAdjusterBase> bundle_adjuster_;\n    bool do_wave_correct_;\n    detail::WaveCorrectKind wave_correct_kind_;\n    Ptr<WarperCreator> warper_;\n    Ptr<detail::ExposureCompensator> exposure_comp_;\n    Ptr<detail::SeamFinder> seam_finder_;\n    Ptr<detail::Blender> blender_;\n\n    std::vector<cv::Mat> imgs_;\n    std::vector<std::vector<cv::Rect> > rois_;\n    std::vector<cv::Size> full_img_sizes_;\n    std::vector<detail::ImageFeatures> features_;\n    std::vector<detail::MatchesInfo> pairwise_matches_;\n    std::vector<cv::Mat> seam_est_imgs_;\n    std::vector<int> indices_;\n    std::vector<detail::CameraParams> cameras_;\n    double work_scale_;\n    double seam_scale_;\n    double seam_work_aspect_;\n    double warped_image_scale_;\n};\n\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_STITCHER_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/stitching/warpers.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                          License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n#define __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n\n#include \"opencv2/stitching/detail/warpers.hpp\"\n\nnamespace cv {\n\nclass WarperCreator\n{\npublic:\n    virtual ~WarperCreator() {}\n    virtual Ptr<detail::RotationWarper> create(float scale) const = 0;\n};\n\n\nclass PlaneWarper : public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::PlaneWarper(scale); }\n};\n\n\nclass CylindricalWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::CylindricalWarper(scale); }\n};\n\n\nclass SphericalWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::SphericalWarper(scale); }\n};\n\nclass FisheyeWarper : public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::FisheyeWarper(scale); }\n};\n\nclass StereographicWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::StereographicWarper(scale); }\n};\n\nclass CompressedRectilinearWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    CompressedRectilinearWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::CompressedRectilinearWarper(scale, a, b); }\n};\n\nclass CompressedRectilinearPortraitWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    CompressedRectilinearPortraitWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::CompressedRectilinearPortraitWarper(scale, a, b); }\n};\n\nclass PaniniWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    PaniniWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::PaniniWarper(scale, a, b); }\n};\n\nclass PaniniPortraitWarper: public WarperCreator\n{\n    float a, b;\npublic:\n    PaniniPortraitWarper(float A = 1, float B = 1)\n    {\n        a = A; b = B;\n    }\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::PaniniPortraitWarper(scale, a, b); }\n};\n\nclass MercatorWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::MercatorWarper(scale); }\n};\n\nclass TransverseMercatorWarper: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::TransverseMercatorWarper(scale); }\n};\n\n\n\nclass PlaneWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::PlaneWarperGpu(scale); }\n};\n\n\nclass CylindricalWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::CylindricalWarperGpu(scale); }\n};\n\n\nclass SphericalWarperGpu: public WarperCreator\n{\npublic:\n    Ptr<detail::RotationWarper> create(float scale) const { return new detail::SphericalWarperGpu(scale); }\n};\n\n} // namespace cv\n\n#endif // __OPENCV_STITCHING_WARPER_CREATORS_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/video/background_segm.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_BACKGROUND_SEGM_HPP__\n#define __OPENCV_BACKGROUND_SEGM_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include <list>\nnamespace cv\n{\n\n/*!\n The Base Class for Background/Foreground Segmentation\n\n The class is only used to define the common interface for\n the whole family of background/foreground segmentation algorithms.\n*/\nclass CV_EXPORTS_W BackgroundSubtractor : public Algorithm\n{\npublic:\n    //! the virtual destructor\n    virtual ~BackgroundSubtractor();\n    //! the update operator that takes the next video frame and returns the current foreground mask as 8-bit binary image.\n    CV_WRAP_AS(apply) virtual void operator()(InputArray image, OutputArray fgmask,\n                                              double learningRate=0);\n\n    //! computes a background image\n    virtual void getBackgroundImage(OutputArray backgroundImage) const;\n};\n\n\n/*!\n Gaussian Mixture-based Backbround/Foreground Segmentation Algorithm\n\n The class implements the following algorithm:\n \"An improved adaptive background mixture model for real-time tracking with shadow detection\"\n P. KadewTraKuPong and R. Bowden,\n Proc. 2nd European Workshp on Advanced Video-Based Surveillance Systems, 2001.\"\n http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf\n\n*/\nclass CV_EXPORTS_W BackgroundSubtractorMOG : public BackgroundSubtractor\n{\npublic:\n    //! the default constructor\n    CV_WRAP BackgroundSubtractorMOG();\n    //! the full constructor that takes the length of the history, the number of gaussian mixtures, the background ratio parameter and the noise strength\n    CV_WRAP BackgroundSubtractorMOG(int history, int nmixtures, double backgroundRatio, double noiseSigma=0);\n    //! the destructor\n    virtual ~BackgroundSubtractorMOG();\n    //! the update operator\n    virtual void operator()(InputArray image, OutputArray fgmask, double learningRate=0);\n\n    //! re-initiaization method\n    virtual void initialize(Size frameSize, int frameType);\n\n    virtual AlgorithmInfo* info() const;\n\nprotected:\n    Size frameSize;\n    int frameType;\n    Mat bgmodel;\n    int nframes;\n    int history;\n    int nmixtures;\n    double varThreshold;\n    double backgroundRatio;\n    double noiseSigma;\n};\n\n\n/*!\n The class implements the following algorithm:\n \"Improved adaptive Gausian mixture model for background subtraction\"\n Z.Zivkovic\n International Conference Pattern Recognition, UK, August, 2004.\n http://www.zoranz.net/Publications/zivkovic2004ICPR.pdf\n*/\nclass CV_EXPORTS_W BackgroundSubtractorMOG2 : public BackgroundSubtractor\n{\npublic:\n    //! the default constructor\n    CV_WRAP BackgroundSubtractorMOG2();\n    //! the full constructor that takes the length of the history, the number of gaussian mixtures, the background ratio parameter and the noise strength\n    CV_WRAP BackgroundSubtractorMOG2(int history,  float varThreshold, bool bShadowDetection=true);\n    //! the destructor\n    virtual ~BackgroundSubtractorMOG2();\n    //! the update operator\n    virtual void operator()(InputArray image, OutputArray fgmask, double learningRate=-1);\n\n    //! computes a background image which are the mean of all background gaussians\n    virtual void getBackgroundImage(OutputArray backgroundImage) const;\n\n    //! re-initiaization method\n    virtual void initialize(Size frameSize, int frameType);\n\n    virtual AlgorithmInfo* info() const;\n\nprotected:\n    Size frameSize;\n    int frameType;\n    Mat bgmodel;\n    Mat bgmodelUsedModes;//keep track of number of modes per pixel\n    int nframes;\n    int history;\n    int nmixtures;\n    //! here it is the maximum allowed number of mixture components.\n    //! Actual number is determined dynamically per pixel\n    double varThreshold;\n    // threshold on the squared Mahalanobis distance to decide if it is well described\n    // by the background model or not. Related to Cthr from the paper.\n    // This does not influence the update of the background. A typical value could be 4 sigma\n    // and that is varThreshold=4*4=16; Corresponds to Tb in the paper.\n\n    /////////////////////////\n    // less important parameters - things you might change but be carefull\n    ////////////////////////\n    float backgroundRatio;\n    // corresponds to fTB=1-cf from the paper\n    // TB - threshold when the component becomes significant enough to be included into\n    // the background model. It is the TB=1-cf from the paper. So I use cf=0.1 => TB=0.\n    // For alpha=0.001 it means that the mode should exist for approximately 105 frames before\n    // it is considered foreground\n    // float noiseSigma;\n    float varThresholdGen;\n    //correspondts to Tg - threshold on the squared Mahalan. dist. to decide\n    //when a sample is close to the existing components. If it is not close\n    //to any a new component will be generated. I use 3 sigma => Tg=3*3=9.\n    //Smaller Tg leads to more generated components and higher Tg might make\n    //lead to small number of components but they can grow too large\n    float fVarInit;\n    float fVarMin;\n    float fVarMax;\n    //initial variance  for the newly generated components.\n    //It will will influence the speed of adaptation. A good guess should be made.\n    //A simple way is to estimate the typical standard deviation from the images.\n    //I used here 10 as a reasonable value\n    // min and max can be used to further control the variance\n    float fCT;//CT - complexity reduction prior\n    //this is related to the number of samples needed to accept that a component\n    //actually exists. We use CT=0.05 of all the samples. By setting CT=0 you get\n    //the standard Stauffer&Grimson algorithm (maybe not exact but very similar)\n\n    //shadow detection parameters\n    bool bShadowDetection;//default 1 - do shadow detection\n    unsigned char nShadowDetection;//do shadow detection - insert this value as the detection result - 127 default value\n    float fTau;\n    // Tau - shadow threshold. The shadow is detected if the pixel is darker\n    //version of the background. Tau is a threshold on how much darker the shadow can be.\n    //Tau= 0.5 means that if pixel is more than 2 times darker then it is not shadow\n    //See: Prati,Mikic,Trivedi,Cucchiarra,\"Detecting Moving Shadows...\",IEEE PAMI,2003.\n};\n\n/**\n * Background Subtractor module. Takes a series of images and returns a sequence of mask (8UC1)\n * images of the same size, where 255 indicates Foreground and 0 represents Background.\n * This class implements an algorithm described in \"Visual Tracking of Human Visitors under\n * Variable-Lighting Conditions for a Responsive Audio Art Installation,\" A. Godbehere,\n * A. Matsukawa, K. Goldberg, American Control Conference, Montreal, June 2012.\n */\nclass CV_EXPORTS BackgroundSubtractorGMG: public cv::BackgroundSubtractor\n{\npublic:\n    BackgroundSubtractorGMG();\n    virtual ~BackgroundSubtractorGMG();\n    virtual AlgorithmInfo* info() const;\n\n    /**\n     * Validate parameters and set up data structures for appropriate image size.\n     * Must call before running on data.\n     * @param frameSize input frame size\n     * @param min       minimum value taken on by pixels in image sequence. Usually 0\n     * @param max       maximum value taken on by pixels in image sequence. e.g. 1.0 or 255\n     */\n    void initialize(cv::Size frameSize, double min, double max);\n\n    /**\n     * Performs single-frame background subtraction and builds up a statistical background image\n     * model.\n     * @param image Input image\n     * @param fgmask Output mask image representing foreground and background pixels\n     */\n    virtual void operator()(InputArray image, OutputArray fgmask, double learningRate=-1.0);\n\n    /**\n     * Releases all inner buffers.\n     */\n    void release();\n\n    //! Total number of distinct colors to maintain in histogram.\n    int     maxFeatures;\n    //! Set between 0.0 and 1.0, determines how quickly features are \"forgotten\" from histograms.\n    double  learningRate;\n    //! Number of frames of video to use to initialize histograms.\n    int     numInitializationFrames;\n    //! Number of discrete levels in each channel to be used in histograms.\n    int     quantizationLevels;\n    //! Prior probability that any given pixel is a background pixel. A sensitivity parameter.\n    double  backgroundPrior;\n    //! Value above which pixel is determined to be FG.\n    double  decisionThreshold;\n    //! Smoothing radius, in pixels, for cleaning up FG image.\n    int     smoothingRadius;\n    //! Perform background model update\n    bool updateBackgroundModel;\n\nprivate:\n    double maxVal_;\n    double minVal_;\n\n    cv::Size frameSize_;\n    int frameNum_;\n\n    cv::Mat_<int> nfeatures_;\n    cv::Mat_<unsigned int> colors_;\n    cv::Mat_<float> weights_;\n\n    cv::Mat buf_;\n};\n\n}\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/video/tracking.hpp",
    "content": "/*! \\file tracking.hpp\n \\brief The Object and Feature Tracking\n */\n\n/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_TRACKING_HPP__\n#define __OPENCV_TRACKING_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/****************************************************************************************\\\n*                                  Motion Analysis                                       *\n\\****************************************************************************************/\n\n/************************************ optical flow ***************************************/\n\n#define  CV_LKFLOW_PYR_A_READY       1\n#define  CV_LKFLOW_PYR_B_READY       2\n#define  CV_LKFLOW_INITIAL_GUESSES   4\n#define  CV_LKFLOW_GET_MIN_EIGENVALS 8\n\n/* It is Lucas & Kanade method, modified to use pyramids.\n   Also it does several iterations to get optical flow for\n   every point at every pyramid level.\n   Calculates optical flow between two images for certain set of points (i.e.\n   it is a \"sparse\" optical flow, which is opposite to the previous 3 methods) */\nCVAPI(void)  cvCalcOpticalFlowPyrLK( const CvArr*  prev, const CvArr*  curr,\n                                     CvArr*  prev_pyr, CvArr*  curr_pyr,\n                                     const CvPoint2D32f* prev_features,\n                                     CvPoint2D32f* curr_features,\n                                     int       count,\n                                     CvSize    win_size,\n                                     int       level,\n                                     char*     status,\n                                     float*    track_error,\n                                     CvTermCriteria criteria,\n                                     int       flags );\n\n\n/* Modification of a previous sparse optical flow algorithm to calculate\n   affine flow */\nCVAPI(void)  cvCalcAffineFlowPyrLK( const CvArr*  prev, const CvArr*  curr,\n                                    CvArr*  prev_pyr, CvArr*  curr_pyr,\n                                    const CvPoint2D32f* prev_features,\n                                    CvPoint2D32f* curr_features,\n                                    float* matrices, int  count,\n                                    CvSize win_size, int  level,\n                                    char* status, float* track_error,\n                                    CvTermCriteria criteria, int flags );\n\n/* Estimate rigid transformation between 2 images or 2 point sets */\nCVAPI(int)  cvEstimateRigidTransform( const CvArr* A, const CvArr* B,\n                                      CvMat* M, int full_affine );\n\n/* Estimate optical flow for each pixel using the two-frame G. Farneback algorithm */\nCVAPI(void) cvCalcOpticalFlowFarneback( const CvArr* prev, const CvArr* next,\n                                        CvArr* flow, double pyr_scale, int levels,\n                                        int winsize, int iterations, int poly_n,\n                                        double poly_sigma, int flags );\n\n/********************************* motion templates *************************************/\n\n/****************************************************************************************\\\n*        All the motion template functions work only with single channel images.         *\n*        Silhouette image must have depth IPL_DEPTH_8U or IPL_DEPTH_8S                   *\n*        Motion history image must have depth IPL_DEPTH_32F,                             *\n*        Gradient mask - IPL_DEPTH_8U or IPL_DEPTH_8S,                                   *\n*        Motion orientation image - IPL_DEPTH_32F                                        *\n*        Segmentation mask - IPL_DEPTH_32F                                               *\n*        All the angles are in degrees, all the times are in milliseconds                *\n\\****************************************************************************************/\n\n/* Updates motion history image given motion silhouette */\nCVAPI(void)    cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi,\n                                      double timestamp, double duration );\n\n/* Calculates gradient of the motion history image and fills\n   a mask indicating where the gradient is valid */\nCVAPI(void)    cvCalcMotionGradient( const CvArr* mhi, CvArr* mask, CvArr* orientation,\n                                     double delta1, double delta2,\n                                     int aperture_size CV_DEFAULT(3));\n\n/* Calculates average motion direction within a selected motion region\n   (region can be selected by setting ROIs and/or by composing a valid gradient mask\n   with the region mask) */\nCVAPI(double)  cvCalcGlobalOrientation( const CvArr* orientation, const CvArr* mask,\n                                        const CvArr* mhi, double timestamp,\n                                        double duration );\n\n/* Splits a motion history image into a few parts corresponding to separate independent motions\n   (e.g. left hand, right hand) */\nCVAPI(CvSeq*)  cvSegmentMotion( const CvArr* mhi, CvArr* seg_mask,\n                                CvMemStorage* storage,\n                                double timestamp, double seg_thresh );\n\n/****************************************************************************************\\\n*                                       Tracking                                         *\n\\****************************************************************************************/\n\n/* Implements CAMSHIFT algorithm - determines object position, size and orientation\n   from the object histogram back project (extension of meanshift) */\nCVAPI(int)  cvCamShift( const CvArr* prob_image, CvRect  window,\n                        CvTermCriteria criteria, CvConnectedComp* comp,\n                        CvBox2D* box CV_DEFAULT(NULL) );\n\n/* Implements MeanShift algorithm - determines object position\n   from the object histogram back project */\nCVAPI(int)  cvMeanShift( const CvArr* prob_image, CvRect  window,\n                         CvTermCriteria criteria, CvConnectedComp* comp );\n\n/*\nstandard Kalman filter (in G. Welch' and G. Bishop's notation):\n\n  x(k)=A*x(k-1)+B*u(k)+w(k)  p(w)~N(0,Q)\n  z(k)=H*x(k)+v(k),   p(v)~N(0,R)\n*/\ntypedef struct CvKalman\n{\n    int MP;                     /* number of measurement vector dimensions */\n    int DP;                     /* number of state vector dimensions */\n    int CP;                     /* number of control vector dimensions */\n\n    /* backward compatibility fields */\n#if 1\n    float* PosterState;         /* =state_pre->data.fl */\n    float* PriorState;          /* =state_post->data.fl */\n    float* DynamMatr;           /* =transition_matrix->data.fl */\n    float* MeasurementMatr;     /* =measurement_matrix->data.fl */\n    float* MNCovariance;        /* =measurement_noise_cov->data.fl */\n    float* PNCovariance;        /* =process_noise_cov->data.fl */\n    float* KalmGainMatr;        /* =gain->data.fl */\n    float* PriorErrorCovariance;/* =error_cov_pre->data.fl */\n    float* PosterErrorCovariance;/* =error_cov_post->data.fl */\n    float* Temp1;               /* temp1->data.fl */\n    float* Temp2;               /* temp2->data.fl */\n#endif\n\n    CvMat* state_pre;           /* predicted state (x'(k)):\n                                    x(k)=A*x(k-1)+B*u(k) */\n    CvMat* state_post;          /* corrected state (x(k)):\n                                    x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) */\n    CvMat* transition_matrix;   /* state transition matrix (A) */\n    CvMat* control_matrix;      /* control matrix (B)\n                                   (it is not used if there is no control)*/\n    CvMat* measurement_matrix;  /* measurement matrix (H) */\n    CvMat* process_noise_cov;   /* process noise covariance matrix (Q) */\n    CvMat* measurement_noise_cov; /* measurement noise covariance matrix (R) */\n    CvMat* error_cov_pre;       /* priori error estimate covariance matrix (P'(k)):\n                                    P'(k)=A*P(k-1)*At + Q)*/\n    CvMat* gain;                /* Kalman gain matrix (K(k)):\n                                    K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)*/\n    CvMat* error_cov_post;      /* posteriori error estimate covariance matrix (P(k)):\n                                    P(k)=(I-K(k)*H)*P'(k) */\n    CvMat* temp1;               /* temporary matrices */\n    CvMat* temp2;\n    CvMat* temp3;\n    CvMat* temp4;\n    CvMat* temp5;\n} CvKalman;\n\n/* Creates Kalman filter and sets A, B, Q, R and state to some initial values */\nCVAPI(CvKalman*) cvCreateKalman( int dynam_params, int measure_params,\n                                 int control_params CV_DEFAULT(0));\n\n/* Releases Kalman filter state */\nCVAPI(void)  cvReleaseKalman( CvKalman** kalman);\n\n/* Updates Kalman filter by time (predicts future state of the system) */\nCVAPI(const CvMat*)  cvKalmanPredict( CvKalman* kalman,\n                                      const CvMat* control CV_DEFAULT(NULL));\n\n/* Updates Kalman filter by measurement\n   (corrects state of the system and internal matrices) */\nCVAPI(const CvMat*)  cvKalmanCorrect( CvKalman* kalman, const CvMat* measurement );\n\n#define cvKalmanUpdateByTime  cvKalmanPredict\n#define cvKalmanUpdateByMeasurement cvKalmanCorrect\n\n#ifdef __cplusplus\n}\n\nnamespace cv\n{\n\n//! updates motion history image using the current silhouette\nCV_EXPORTS_W void updateMotionHistory( InputArray silhouette, InputOutputArray mhi,\n                                       double timestamp, double duration );\n\n//! computes the motion gradient orientation image from the motion history image\nCV_EXPORTS_W void calcMotionGradient( InputArray mhi, OutputArray mask,\n                                      OutputArray orientation,\n                                      double delta1, double delta2,\n                                      int apertureSize=3 );\n\n//! computes the global orientation of the selected motion history image part\nCV_EXPORTS_W double calcGlobalOrientation( InputArray orientation, InputArray mask,\n                                           InputArray mhi, double timestamp,\n                                           double duration );\n\nCV_EXPORTS_W void segmentMotion(InputArray mhi, OutputArray segmask,\n                                CV_OUT vector<Rect>& boundingRects,\n                                double timestamp, double segThresh);\n\n//! updates the object tracking window using CAMSHIFT algorithm\nCV_EXPORTS_W RotatedRect CamShift( InputArray probImage, CV_OUT CV_IN_OUT Rect& window,\n                                   TermCriteria criteria );\n\n//! updates the object tracking window using meanshift algorithm\nCV_EXPORTS_W int meanShift( InputArray probImage, CV_OUT CV_IN_OUT Rect& window,\n                            TermCriteria criteria );\n\n/*!\n Kalman filter.\n\n The class implements standard Kalman filter \\url{http://en.wikipedia.org/wiki/Kalman_filter}.\n However, you can modify KalmanFilter::transitionMatrix, KalmanFilter::controlMatrix and\n KalmanFilter::measurementMatrix to get the extended Kalman filter functionality.\n*/\nclass CV_EXPORTS_W KalmanFilter\n{\npublic:\n    //! the default constructor\n    CV_WRAP KalmanFilter();\n    //! the full constructor taking the dimensionality of the state, of the measurement and of the control vector\n    CV_WRAP KalmanFilter(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);\n    //! re-initializes Kalman filter. The previous content is destroyed.\n    void init(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);\n\n    //! computes predicted state\n    CV_WRAP const Mat& predict(const Mat& control=Mat());\n    //! updates the predicted state from the measurement\n    CV_WRAP const Mat& correct(const Mat& measurement);\n\n    Mat statePre;           //!< predicted state (x'(k)): x(k)=A*x(k-1)+B*u(k)\n    Mat statePost;          //!< corrected state (x(k)): x(k)=x'(k)+K(k)*(z(k)-H*x'(k))\n    Mat transitionMatrix;   //!< state transition matrix (A)\n    Mat controlMatrix;      //!< control matrix (B) (not used if there is no control)\n    Mat measurementMatrix;  //!< measurement matrix (H)\n    Mat processNoiseCov;    //!< process noise covariance matrix (Q)\n    Mat measurementNoiseCov;//!< measurement noise covariance matrix (R)\n    Mat errorCovPre;        //!< priori error estimate covariance matrix (P'(k)): P'(k)=A*P(k-1)*At + Q)*/\n    Mat gain;               //!< Kalman gain matrix (K(k)): K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)\n    Mat errorCovPost;       //!< posteriori error estimate covariance matrix (P(k)): P(k)=(I-K(k)*H)*P'(k)\n\n    // temporary matrices\n    Mat temp1;\n    Mat temp2;\n    Mat temp3;\n    Mat temp4;\n    Mat temp5;\n};\n\nenum\n{\n    OPTFLOW_USE_INITIAL_FLOW = CV_LKFLOW_INITIAL_GUESSES,\n    OPTFLOW_LK_GET_MIN_EIGENVALS = CV_LKFLOW_GET_MIN_EIGENVALS,\n    OPTFLOW_FARNEBACK_GAUSSIAN = 256\n};\n\n//! constructs a pyramid which can be used as input for calcOpticalFlowPyrLK\nCV_EXPORTS_W int buildOpticalFlowPyramid(InputArray img, OutputArrayOfArrays pyramid,\n                                         Size winSize, int maxLevel, bool withDerivatives = true,\n                                         int pyrBorder = BORDER_REFLECT_101, int derivBorder = BORDER_CONSTANT,\n                                         bool tryReuseInputImage = true);\n\n//! computes sparse optical flow using multi-scale Lucas-Kanade algorithm\nCV_EXPORTS_W void calcOpticalFlowPyrLK( InputArray prevImg, InputArray nextImg,\n                           InputArray prevPts, CV_OUT InputOutputArray nextPts,\n                           OutputArray status, OutputArray err,\n                           Size winSize=Size(21,21), int maxLevel=3,\n                           TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01),\n                           int flags=0, double minEigThreshold=1e-4);\n\n//! computes dense optical flow using Farneback algorithm\nCV_EXPORTS_W void calcOpticalFlowFarneback( InputArray prev, InputArray next,\n                           CV_OUT InputOutputArray flow, double pyr_scale, int levels, int winsize,\n                           int iterations, int poly_n, double poly_sigma, int flags );\n\n//! estimates the best-fit Euqcidean, similarity, affine or perspective transformation\n// that maps one 2D point set to another or one image to another.\nCV_EXPORTS_W Mat estimateRigidTransform( InputArray src, InputArray dst,\n                                         bool fullAffine);\n\n//! computes dense optical flow using Simple Flow algorithm\nCV_EXPORTS_W void calcOpticalFlowSF(Mat& from,\n                                    Mat& to,\n                                    Mat& flow,\n                                    int layers,\n                                    int averaging_block_size,\n                                    int max_flow);\n\nCV_EXPORTS_W void calcOpticalFlowSF(Mat& from,\n                                    Mat& to,\n                                    Mat& flow,\n                                    int layers,\n                                    int averaging_block_size,\n                                    int max_flow,\n                                    double sigma_dist,\n                                    double sigma_color,\n                                    int postprocess_window,\n                                    double sigma_dist_fix,\n                                    double sigma_color_fix,\n                                    double occ_thr,\n                                    int upscale_averaging_radius,\n                                    double upscale_sigma_dist,\n                                    double upscale_sigma_color,\n                                    double speed_up_thr);\n\nclass CV_EXPORTS DenseOpticalFlow : public Algorithm\n{\npublic:\n    virtual void calc(InputArray I0, InputArray I1, InputOutputArray flow) = 0;\n    virtual void collectGarbage() = 0;\n};\n\n// Implementation of the Zach, Pock and Bischof Dual TV-L1 Optical Flow method\n//\n// see reference:\n//   [1] C. Zach, T. Pock and H. Bischof, \"A Duality Based Approach for Realtime TV-L1 Optical Flow\".\n//   [2] Javier Sanchez, Enric Meinhardt-Llopis and Gabriele Facciolo. \"TV-L1 Optical Flow Estimation\".\nCV_EXPORTS Ptr<DenseOpticalFlow> createOptFlow_DualTVL1();\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/video/video.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEO_HPP__\n#define __OPENCV_VIDEO_HPP__\n\n#include \"opencv2/video/tracking.hpp\"\n#include \"opencv2/video/background_segm.hpp\"\n\n#ifdef __cplusplus\nnamespace cv\n{\n\nCV_EXPORTS bool initModule_video(void);\n\n}\n#endif\n\n#endif //__OPENCV_VIDEO_HPP__\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/deblurring.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_DEBLURRING_HPP__\n#define __OPENCV_VIDEOSTAB_DEBLURRING_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nCV_EXPORTS float calcBlurriness(const Mat &frame);\n\nclass CV_EXPORTS DeblurerBase\n{\npublic:\n    DeblurerBase() : radius_(0), frames_(0), motions_(0) {}\n\n    virtual ~DeblurerBase() {}\n\n    virtual void setRadius(int val) { radius_ = val; }\n    virtual int radius() const { return radius_; }\n\n    virtual void setFrames(const std::vector<Mat> &val) { frames_ = &val; }\n    virtual const std::vector<Mat>& frames() const { return *frames_; }\n\n    virtual void setMotions(const std::vector<Mat> &val) { motions_ = &val; }\n    virtual const std::vector<Mat>& motions() const { return *motions_; }\n\n    virtual void setBlurrinessRates(const std::vector<float> &val) { blurrinessRates_ = &val; }\n    virtual const std::vector<float>& blurrinessRates() const { return *blurrinessRates_; }\n\n    virtual void update() {}\n\n    virtual void deblur(int idx, Mat &frame) = 0;\n\nprotected:\n    int radius_;\n    const std::vector<Mat> *frames_;\n    const std::vector<Mat> *motions_;\n    const std::vector<float> *blurrinessRates_;\n};\n\nclass CV_EXPORTS NullDeblurer : public DeblurerBase\n{\npublic:\n    virtual void deblur(int /*idx*/, Mat &/*frame*/) {}\n};\n\nclass CV_EXPORTS WeightingDeblurer : public DeblurerBase\n{\npublic:\n    WeightingDeblurer();\n\n    void setSensitivity(float val) { sensitivity_ = val; }\n    float sensitivity() const { return sensitivity_; }\n\n    virtual void deblur(int idx, Mat &frame);\n\nprivate:\n    float sensitivity_;\n    Mat_<float> bSum_, gSum_, rSum_, wSum_;\n};\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/fast_marching.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FAST_MARCHING_HPP__\n#define __OPENCV_VIDEOSTAB_FAST_MARCHING_HPP__\n\n#include <cmath>\n#include <queue>\n#include <algorithm>\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\n// See http://iwi.eldoc.ub.rug.nl/FILES/root/2004/JGraphToolsTelea/2004JGraphToolsTelea.pdf\nclass CV_EXPORTS FastMarchingMethod\n{\npublic:\n    FastMarchingMethod() : inf_(1e6f) {}\n\n    template <typename Inpaint>\n    Inpaint run(const Mat &mask, Inpaint inpaint);\n\n    Mat distanceMap() const { return dist_; }\n\nprivate:\n    enum { INSIDE = 0, BAND = 1, KNOWN = 255 };\n\n    struct DXY\n    {\n        float dist;\n        int x, y;\n\n        DXY() : dist(0), x(0), y(0) {}\n        DXY(float _dist, int _x, int _y) : dist(_dist), x(_x), y(_y) {}\n        bool operator <(const DXY &dxy) const { return dist < dxy.dist; }\n    };\n\n    float solve(int x1, int y1, int x2, int y2) const;\n    int& indexOf(const DXY &dxy) { return index_(dxy.y, dxy.x); }\n\n    void heapUp(int idx);\n    void heapDown(int idx);\n    void heapAdd(const DXY &dxy);\n    void heapRemoveMin();\n\n    float inf_;\n\n    cv::Mat_<uchar> flag_; // flag map\n    cv::Mat_<float> dist_; // distance map\n\n    cv::Mat_<int> index_; // index of point in the narrow band\n    std::vector<DXY> narrowBand_; // narrow band heap\n    int size_; // narrow band size\n};\n\n} // namespace videostab\n} // namespace cv\n\n#include \"fast_marching_inl.hpp\"\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/fast_marching_inl.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FAST_MARCHING_INL_HPP__\n#define __OPENCV_VIDEOSTAB_FAST_MARCHING_INL_HPP__\n\n#include \"opencv2/videostab/fast_marching.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\ntemplate <typename Inpaint>\nInpaint FastMarchingMethod::run(const cv::Mat &mask, Inpaint inpaint)\n{\n    using namespace std;\n    using namespace cv;\n\n    CV_Assert(mask.type() == CV_8U);\n\n    static const int lut[4][2] = {{-1,0}, {0,-1}, {1,0}, {0,1}};\n\n    mask.copyTo(flag_);\n    flag_.create(mask.size());\n    dist_.create(mask.size());\n    index_.create(mask.size());\n    narrowBand_.clear();\n    size_ = 0;\n\n    // init\n    for (int y = 0; y < flag_.rows; ++y)\n    {\n        for (int x = 0; x < flag_.cols; ++x)\n        {\n            if (flag_(y,x) == KNOWN)\n                dist_(y,x) = 0.f;\n            else\n            {\n                int n = 0;\n                int nunknown = 0;\n\n                for (int i = 0; i < 4; ++i)\n                {\n                    int xn = x + lut[i][0];\n                    int yn = y + lut[i][1];\n\n                    if (xn >= 0 && xn < flag_.cols && yn >= 0 && yn < flag_.rows)\n                    {\n                        n++;\n                        if (flag_(yn,xn) != KNOWN)\n                            nunknown++;\n                    }\n                }\n\n                if (n>0 && nunknown == n)\n                {\n                    dist_(y,x) = inf_;\n                    flag_(y,x) = INSIDE;\n                }\n                else\n                {\n                    dist_(y,x) = 0.f;\n                    flag_(y,x) = BAND;\n                    inpaint(x, y);\n\n                    narrowBand_.push_back(DXY(0.f,x,y));\n                    index_(y,x) = size_++;\n                }\n            }\n        }\n    }\n\n    // make heap\n    for (int i = size_/2-1; i >= 0; --i)\n        heapDown(i);\n\n    // main cycle\n    while (size_ > 0)\n    {\n        int x = narrowBand_[0].x;\n        int y = narrowBand_[0].y;\n        heapRemoveMin();\n\n        flag_(y,x) = KNOWN;\n        for (int n = 0; n < 4; ++n)\n        {\n            int xn = x + lut[n][0];\n            int yn = y + lut[n][1];\n\n            if (xn >= 0 && xn < flag_.cols && yn >= 0 && yn < flag_.rows && flag_(yn,xn) != KNOWN)\n            {\n                dist_(yn,xn) = min(min(solve(xn-1, yn, xn, yn-1), solve(xn+1, yn, xn, yn-1)),\n                                   min(solve(xn-1, yn, xn, yn+1), solve(xn+1, yn, xn, yn+1)));\n\n                if (flag_(yn,xn) == INSIDE)\n                {\n                    flag_(yn,xn) = BAND;\n                    inpaint(xn, yn);\n                    heapAdd(DXY(dist_(yn,xn),xn,yn));\n                }\n                else\n                {\n                    int i = index_(yn,xn);\n                    if (dist_(yn,xn) < narrowBand_[i].dist)\n                    {\n                        narrowBand_[i].dist = dist_(yn,xn);\n                        heapUp(i);\n                    }\n                    // works better if it's commented out\n                    /*else if (dist(yn,xn) > narrowBand[i].dist)\n                    {\n                        narrowBand[i].dist = dist(yn,xn);\n                        heapDown(i);\n                    }*/\n                }\n            }\n        }\n    }\n\n    return inpaint;\n}\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/frame_source.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_FRAME_SOURCE_HPP__\n#define __OPENCV_VIDEOSTAB_FRAME_SOURCE_HPP__\n\n#include <vector>\n#include <string>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/highgui/highgui.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS IFrameSource\n{\npublic:\n    virtual ~IFrameSource() {}\n    virtual void reset() = 0;\n    virtual Mat nextFrame() = 0;\n};\n\nclass CV_EXPORTS NullFrameSource : public IFrameSource\n{\npublic:\n    virtual void reset() {}\n    virtual Mat nextFrame() { return Mat(); }\n};\n\nclass CV_EXPORTS VideoFileSource : public IFrameSource\n{\npublic:\n    VideoFileSource(const std::string &path, bool volatileFrame = false);\n\n    virtual void reset();\n    virtual Mat nextFrame();\n\n    int frameCount() { return static_cast<int>(reader_.get(CV_CAP_PROP_FRAME_COUNT)); }\n    double fps() { return reader_.get(CV_CAP_PROP_FPS); }\n\nprivate:\n    std::string path_;\n    bool volatileFrame_;\n    VideoCapture reader_;\n};\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/global_motion.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_GLOBAL_MOTION_HPP__\n#define __OPENCV_VIDEOSTAB_GLOBAL_MOTION_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/features2d/features2d.hpp\"\n#include \"opencv2/videostab/optical_flow.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nenum MotionModel\n{\n    TRANSLATION = 0,\n    TRANSLATION_AND_SCALE = 1,\n    LINEAR_SIMILARITY = 2,\n    AFFINE = 3\n};\n\nCV_EXPORTS Mat estimateGlobalMotionLeastSquares(\n        const std::vector<Point2f> &points0, const std::vector<Point2f> &points1,\n        int model = AFFINE, float *rmse = 0);\n\nstruct CV_EXPORTS RansacParams\n{\n    int size; // subset size\n    float thresh; // max error to classify as inlier\n    float eps; // max outliers ratio\n    float prob; // probability of success\n\n    RansacParams(int _size, float _thresh, float _eps, float _prob)\n        : size(_size), thresh(_thresh), eps(_eps), prob(_prob) {}\n\n    static RansacParams translationMotionStd() { return RansacParams(2, 0.5f, 0.5f, 0.99f); }\n    static RansacParams translationAndScale2dMotionStd() { return RansacParams(3, 0.5f, 0.5f, 0.99f); }\n    static RansacParams linearSimilarityMotionStd() { return RansacParams(4, 0.5f, 0.5f, 0.99f); }\n    static RansacParams affine2dMotionStd() { return RansacParams(6, 0.5f, 0.5f, 0.99f); }\n};\n\nCV_EXPORTS Mat estimateGlobalMotionRobust(\n        const std::vector<Point2f> &points0, const std::vector<Point2f> &points1,\n        int model = AFFINE, const RansacParams &params = RansacParams::affine2dMotionStd(),\n        float *rmse = 0, int *ninliers = 0);\n\nclass CV_EXPORTS IGlobalMotionEstimator\n{\npublic:\n    virtual ~IGlobalMotionEstimator() {}\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1) = 0;\n};\n\nclass CV_EXPORTS PyrLkRobustMotionEstimator : public IGlobalMotionEstimator\n{\npublic:\n    PyrLkRobustMotionEstimator();\n\n    void setDetector(Ptr<FeatureDetector> val) { detector_ = val; }\n    Ptr<FeatureDetector> detector() const { return detector_; }\n\n    void setOptFlowEstimator(Ptr<ISparseOptFlowEstimator> val) { optFlowEstimator_ = val; }\n    Ptr<ISparseOptFlowEstimator> optFlowEstimator() const { return optFlowEstimator_; }\n\n    void setMotionModel(MotionModel val) { motionModel_ = val; }\n    MotionModel motionModel() const { return motionModel_; }\n\n    void setRansacParams(const RansacParams &val) { ransacParams_ = val; }\n    RansacParams ransacParams() const { return ransacParams_; }\n\n    void setMaxRmse(float val) { maxRmse_ = val; }\n    float maxRmse() const { return maxRmse_; }\n\n    void setMinInlierRatio(float val) { minInlierRatio_ = val; }\n    float minInlierRatio() const { return minInlierRatio_; }\n\n    virtual Mat estimate(const Mat &frame0, const Mat &frame1);\n\nprivate:\n    Ptr<FeatureDetector> detector_;\n    Ptr<ISparseOptFlowEstimator> optFlowEstimator_;\n    MotionModel motionModel_;\n    RansacParams ransacParams_;\n    std::vector<uchar> status_;\n    std::vector<KeyPoint> keypointsPrev_;\n    std::vector<Point2f> pointsPrev_, points_;\n    std::vector<Point2f> pointsPrevGood_, pointsGood_;\n    float maxRmse_;\n    float minInlierRatio_;\n};\n\nCV_EXPORTS Mat getMotion(int from, int to, const Mat *motions, int size);\n\nCV_EXPORTS Mat getMotion(int from, int to, const std::vector<Mat> &motions);\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/inpainting.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_INPAINTINT_HPP__\n#define __OPENCV_VIDEOSTAB_INPAINTINT_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/videostab/optical_flow.hpp\"\n#include \"opencv2/videostab/fast_marching.hpp\"\n#include \"opencv2/photo/photo.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS InpainterBase\n{\npublic:\n    InpainterBase()\n        : radius_(0), frames_(0), motions_(0),\n          stabilizedFrames_(0), stabilizationMotions_(0) {}\n\n    virtual ~InpainterBase() {}\n\n    virtual void setRadius(int val) { radius_ = val; }\n    virtual int radius() const { return radius_; }\n\n    virtual void setFrames(const std::vector<Mat> &val) { frames_ = &val; }\n    virtual const std::vector<Mat>& frames() const { return *frames_; }\n\n    virtual void setMotions(const std::vector<Mat> &val) { motions_ = &val; }\n    virtual const std::vector<Mat>& motions() const { return *motions_; }\n\n    virtual void setStabilizedFrames(const std::vector<Mat> &val) { stabilizedFrames_ = &val; }\n    virtual const std::vector<Mat>& stabilizedFrames() const { return *stabilizedFrames_; }\n\n    virtual void setStabilizationMotions(const std::vector<Mat> &val) { stabilizationMotions_ = &val; }\n    virtual const std::vector<Mat>& stabilizationMotions() const { return *stabilizationMotions_; }\n\n    virtual void update() {}\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask) = 0;\n\nprotected:\n    int radius_;\n    const std::vector<Mat> *frames_;\n    const std::vector<Mat> *motions_;\n    const std::vector<Mat> *stabilizedFrames_;\n    const std::vector<Mat> *stabilizationMotions_;\n};\n\nclass CV_EXPORTS NullInpainter : public InpainterBase\n{\npublic:\n    virtual void inpaint(int /*idx*/, Mat &/*frame*/, Mat &/*mask*/) {}\n};\n\nclass CV_EXPORTS InpaintingPipeline : public InpainterBase\n{\npublic:\n    void pushBack(Ptr<InpainterBase> inpainter) { inpainters_.push_back(inpainter); }\n    bool empty() const { return inpainters_.empty(); }\n\n    virtual void setRadius(int val);\n    virtual void setFrames(const std::vector<Mat> &val);\n    virtual void setMotions(const std::vector<Mat> &val);\n    virtual void setStabilizedFrames(const std::vector<Mat> &val);\n    virtual void setStabilizationMotions(const std::vector<Mat> &val);\n\n    virtual void update();\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    std::vector<Ptr<InpainterBase> > inpainters_;\n};\n\nclass CV_EXPORTS ConsistentMosaicInpainter : public InpainterBase\n{\npublic:\n    ConsistentMosaicInpainter();\n\n    void setStdevThresh(float val) { stdevThresh_ = val; }\n    float stdevThresh() const { return stdevThresh_; }\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    float stdevThresh_;\n};\n\nclass CV_EXPORTS MotionInpainter : public InpainterBase\n{\npublic:\n    MotionInpainter();\n\n    void setOptFlowEstimator(Ptr<IDenseOptFlowEstimator> val) { optFlowEstimator_ = val; }\n    Ptr<IDenseOptFlowEstimator> optFlowEstimator() const { return optFlowEstimator_; }\n\n    void setFlowErrorThreshold(float val) { flowErrorThreshold_ = val; }\n    float flowErrorThreshold() const { return flowErrorThreshold_; }\n\n    void setDistThreshold(float val) { distThresh_ = val; }\n    float distThresh() const { return distThresh_; }\n\n    void setBorderMode(int val) { borderMode_ = val; }\n    int borderMode() const { return borderMode_; }\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    FastMarchingMethod fmm_;\n    Ptr<IDenseOptFlowEstimator> optFlowEstimator_;\n    float flowErrorThreshold_;\n    float distThresh_;\n    int borderMode_;\n\n    Mat frame1_, transformedFrame1_;\n    Mat_<uchar> grayFrame_, transformedGrayFrame1_;\n    Mat_<uchar> mask1_, transformedMask1_;\n    Mat_<float> flowX_, flowY_, flowErrors_;\n    Mat_<uchar> flowMask_;\n};\n\nclass CV_EXPORTS ColorAverageInpainter : public InpainterBase\n{\npublic:\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    FastMarchingMethod fmm_;\n};\n\nclass CV_EXPORTS ColorInpainter : public InpainterBase\n{\npublic:\n    ColorInpainter(int method = INPAINT_TELEA, double _radius = 2.)\n        : method_(method), radius_(_radius) {}\n\n    virtual void inpaint(int idx, Mat &frame, Mat &mask);\n\nprivate:\n    int method_;\n    double radius_;\n    Mat invMask_;\n};\n\nCV_EXPORTS void calcFlowMask(\n        const Mat &flowX, const Mat &flowY, const Mat &errors, float maxError,\n        const Mat &mask0, const Mat &mask1, Mat &flowMask);\n\nCV_EXPORTS void completeFrameAccordingToFlow(\n        const Mat &flowMask, const Mat &flowX, const Mat &flowY, const Mat &frame1, const Mat &mask1,\n        float distThresh, Mat& frame0, Mat &mask0);\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/log.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_LOG_HPP__\n#define __OPENCV_VIDEOSTAB_LOG_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS ILog\n{\npublic:\n    virtual ~ILog() {}\n    virtual void print(const char *format, ...) = 0;\n};\n\nclass CV_EXPORTS NullLog : public ILog\n{\npublic:\n    virtual void print(const char * /*format*/, ...) {}\n};\n\nclass CV_EXPORTS LogToStdout : public ILog\n{\npublic:\n    virtual void print(const char *format, ...);\n};\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/motion_stabilizing.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_MOTION_STABILIZING_HPP__\n#define __OPENCV_VIDEOSTAB_MOTION_STABILIZING_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS IMotionStabilizer\n{\npublic:\n    virtual void stabilize(const Mat *motions, int size, Mat *stabilizationMotions) const = 0;\n\n#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY\n    virtual ~IMotionStabilizer() {}\n#endif\n};\n\nclass CV_EXPORTS MotionFilterBase : public IMotionStabilizer\n{\npublic:\n    MotionFilterBase() : radius_(0) {}\n    virtual ~MotionFilterBase() {}\n\n    virtual void setRadius(int val) { radius_ = val; }\n    virtual int radius() const { return radius_; }\n\n    virtual void update() {}\n\n    virtual Mat stabilize(int index, const Mat *motions, int size) const = 0;\n    virtual void stabilize(const Mat *motions, int size, Mat *stabilizationMotions) const;\n\nprotected:\n    int radius_;\n};\n\nclass CV_EXPORTS GaussianMotionFilter : public MotionFilterBase\n{\npublic:\n    GaussianMotionFilter() : stdev_(-1.f) {}\n\n    void setStdev(float val) { stdev_ = val; }\n    float stdev() const { return stdev_; }\n\n    virtual void update();\n\n    virtual Mat stabilize(int index, const Mat *motions, int size) const;\n\nprivate:\n    float stdev_;\n    std::vector<float> weight_;\n};\n\nCV_EXPORTS Mat ensureInclusionConstraint(const Mat &M, Size size, float trimRatio);\n\nCV_EXPORTS float estimateOptimalTrimRatio(const Mat &M, Size size);\n\n} // namespace videostab\n} // namespace\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/optical_flow.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__\n#define __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__\n\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/opencv_modules.hpp\"\n\n#if defined(HAVE_OPENCV_GPU) && !defined(ANDROID)\n#  include \"opencv2/gpu/gpu.hpp\"\n#endif\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS ISparseOptFlowEstimator\n{\npublic:\n    virtual ~ISparseOptFlowEstimator() {}\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,\n            OutputArray status, OutputArray errors) = 0;\n};\n\nclass CV_EXPORTS IDenseOptFlowEstimator\n{\npublic:\n    virtual ~IDenseOptFlowEstimator() {}\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,\n            OutputArray errors) = 0;\n};\n\nclass CV_EXPORTS PyrLkOptFlowEstimatorBase\n{\npublic:\n    PyrLkOptFlowEstimatorBase() { setWinSize(Size(21, 21)); setMaxLevel(3); }\n\n    void setWinSize(Size val) { winSize_ = val; }\n    Size winSize() const { return winSize_; }\n\n    void setMaxLevel(int val) { maxLevel_ = val; }\n    int maxLevel() const { return maxLevel_; }\n\nprotected:\n    Size winSize_;\n    int maxLevel_;\n};\n\nclass CV_EXPORTS SparsePyrLkOptFlowEstimator\n        : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator\n{\npublic:\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,\n            OutputArray status, OutputArray errors);\n};\n\n#if defined(HAVE_OPENCV_GPU) && !defined(ANDROID)\nclass CV_EXPORTS DensePyrLkOptFlowEstimatorGpu\n        : public PyrLkOptFlowEstimatorBase, public IDenseOptFlowEstimator\n{\npublic:\n    DensePyrLkOptFlowEstimatorGpu();\n\n    virtual void run(\n            InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,\n            OutputArray errors);\nprivate:\n    gpu::PyrLKOpticalFlow optFlowEstimator_;\n    gpu::GpuMat frame0_, frame1_, flowX_, flowY_, errors_;\n};\n#endif\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/stabilizer.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_STABILIZER_HPP__\n#define __OPENCV_VIDEOSTAB_STABILIZER_HPP__\n\n#include <vector>\n#include \"opencv2/core/core.hpp\"\n#include \"opencv2/imgproc/imgproc.hpp\"\n#include \"opencv2/videostab/global_motion.hpp\"\n#include \"opencv2/videostab/motion_stabilizing.hpp\"\n#include \"opencv2/videostab/frame_source.hpp\"\n#include \"opencv2/videostab/log.hpp\"\n#include \"opencv2/videostab/inpainting.hpp\"\n#include \"opencv2/videostab/deblurring.hpp\"\n\nnamespace cv\n{\nnamespace videostab\n{\n\nclass CV_EXPORTS StabilizerBase\n{\npublic:\n    virtual ~StabilizerBase() {}\n\n    void setLog(Ptr<ILog> _log) { log_ = _log; }\n    Ptr<ILog> log() const { return log_; }\n\n    void setRadius(int val) { radius_ = val; }\n    int radius() const { return radius_; }\n\n    void setFrameSource(Ptr<IFrameSource> val) { frameSource_ = val; }\n    Ptr<IFrameSource> frameSource() const { return frameSource_; }\n\n    void setMotionEstimator(Ptr<IGlobalMotionEstimator> val) { motionEstimator_ = val; }\n    Ptr<IGlobalMotionEstimator> motionEstimator() const { return motionEstimator_; }\n\n    void setDeblurer(Ptr<DeblurerBase> val) { deblurer_ = val; }\n    Ptr<DeblurerBase> deblurrer() const { return deblurer_; }\n\n    void setTrimRatio(float val) { trimRatio_ = val; }\n    float trimRatio() const { return trimRatio_; }\n\n    void setCorrectionForInclusion(bool val) { doCorrectionForInclusion_ = val; }\n    bool doCorrectionForInclusion() const { return doCorrectionForInclusion_; }\n\n    void setBorderMode(int val) { borderMode_ = val; }\n    int borderMode() const { return borderMode_; }\n\n    void setInpainter(Ptr<InpainterBase> val) { inpainter_ = val; }\n    Ptr<InpainterBase> inpainter() const { return inpainter_; }\n\nprotected:\n    StabilizerBase();\n\n    void setUp(int cacheSize, const Mat &frame);\n    Mat nextStabilizedFrame();\n    bool doOneIteration();\n    void stabilizeFrame(const Mat &stabilizationMotion);\n\n    virtual void setUp(Mat &firstFrame) = 0;\n    virtual void stabilizeFrame() = 0;\n    virtual void estimateMotion() = 0;\n\n    Ptr<ILog> log_;\n    Ptr<IFrameSource> frameSource_;\n    Ptr<IGlobalMotionEstimator> motionEstimator_;\n    Ptr<DeblurerBase> deblurer_;\n    Ptr<InpainterBase> inpainter_;\n    int radius_;\n    float trimRatio_;\n    bool doCorrectionForInclusion_;\n    int borderMode_;\n\n    Size frameSize_;\n    Mat frameMask_;\n    int curPos_;\n    int curStabilizedPos_;\n    bool doDeblurring_;\n    Mat preProcessedFrame_;\n    bool doInpainting_;\n    Mat inpaintingMask_;\n    std::vector<Mat> frames_;\n    std::vector<Mat> motions_; // motions_[i] is the motion from i-th to i+1-th frame\n    std::vector<float> blurrinessRates_;\n    std::vector<Mat> stabilizedFrames_;\n    std::vector<Mat> stabilizedMasks_;\n    std::vector<Mat> stabilizationMotions_;\n};\n\nclass CV_EXPORTS OnePassStabilizer : public StabilizerBase, public IFrameSource\n{\npublic:\n    OnePassStabilizer();\n\n    void setMotionFilter(Ptr<MotionFilterBase> val) { motionFilter_ = val; }\n    Ptr<MotionFilterBase> motionFilter() const { return motionFilter_; }\n\n    virtual void reset() { resetImpl(); }\n    virtual Mat nextFrame() { return nextStabilizedFrame(); }\n\nprivate:\n    void resetImpl();\n\n    virtual void setUp(Mat &firstFrame);\n    virtual void estimateMotion();\n    virtual void stabilizeFrame();\n\n    Ptr<MotionFilterBase> motionFilter_;\n};\n\nclass CV_EXPORTS TwoPassStabilizer : public StabilizerBase, public IFrameSource\n{\npublic:\n    TwoPassStabilizer();\n\n    void setMotionStabilizer(Ptr<IMotionStabilizer> val) { motionStabilizer_ = val; }\n    Ptr<IMotionStabilizer> motionStabilizer() const { return motionStabilizer_; }\n\n    void setEstimateTrimRatio(bool val) { mustEstTrimRatio_ = val; }\n    bool mustEstimateTrimaRatio() const { return mustEstTrimRatio_; }\n\n    virtual void reset() { resetImpl(); }\n    virtual Mat nextFrame();\n\n    // available after pre-pass, before it's empty\n    std::vector<Mat> motions() const;\n\nprivate:\n    void resetImpl();\n    void runPrePassIfNecessary();\n\n    virtual void setUp(Mat &firstFrame);\n    virtual void estimateMotion() { /* do nothing as motion was estimation in pre-pass */ }\n    virtual void stabilizeFrame();\n\n    Ptr<IMotionStabilizer> motionStabilizer_;\n    bool mustEstTrimRatio_;\n\n    int frameCount_;\n    bool isPrePassDone_;\n};\n\n} // namespace videostab\n} // namespace cv\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/videostab/videostab.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_VIDEOSTAB_HPP__\n#define __OPENCV_VIDEOSTAB_HPP__\n\n#include \"opencv2/videostab/stabilizer.hpp\"\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Headers/world/world.hpp",
    "content": "/*M///////////////////////////////////////////////////////////////////////////////////////\n//\n//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\n//\n//  By downloading, copying, installing or using the software you agree to this license.\n//  If you do not agree to this license, do not download, install,\n//  copy or use the software.\n//\n//\n//                           License Agreement\n//                For Open Source Computer Vision Library\n//\n// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\n// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved.\n// Third party copyrights are property of their respective owners.\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//   * Redistribution's of source code must retain the above copyright notice,\n//     this list of conditions and the following disclaimer.\n//\n//   * Redistribution's in binary form must reproduce the above copyright notice,\n//     this list of conditions and the following disclaimer in the documentation\n//     and/or other materials provided with the distribution.\n//\n//   * The name of the copyright holders 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 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 disclaimed.\n// In no event shall the Intel Corporation or contributors be liable for any direct,\n// 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\n// and on any theory of liability, whether in contract, strict liability,\n// or tort (including negligence or otherwise) arising in any way out of\n// the use of this software, even if advised of the possibility of such damage.\n//\n//M*/\n\n#ifndef __OPENCV_WORLD_HPP__\n#define __OPENCV_WORLD_HPP__\n\n#include \"opencv2/core/core.hpp\"\n\n#ifdef __cplusplus\nnamespace cv\n{\n\nCV_EXPORTS_W bool initAll();\n\n}\n\n#endif\n\n#endif\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/opencv2.framework/Versions/A/Resources/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    <key>CFBundleName</key>\n    <string>OpenCV</string>\n    <key>CFBundleIdentifier</key>\n    <string>org.opencv</string>\n    <key>CFBundleVersion</key>\n    <string>2.4.9</string>\n    <key>CFBundleShortVersionString</key>\n    <string>2.4.9</string>\n    <key>CFBundleSignature</key>\n    <string>????</string>\n    <key>CFBundlePackageType</key>\n    <string>FMWK</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/operations-and-indexing.m",
    "content": "//\n//  indexing.m\n//  swix\n//\n//  Created by Scott Sievert on 7/13/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Accelerate/Accelerate.h>\n#import <stdint.h>\nvoid test(){\n    int N = 1000;\n    double * x = (double*)malloc(sizeof(double) * N);\n    double * y = (double*)malloc(sizeof(double) * N);\n    for (int i=0; i<N; i++){ x[i] = i; y[i] = 0;}\n    \n    dispatch_apply(N, dispatch_get_global_queue(0, 0), ^(size_t i){\n        y[i] = x[i]+1;\n    });\n    \n    for (int i=0; i<N; i++){\n        double value = x[i]+1 - y[i];\n        if (!(value==0)){\n            printf(\"%.2e, \", value);\n        }\n    }\n    printf(\"\\n\");\n}\n\n// UNOPTIMIZED\nvoid index_xa_b_objc(double* x, double* a, double* b, int N){\n    int * j = (int *)malloc(sizeof(int) * N);\n    vDSP_vfix32D(a, 1, j, 1, N); // double to int\n    \n    for (int i=0; i<N; i++){\n        x[j[i]] = b[i];\n    }\n    free(j);\n}\n\n// OPTIMIZED\ndouble* zeros_objc(int N){\n    double * x = (double *)malloc(sizeof(double) * N);\n    double value = 0.0;\n    vDSP_vfillD(&value, x, 1, N);\n    return x;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/objc/swix-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n// for speedy mathematical functions\n#import <Accelerate/Accelerate.h>\n\n// for the machine learning\n#import \"OpenCV.h\"\n\n// for various easier/faster-in-c operations\nvoid index_xa_b_objc(double * x, double*a, double*b, int N);\nvoid svd_objc(double * xx, int m, int n, double* sigma, double* vt, double* u, int compute_uv);\nvoid test();\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/tests/speed.swift",
    "content": "//\n//  speed.swift\n//  swix\n//\n//  Created by Scott Sievert on 8/9/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\n// should be run while optimized!\nclass swixSpeedTests {\n    init(){\n        time(pe1, name:\"Project Euler 1\")\n        time(pe10, name:\"Project Euler 10\")\n        time(pe73, name:\"Project Euler 73\")\n        time(pi_approx, name:\"Pi approximation\")\n        time(soft_thresholding, name:\"Soft thresholding\")\n    }\n}\nfunc time(f:()->(), name:String=\"function\"){\n    let start = NSDate()\n    f()\n    print(NSString(format:\"\\(name) time (s): %.4f\", -1 * start.timeIntervalSinceNow))\n}\nfunc pe1(){\n    let N = 1e6\n    let x = arange(N)\n    // seeing where that modulo is 0\n    var i = argwhere((abs(x%3) < 1e-9) || (abs(x%5) < 1e-9))\n    // println(sum(x[i]))\n    // prints 233168.0, the correct answer\n}\nfunc pe10(){\n    // find all primes\n    var N = 2e6.int\n    var primes = arange(Double(N))\n    var top = (sqrt(N.double)).int\n    for i in 2 ..< top{\n        var max:Int = (N/i)\n        var j = arange(2, max: max.double) * i.double\n        primes[j] *= 0.0\n    }\n    // sum(primes) is the correct answer\n}\nfunc pe73(){\n    var N = 1e3\n    var i = arange(N)+1\n    var (n, d) = meshgrid(i, y: i)\n    \n    var f = (n / d).flat\n    f = unique(f)\n    var j = (f > 1/3) && (f < 1/2)\n    // println(f[argwhere(j)].n)\n}\n\n\nfunc soft_thresholding(){\n    let N = 1e2.int\n    var j = linspace(-1, max: 1, num:N)\n    var (x, y) = meshgrid(j, y: j)\n    var z = pow(x, power: 2) + pow(y, power: 2)\n    var i = abs(z) < 0.5\n    z[argwhere(i)] *= 0\n    z[argwhere(1-i)] -= 0.5\n}\n\n\n\nfunc pi_approx(){\n    let N = 1e6\n    var k = arange(N)\n    var pi_approx = 1 / (2*k + 1)\n    pi_approx[2*k[0..<(N/2).int]+1] *= -1\n    // println(4 * pi_approx)\n    // prints 3.14059265383979\n}"
  },
  {
    "path": "swix_ios_app/swix_ios_app/swix/tests/tests.swift",
    "content": "//\n//  fullTests.swift\n//  swix\n//\n//  Created by Scott Sievert on 7/18/14.\n//  Copyright (c) 2014 com.scott. All rights reserved.\n//\n\nimport Foundation\n\nclass swixTests {\n    var N:Int\n    init(run_io_tests:Bool=false){\n        print(\"running many simple tests\")\n        self.N = 10\n        operatorTests()\n        print(\"   operators work as expected\")\n        comparisonTests()\n        print(\"   comparisons work as expected\")\n        functionTests()\n        print(\"   simple functions work as expected\")\n        twoDTests()\n        print(\"   matrix convience elements work as expected\")\n        if run_io_tests {\n            readWriteTests()\n            print(\"   {read,write}_{binary,csv}, savefig work like Python... at least on OSX\")\n        }\n        complexTests()\n        \n        numberTests()\n        ndarrayTests()\n        matrixTests()\n        set_theory_tests()\n    }\n    func set_theory_tests(){\n        func in1d_test(){\n            var test = array(0, 1, 2, 5, 0)\n            var states = array(0, 2)\n            var mask = in1d(test, y:states)\n            assert(mask ~== array(1, 0, 1, 0, 1))\n        }\n        func intersection_test(){\n            var x = array(1, 2, 3, 4, -1, -1)\n            var y = array(1, 2, 3, 5, -1, -1)\n            var a = intersection(x, y:y)\n            var b = union(x, y:y)\n            assert(a ~== array(-1, 1, 2, 3))\n            assert(b ~== array(-1, 1, 2, 3, 4, 5))\n        }\n        in1d_test()\n        intersection_test()\n        print(\"set function works like set theory \")\n    }\n    func complexTests(){\n        func scalar_test(){\n            let x:Int = 1\n            let y:Double = 4\n            let z:Double = x + y\n            assert(z == 5)\n            print(\"Int(1)+Double(1)==2 through ScalarArithmetic\")\n        }\n        func swift_complex_test(){\n//            var x = 1.0 + 1.0.i\n//            assert(abs(x) == sqrt(2))\n//            print(\"scalar (not vector) complex number usage works using swift-complex.\")\n        }\n        func range_test(){\n            var x = arange(4)\n            let y = x[0..<2]\n            assert(y ~== arange(2))\n            \n            var z = zeros(4)\n            z[0..<2] = ones(2)\n            assert(z ~== array(1, 1, 0, 0))\n            print(\"x[0..<2] = ones(2) and y = z[3..<8] works in the 1d case!\")\n        }\n        func argwhere_test(){\n            var x = zeros(N)\n            let y = zeros(N)\n            x[0..<5] = ones(5)\n            let i = argwhere(abs(x-y) < 1e-9)\n            assert(i ~== array(5, 6, 7, 8, 9))\n            x[argwhere(x<2)] = ones(argwhere(x<2).n)\n            print(\"can use argwhere. x[argwhere(x<2)]=zeros(argwhere(x<2).n)  works for both 1d and 2d.\")\n        }\n        func matrix2d_indexing_test(){\n            var x = array(\"1 2 3; 4 5 6; 7 8 9\")\n            x[0..<2, 0..<2] = array(\"4 3; 2 6\")\n            assert(x ~== array(\"4 3 3; 2 6 6; 7 8 9\"))\n            print(\"can use x[1, 0..<2] or x[0..<2, 0..<2] to also index\")\n        }\n        func matrix2d_indexing_matrix_test(){\n            var x = array(\"1 2 3; 4 5 6; 7 8 9\")\n            assert(x[array(0, 1, 2, 3, 4, 5)] ~== array(1, 2, 3, 4, 5, 6))\n            print(\"x[ndarray] works and indexes the ndarray row first\")\n        }\n        func fft_test(){\n            var x = arange(8)\n            var (yr, yi) = fft(x)\n            var x2 = ifft(yr, yi: yi)\n            assert(x2 ~== x)\n            print(\"fft/ifft works. fft(x) -> (yreal, yimag)\")\n        }\n        func dot_test(){\n            let x = eye(3) * 2\n            let y = array(\"1 2 3 1; 4 5 6 1; 7 8 9 1\")\n            assert((x.dot(y)) ~== 2*y)\n            print(\"dot product works with dot(x, y) or x *! y\")\n            \n            let xA = ones(3)\n            let A = arange(3*3).reshape((3, 3))\n            let yA1 = A.dot(xA)\n            let yA2 = dot(A, x: xA)\n            assert(yA1 ~== array(3, 12, 21))\n            assert(yA1 ~== yA2)\n        }\n        func svd_test(){\n            let x = array(\"1 2; 4 8; 3 5\")\n            var (u, s, v) = svd(x)\n            \n            let y = array(\"1 2 3; 4 5 6\")\n            (u, s, v) = svd(y)\n            \n            let z = array(\"1 2 3; 4 5 6; 7 8 9\")\n            (u, s, v) = svd(z)\n            \n            print(\"svd works and tested by hand for square, fat and skinny matrices against Python\")\n        }\n        func svm_test(){\n            var svm = SVM()\n            var x = reshape(arange(4*2) , shape: (4, 2))\n            var y = array(0, 1, 2, 3)\n            \n            svm.train(x, y)\n            var z = svm.predict(array(2, 3))\n            assert(z == y[1])\n            print(\"svm works via simple test\")\n        }\n        func inv_test(){\n            let x = randn((4,4))\n            let y = inv(x)\n            assert((x.dot(y)) ~== eye(4))\n            print(\"matrix inversion works\")\n        }\n        func solve_test(){\n            var A0 = array(1, 2, 3, 4, 2, 1, 4, 6, 7)\n            var A = reshape(A0, shape: (3, 3))\n            var b = array(1, 2, 5)\n            var x = solve(A, b: b)\n            assert((A !/ b) ~== solve(A, b: b))\n            print(\"solve works, similar to Matlab's \\\\ operator (and checked by hand). Be careful -- this only works for nxn matrices\")\n        }\n        func eig_test(){\n            var x = zeros((3,3))\n            x[\"diag\"] = array(1, 2, 3)\n            let r = eig(x)\n            assert(r ~== array(1, 2, 3))\n            print(\"`eig` returns the correct eigenvalues and no eigenvectors.\")\n        }\n        func pinv_test(){\n            var x = arange(3*4).reshape((3,4))\n            let y = pinv(x)\n            assert(x.dot(y).dot(x) ~== x)\n            assert(x.pI ~== pinv(x))\n            print(\"pseudo-inverse works\")\n        }\n        swift_complex_test()\n        scalar_test()\n        range_test()\n        argwhere_test()\n        matrix2d_indexing_test()\n        matrix2d_indexing_matrix_test()\n        fft_test()\n        dot_test()\n        svd_test()\n        svm_test()\n        inv_test()\n        solve_test()\n        eig_test()\n        pinv_test()\n    }\n    func numberTests(){\n        assert(close(0, y: 1e-10) == true)\n        assert(close(0, y: 1e-10) == (1e-10 ~= 0))\n        assert(rad2deg(pi/2) == 90)\n        assert(deg2rad(90) == pi/2)\n        assert(max(0, 1) == 1)\n        assert(min(0, 1) == 0)\n        assert(\"3.14\".floatValue == 3.14)\n        assert(3 / 4 == 0.75)\n        assert(3.25 / 4 == 0.8125)\n        assert(isNumber(3))\n        assert(!isNumber(zeros(2)))\n        assert(!isNumber(\"3.14\"))\n    }\n    class ndarrayTests{\n        init(){\n            initingTests()\n            ndarraySwiftTests()\n        }\n        func initingTests(){\n            // testing zeros and array\n            assert(zeros(4) ~== array(0,0,0,0))\n            assert(ones(4) ~== (zeros(4)+1))\n            assert(zeros_like(ones(4)) ~== zeros(4))\n            assert(arange(4) ~== array(0, 1, 2, 3))\n            assert(arange(2, max: 4) ~== array(2, 3))\n            assert(linspace(0,max: 1,num:3) ~== array(0, 0.5, 1))\n            assert(`repeat`(arange(2), N: 2) ~== array(0,1,0,1))\n            assert(copy(arange(4)) ~== arange(4))\n            assert(asarray(0..<2) ~== array(0, 1))\n            assert(copy(arange(3)) ~== array(0, 1, 2))\n            //assert(sum((rand(3) - array(0.516, 0.294, 0.727)) < 1e-2) == 3)\n            \n            var N = 1e4.int\n            seed(42)\n            var x = rand(N)\n            \n            seed(42)\n            var y = rand(N)\n            assert(x ~== y)\n            \n            seed(29)\n            y = rand(N)\n            assert(!(x ~== y))\n            \n            seed(42)\n            y = rand(N)\n            assert(x ~== y)\n            \n            assert(abs(x.mean() - 0.5) < 1e-1)\n            assert(abs(variance(x) - 1/12) < 1e-1)\n        }\n        func ndarraySwiftTests(){\n            // testing the file ndarray.swift\n            var x_idx = zeros(4)\n            x_idx[0..<2] <- 2\n            assert(x_idx ~== array(2, 2, 0, 0))\n            assert(arange(4).reshape((2,2)) ~== array(\"0 1; 2 3\"))\n            assert(arange(4).copy() ~== arange(4))\n            var x = array(4, 2, 3, 1)\n            x.sort()\n            assert(x ~== array(1, 2, 3, 4))\n            assert(x.min() == 1)\n            assert(x.max() == 4)\n            assert(x.mean() == 2.5)\n            assert(x[\"all\"] ~== array(1, 2, 3, 4))\n            x[0] = 0\n            assert(x[0] == 0)\n            x[0..<2] = array(1, 3)\n            assert(x[0..<2] ~== array(1, 3))\n            x[arange(2)] = array(4, 1)\n            assert(x[arange(2)] ~== array(4, 1))\n            \n            var y = array(5, 2, 4, 3, 1)\n            assert((y < 2) ~== array(0, 0, 0, 0, 1))\n            assert(reverse(y) ~== array(1, 3, 4, 2, 5))\n            assert(sort(y) ~== array(1, 2, 3, 4, 5))\n            assert(delete(y, idx: array(0, 1)) ~== array(4, 3, 1))\n            assert(asarray([0, 1, 2]) ~== array(0, 1, 2))\n            assert(asarray(0..<2) ~== array(0, 1))\n            assert(concat(array(1, 2), y: array(3, 4)) ~== (arange(4)+1))\n            assert(clip(y, a_min: 2, a_max: 4) ~== array(4, 2, 4, 3, 2))\n            assert(delete(y, idx: array(0, 1)) ~== array(4,3,1))\n            assert(`repeat`(array(0,1),N: 2) ~== array(0,1,0,1))\n            assert(`repeat`(array(0, 1),N:2, axis:1) ~== array(0,0,1,1))\n            assert(argmax(array(1,4,2,5)) == 3)\n            assert(argmin(array(1,4,2,5)) == 0)\n            assert(argsort(array(1,4,2,5)) ~== array(0, 2, 1, 3))\n\n            assert(arange(4) ~== array(0, 1, 2, 3))\n            var xO = array(1, 2, 3)\n            var yO = array(1, 2, 3) + 3\n            assert(outer(xO, y: yO) ~== array(4, 5, 6, 8, 10, 12, 12, 15, 18).reshape((3,3)))\n            var xR1 = array(1.1, 1.2, 1.3)\n            var xR2 = array(1, 1, 1)\n            assert(remainder(xR1, x2: xR2) ~== array(0.1, 0.2, 0.3))\n            assert(xR1 % 1.0 ~== array(0.1, 0.2, 0.3))\n            assert(1.0 % xR1 ~== ones(3))\n            assert(arange(4)[-1] == 3.0)\n            \n            var xR = arange(4*4).reshape((4,4))\n            assert(rank(xR) == 2.0)\n            \n            assert(pow(array(1,2,3,4), power: 2) ~== array(1,4,9,16))\n            assert(pow(ones(4)*2, y: ones(4)*2) ~== array(4, 4, 4, 4))\n            assert(pow(-1, y: array(1, 2, 3, 4)) ~== array(-1, 1, -1, 1))\n            assert(norm(array(1,1,1), ord:2) == sqrt(3))\n            assert(norm(array(1,0,1), ord:1) == 2)\n            assert(norm(array(4,0,0), ord:0) == 1)\n            assert(norm(array(4,0,0), ord:-1) == 4)\n            assert(norm(array(4,2,-3), ord:inf) == 4)\n            assert(norm(array(4,2,-3), ord:-inf) == 2)\n            \n            assert(sign(array(-3, 4, 5)) ~== array(-1, 1, 1))\n            assert(floor(array(1.1, 1.2, 1.6)) ~== array(1, 1, 1))\n            assert(round(array(1.1, 1.2, 1.6)) ~== array(1, 1, 2))\n            assert(ceil(array(1.2, 1.5, 1.8)) ~== ones(3)*2)\n            assert(log10(ones(4) * 10) ~== ones(4))\n            assert(log2(ones(4) * 2) ~== ones(4))\n            assert(log(ones(4) * e) ~== ones(4))\n            assert(exp2(ones(4)*2) ~== ones(4) * 4)\n            assert(exp(ones(4)*2) ~== ones(4)*e*e)\n        }\n    }\n    func matrixTests(){\n        var x = randn((4,4))\n        assert(eye(4).dot(eye(4)) ~== eye(4))\n        assert(x.dot(x.I) ~== eye(4))\n        var (u,v) = meshgrid(array(0,1), y: array(2,3))\n        assert(u ~== `repeat`(array(0,1), N: 2).reshape((2,2)).T)\n        assert(v ~== `repeat`(array(2,3), N: 2).reshape((2,2)))\n        \n        let A = arange(3*3).reshape((3, 3))\n        assert(abs(A.max() - 8) < 1e-3)\n        assert(abs(A.min() - 0) < 1e-3)\n    }\n    \n    func readWriteTests(){\n        let x1 = arange(9).reshape((3,3)) * 2\n        write_csv(x1, filename:\"../../python_testing/csvs/image.csv\")\n        let y1:matrix = read_csv(\"../../python_testing/csvs/image.csv\")\n        assert(x1 ~== y1)\n        \n        let x2 = array(1, 2, 3, 4, 5, 2, 1)\n        write_csv(x2, filename:\"../../python_testing/csvs/ndarray.csv\")\n        let y2:ndarray = read_csv(\"../../python_testing/csvs/ndarray.csv\")\n        assert(x2 ~== y2)\n        \n        let x3 = array(1, 5, 3, 1, 0, -10) * pi\n        write_binary(x3, filename:\"../../python_testing/csvs/x3.npy\")\n        let y3:ndarray = read_binary(\"../../python_testing/csvs/x3.npy\")\n        assert(y3 ~== x3)\n        \n        let x4 = arange(9).reshape((3,3))\n        write_binary(x4, filename:\"../../python_testing/csvs/x4.npy\")\n        let y4:matrix = read_binary(\"../../python_testing/csvs/x4.npy\")\n        assert(y4 ~== x4)\n    }\n    func twoDTests(){\n        var x = arange(9).reshape((3,3))\n        assert(x.T ~== transpose(x))\n        assert(x.I ~== inv(x))\n        assert(x[\"diag\"] ~== array(0, 4, 8))\n        var y = x.copy()\n        y[\"diag\"] = array(1, 5, 9)\n        assert(y ~== array(1, 1, 2, 3, 5, 5, 6, 7, 9).reshape((3,3)))\n        assert(eye(2) ~== array(1, 0, 0, 1).reshape((2,2)))\n        \n        assert(x[0..<2, 0..<2] ~== array(0, 1, 3, 4).reshape((2,2)))\n        var z2 = x.copy()\n        z2[0..<2, 0..<2] = array(1, 2, 3, 4).reshape((2,2))\n        assert(z2[0..<2, 0..<2] ~== array(1, 2, 3, 4).reshape((2,2)))\n        \n        assert(x.flat[array(1, 4, 5, 6)] ~== x[array(1, 4, 5, 6)])\n        y = x.copy()\n        y[array(1, 4, 5, 6)] = ones(4)\n        assert(y ~== array(0, 1, 2, 3, 1, 1, 1, 7, 8).reshape((3,3)))\n        \n        var z = arange(3*4).reshape((3,4))\n        assert(sum(z, axis:0) ~== array(12, 15, 18, 21))\n        assert(sum(z, axis:1) ~== array(6, 22, 38))\n        \n        var d1 = x.dot(y)\n        var d2 = x.dot(y)\n        var d3 = dot(x, y: y)\n        assert(d1 ~== d2)\n        assert(d1 ~== d3)\n    }\n    func functionTests(){\n        var x = array(-1, 0, 1)\n        \n        assert(abs(x) ~== array(1, 0, 1))\n        assert(sign(x+0.1) ~== array(-1, 1, 1))\n        assert(sum(x+1)     == 3)\n        assert(cumsum(x+1) ~== array(0, 1, 3))\n        assert(pow(x+1, power: 2) ~== array(0, 1, 4))\n        assert(((x+1)^2)   ~== array(0, 1, 4))\n        assert(variance(ones(4)) == 0)\n        assert(std(ones(4)) == 0)\n        assert(mean(x) == 0)\n        assert(abs(mean(rand(1000)) - 0.5) < 0.1)\n        assert(abs(mean(randn(1000))) < 0.1)\n        assert(abs(std(randn(1000)) - 1) < 0.2)\n        var y = randn((100,100))\n        assert(abs(mean(y.flat)) < 0.1)\n        y = rand((100, 100))\n        assert(abs(mean(y.flat) - 0.5) < 0.1)\n        \n        assert(`repeat`(array(0, 1), N: 2) ~== array(0, 1, 0, 1))\n        assert(`repeat`(array(0, 1), N: 2, axis:1) ~== array(0, 0, 1, 1))\n        \n//        var xC = zeros_like(x)\n        var xC = copy(x)\n        assert(xC ~== x.copy())\n        \n        assert(array(\"0 1 2; 3 4 5\") ~== arange(6).reshape((2,3)))\n        \n        var z1 = array(0, 1)\n        var z2 = array(2, 3)\n        var (z11, z22) = meshgrid(z1, y: z2)\n        assert(z11 ~== array(0, 0, 1, 1).reshape((2,2)))\n        assert(z22 ~== array(2, 3, 2, 3).reshape((2,2)))\n        \n        assert(x.min() == min(x))\n        assert(x.min() == -1)\n        \n        assert(x.max() == max(x))\n        assert(x.max() == 1)\n        \n        assert(x.copy() ~== copy(x))\n        assert(x.copy() ~== array(-1, 0, 1))\n        \n        assert(arange(4).reshape((2,2)).copy() ~== arange(4).reshape((2,2)))\n        \n        var z = array(-3, -2, -1, 0, 1, 2, 3)\n        assert(z[argwhere(z < 0)] ~== array(-3, -2, -1))\n        assert((z < 0) ~== array(1, 1, 1, 0, 0, 0, 0))\n        \n        assert(sin(array(1, 2, 3, 4)) ~== array(sin(1), sin(2), sin(3), sin(4)))\n//        func f(x:Double)->Double {return x+1}\n//        assert(apply_function(f,arange(100)) ~== (arange(100)+1))\n        var x5 = arange(5)\n        var y5 = array(1, 5, 3, 2, 6)\n        assert(max(x5, y: y5) ~== array(1, 5, 3, 3, 6))\n        assert(min(x5, y: y5) ~== array(0, 1, 2, 2, 4))\n        \n        var mx5 = arange(4).reshape((2,2))\n        var my5 = array(4, 2, 1, 0).reshape((2,2))\n        assert(min(mx5, y: my5) ~== array(0, 1, 1, 0).reshape((2,2)))\n        assert(reverse(y5) ~== array(6, 2, 3, 5, 1))\n        \n        assert(sort(y5) ~== array(1, 2, 3, 5, 6))\n        \n        seed(2)\n        var xR = rand(100)\n        seed(2)\n        var yR = rand(100)\n        assert(max(abs(xR - yR)) < 1e-6)\n        \n        func helper_test(){\n            let x = arange(2*3).reshape((2,3))\n            assert(fliplr(x) ~== array(2, 1, 0, 5, 4, 3).reshape((2,3)))\n            assert(flipud(x) ~== array(3, 4, 5, 0, 1, 2).reshape((2,3)))\n        }\n        helper_test()\n    }\n    func operatorTests(){\n        // l and o similar to 1 and 0\n        let l = ones(N)\n        let o = zeros(N)\n        \n        // PLUS\n        assert((o+1.double) ~== l)\n        assert((1.double+o) ~== l)\n        assert((l+o) ~== l)\n        \n        // MINUS\n        assert((l - o) ~== l)\n        assert((l - 1) ~== o)\n        assert((1 - o) ~== l)\n        \n        // MULTIPLY\n        assert(((o+1) * l) ~== l)\n        assert((l * 1) ~== l)\n        assert((1 * l) ~== l)\n        \n        // DIVIDE\n        assert(((l+1)/2) ~== l)\n        assert((o/l) ~== o)\n        assert((1 / l) ~== l)\n        \n        // POW\n        assert((array(1, 2, 3)^2) ~== array(1, 4, 9))\n        \n        // MODULO\n        assert(array(1, 3.14, 2.1)%1.0 ~== array(0, 0.14, 0.1))\n        assert(array(1, 2, 6) % 5 ~== array(1, 2, 1))\n    }\n    func comparisonTests(){\n        //     true:  <, >, <=, >=, ==, !==\n        let x = array(0, 3,  3,  4,  5,  7)\n        let y = array(1, 2,  3,  4,  5,  6)\n        \n        // matrix <op> matrix\n        assert((x < y) ~== array(1, 0, 0, 0, 0, 0))\n        assert((x > y) ~== array(0, 1, 0, 0, 0, 1))\n        assert((x <= y) ~== array(1, 0, 1, 1, 1, 0))\n        assert((x >= y) ~== array(0, 1, 1, 1, 1, 1))\n        assert((x == y) ~== array(0, 0, 1, 1, 1, 0))\n        assert((x !== y) ~== array(1, 1, 0, 0, 0, 1))\n        \n        // double <op> matrix\n        assert((4 < x) ~== array(0, 0, 0, 0, 1, 1))\n        assert((4 > x) ~== array(1, 1, 1, 0, 0, 0))\n        assert((4 >= x) ~== array(1, 1, 1, 1, 0, 0))\n        assert((4 <= x) ~== array(0, 0, 0, 1, 1, 1))\n        \n        // matrix <op> ouble\n        assert((x > 4) ~== array(0, 0, 0, 0, 1, 1))\n        assert((x < 4) ~== array(1, 1, 1, 0, 0, 0))\n        assert((x <= 4) ~== array(1, 1, 1, 1, 0, 0))\n        assert((x >= 4) ~== array(0, 0, 0, 1, 1, 1))\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app.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\tD259E2521BA53D5B0096A116 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2511BA53D5B0096A116 /* AppDelegate.swift */; };\n\t\tD259E2541BA53D5B0096A116 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2531BA53D5B0096A116 /* ViewController.swift */; };\n\t\tD259E2571BA53D5B0096A116 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D259E2551BA53D5B0096A116 /* Main.storyboard */; };\n\t\tD259E2591BA53D5B0096A116 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D259E2581BA53D5B0096A116 /* Assets.xcassets */; };\n\t\tD259E25C1BA53D5B0096A116 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D259E25A1BA53D5B0096A116 /* LaunchScreen.storyboard */; };\n\t\tD259E2671BA53D5B0096A116 /* swix_ios_appTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2661BA53D5B0096A116 /* swix_ios_appTests.swift */; };\n\t\tD259E2721BA53D5B0096A116 /* swix_ios_appUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2711BA53D5B0096A116 /* swix_ios_appUITests.swift */; };\n\t\tD259E2A11BA53DCE0096A116 /* imshow.py in Resources */ = {isa = PBXBuildFile; fileRef = D259E2801BA53DCE0096A116 /* imshow.py */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2A21BA53DCE0096A116 /* imshow.py in Resources */ = {isa = PBXBuildFile; fileRef = D259E2801BA53DCE0096A116 /* imshow.py */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2A31BA53DCE0096A116 /* imshow.py in Resources */ = {isa = PBXBuildFile; fileRef = D259E2801BA53DCE0096A116 /* imshow.py */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2A41BA53DCE0096A116 /* io.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2811BA53DCE0096A116 /* io.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2A51BA53DCE0096A116 /* io.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2811BA53DCE0096A116 /* io.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2A61BA53DCE0096A116 /* io.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2811BA53DCE0096A116 /* io.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2A71BA53DCE0096A116 /* machine_learning.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2831BA53DCE0096A116 /* machine_learning.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2A81BA53DCE0096A116 /* machine_learning.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2831BA53DCE0096A116 /* machine_learning.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2A91BA53DCE0096A116 /* machine_learning.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2831BA53DCE0096A116 /* machine_learning.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2AA1BA53DCE0096A116 /* m-complex-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2851BA53DCE0096A116 /* m-complex-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2AB1BA53DCE0096A116 /* m-complex-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2851BA53DCE0096A116 /* m-complex-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2AC1BA53DCE0096A116 /* m-complex-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2851BA53DCE0096A116 /* m-complex-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2AD1BA53DCE0096A116 /* m-helper-functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2861BA53DCE0096A116 /* m-helper-functions.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2AE1BA53DCE0096A116 /* m-helper-functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2861BA53DCE0096A116 /* m-helper-functions.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2AF1BA53DCE0096A116 /* m-helper-functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2861BA53DCE0096A116 /* m-helper-functions.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B01BA53DCE0096A116 /* m-image.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2871BA53DCE0096A116 /* m-image.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B11BA53DCE0096A116 /* m-image.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2871BA53DCE0096A116 /* m-image.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B21BA53DCE0096A116 /* m-image.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2871BA53DCE0096A116 /* m-image.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B31BA53DCE0096A116 /* m-initing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2881BA53DCE0096A116 /* m-initing.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B41BA53DCE0096A116 /* m-initing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2881BA53DCE0096A116 /* m-initing.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B51BA53DCE0096A116 /* m-initing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2881BA53DCE0096A116 /* m-initing.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B61BA53DCE0096A116 /* m-matrix.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2891BA53DCE0096A116 /* m-matrix.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B71BA53DCE0096A116 /* m-matrix.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2891BA53DCE0096A116 /* m-matrix.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B81BA53DCE0096A116 /* m-matrix.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2891BA53DCE0096A116 /* m-matrix.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2B91BA53DCE0096A116 /* m-operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28A1BA53DCE0096A116 /* m-operators.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2BA1BA53DCE0096A116 /* m-operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28A1BA53DCE0096A116 /* m-operators.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2BB1BA53DCE0096A116 /* m-operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28A1BA53DCE0096A116 /* m-operators.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2BC1BA53DCE0096A116 /* m-simple-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28B1BA53DCE0096A116 /* m-simple-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2BD1BA53DCE0096A116 /* m-simple-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28B1BA53DCE0096A116 /* m-simple-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2BE1BA53DCE0096A116 /* m-simple-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28B1BA53DCE0096A116 /* m-simple-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2BF1BA53DCE0096A116 /* complex-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28D1BA53DCE0096A116 /* complex-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C01BA53DCE0096A116 /* complex-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28D1BA53DCE0096A116 /* complex-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C11BA53DCE0096A116 /* complex-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28D1BA53DCE0096A116 /* complex-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C21BA53DCE0096A116 /* helper-functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28E1BA53DCE0096A116 /* helper-functions.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C31BA53DCE0096A116 /* helper-functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28E1BA53DCE0096A116 /* helper-functions.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C41BA53DCE0096A116 /* helper-functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28E1BA53DCE0096A116 /* helper-functions.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C51BA53DCE0096A116 /* initing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28F1BA53DCE0096A116 /* initing.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C61BA53DCE0096A116 /* initing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28F1BA53DCE0096A116 /* initing.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C71BA53DCE0096A116 /* initing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E28F1BA53DCE0096A116 /* initing.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C81BA53DCE0096A116 /* ndarray.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2901BA53DCE0096A116 /* ndarray.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2C91BA53DCE0096A116 /* ndarray.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2901BA53DCE0096A116 /* ndarray.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2CA1BA53DCE0096A116 /* ndarray.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2901BA53DCE0096A116 /* ndarray.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2CB1BA53DCE0096A116 /* operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2911BA53DCE0096A116 /* operators.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2CC1BA53DCE0096A116 /* operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2911BA53DCE0096A116 /* operators.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2CD1BA53DCE0096A116 /* operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2911BA53DCE0096A116 /* operators.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2CE1BA53DCE0096A116 /* simple-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2921BA53DCE0096A116 /* simple-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2CF1BA53DCE0096A116 /* simple-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2921BA53DCE0096A116 /* simple-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D01BA53DCE0096A116 /* simple-math.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2921BA53DCE0096A116 /* simple-math.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D11BA53DCE0096A116 /* numbers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2931BA53DCE0096A116 /* numbers.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D21BA53DCE0096A116 /* numbers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2931BA53DCE0096A116 /* numbers.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D31BA53DCE0096A116 /* numbers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2931BA53DCE0096A116 /* numbers.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D41BA53DCE0096A116 /* conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2951BA53DCE0096A116 /* conversion.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D51BA53DCE0096A116 /* conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2951BA53DCE0096A116 /* conversion.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D61BA53DCE0096A116 /* conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2951BA53DCE0096A116 /* conversion.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D71BA53DCE0096A116 /* machine_learning.mm in Sources */ = {isa = PBXBuildFile; fileRef = D259E2961BA53DCE0096A116 /* machine_learning.mm */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D81BA53DCE0096A116 /* machine_learning.mm in Sources */ = {isa = PBXBuildFile; fileRef = D259E2961BA53DCE0096A116 /* machine_learning.mm */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2D91BA53DCE0096A116 /* machine_learning.mm in Sources */ = {isa = PBXBuildFile; fileRef = D259E2961BA53DCE0096A116 /* machine_learning.mm */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2DA1BA53DCE0096A116 /* math.m in Sources */ = {isa = PBXBuildFile; fileRef = D259E2971BA53DCE0096A116 /* math.m */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2DB1BA53DCE0096A116 /* math.m in Sources */ = {isa = PBXBuildFile; fileRef = D259E2971BA53DCE0096A116 /* math.m */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2DC1BA53DCE0096A116 /* math.m in Sources */ = {isa = PBXBuildFile; fileRef = D259E2971BA53DCE0096A116 /* math.m */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2DD1BA53DCE0096A116 /* opencv.mm in Sources */ = {isa = PBXBuildFile; fileRef = D259E2991BA53DCE0096A116 /* opencv.mm */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2DE1BA53DCE0096A116 /* opencv.mm in Sources */ = {isa = PBXBuildFile; fileRef = D259E2991BA53DCE0096A116 /* opencv.mm */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2DF1BA53DCE0096A116 /* opencv.mm in Sources */ = {isa = PBXBuildFile; fileRef = D259E2991BA53DCE0096A116 /* opencv.mm */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E01BA53DCE0096A116 /* opencv2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D259E29A1BA53DCE0096A116 /* opencv2.framework */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E11BA53DCE0096A116 /* opencv2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D259E29A1BA53DCE0096A116 /* opencv2.framework */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E21BA53DCE0096A116 /* opencv2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D259E29A1BA53DCE0096A116 /* opencv2.framework */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E31BA53DCE0096A116 /* operations-and-indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = D259E29B1BA53DCE0096A116 /* operations-and-indexing.m */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E41BA53DCE0096A116 /* operations-and-indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = D259E29B1BA53DCE0096A116 /* operations-and-indexing.m */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E51BA53DCE0096A116 /* operations-and-indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = D259E29B1BA53DCE0096A116 /* operations-and-indexing.m */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E61BA53DCE0096A116 /* ScalarArithmetic-bleed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E29D1BA53DCE0096A116 /* ScalarArithmetic-bleed.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E71BA53DCE0096A116 /* ScalarArithmetic-bleed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E29D1BA53DCE0096A116 /* ScalarArithmetic-bleed.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E81BA53DCE0096A116 /* ScalarArithmetic-bleed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E29D1BA53DCE0096A116 /* ScalarArithmetic-bleed.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2E91BA53DCE0096A116 /* speed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E29F1BA53DCE0096A116 /* speed.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2EA1BA53DCE0096A116 /* speed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E29F1BA53DCE0096A116 /* speed.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2EB1BA53DCE0096A116 /* speed.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E29F1BA53DCE0096A116 /* speed.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2EC1BA53DCE0096A116 /* tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2A01BA53DCE0096A116 /* tests.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2ED1BA53DCE0096A116 /* tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2A01BA53DCE0096A116 /* tests.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2EE1BA53DCE0096A116 /* tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D259E2A01BA53DCE0096A116 /* tests.swift */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2F01BA53EC70096A116 /* space_shuttle.png in Resources */ = {isa = PBXBuildFile; fileRef = D259E2EF1BA53EC70096A116 /* space_shuttle.png */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2F11BA53EC70096A116 /* space_shuttle.png in Resources */ = {isa = PBXBuildFile; fileRef = D259E2EF1BA53EC70096A116 /* space_shuttle.png */; settings = {ASSET_TAGS = (); }; };\n\t\tD259E2F21BA53EC70096A116 /* space_shuttle.png in Resources */ = {isa = PBXBuildFile; fileRef = D259E2EF1BA53EC70096A116 /* space_shuttle.png */; settings = {ASSET_TAGS = (); }; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tD259E2631BA53D5B0096A116 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D259E2461BA53D5B0096A116 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D259E24D1BA53D5B0096A116;\n\t\t\tremoteInfo = swix_ios_app;\n\t\t};\n\t\tD259E26E1BA53D5B0096A116 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D259E2461BA53D5B0096A116 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D259E24D1BA53D5B0096A116;\n\t\t\tremoteInfo = swix_ios_app;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\tD259E24E1BA53D5B0096A116 /* swix_ios_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = swix_ios_app.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD259E2511BA53D5B0096A116 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tD259E2531BA53D5B0096A116 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\tD259E2561BA53D5B0096A116 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tD259E2581BA53D5B0096A116 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tD259E25B1BA53D5B0096A116 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tD259E25D1BA53D5B0096A116 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD259E2621BA53D5B0096A116 /* swix_ios_appTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = swix_ios_appTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD259E2661BA53D5B0096A116 /* swix_ios_appTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = swix_ios_appTests.swift; sourceTree = \"<group>\"; };\n\t\tD259E2681BA53D5B0096A116 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD259E26D1BA53D5B0096A116 /* swix_ios_appUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = swix_ios_appUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD259E2711BA53D5B0096A116 /* swix_ios_appUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = swix_ios_appUITests.swift; sourceTree = \"<group>\"; };\n\t\tD259E2731BA53D5B0096A116 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD259E2801BA53DCE0096A116 /* imshow.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = imshow.py; sourceTree = \"<group>\"; };\n\t\tD259E2811BA53DCE0096A116 /* io.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = io.swift; sourceTree = \"<group>\"; };\n\t\tD259E2831BA53DCE0096A116 /* machine_learning.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = machine_learning.swift; sourceTree = \"<group>\"; };\n\t\tD259E2851BA53DCE0096A116 /* m-complex-math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-complex-math.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E2861BA53DCE0096A116 /* m-helper-functions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-helper-functions.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E2871BA53DCE0096A116 /* m-image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-image.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E2881BA53DCE0096A116 /* m-initing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-initing.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E2891BA53DCE0096A116 /* m-matrix.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-matrix.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E28A1BA53DCE0096A116 /* m-operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-operators.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E28B1BA53DCE0096A116 /* m-simple-math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"m-simple-math.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E28D1BA53DCE0096A116 /* complex-math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"complex-math.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E28E1BA53DCE0096A116 /* helper-functions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"helper-functions.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E28F1BA53DCE0096A116 /* initing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = initing.swift; sourceTree = \"<group>\"; };\n\t\tD259E2901BA53DCE0096A116 /* ndarray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ndarray.swift; sourceTree = \"<group>\"; };\n\t\tD259E2911BA53DCE0096A116 /* operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = operators.swift; sourceTree = \"<group>\"; };\n\t\tD259E2921BA53DCE0096A116 /* simple-math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"simple-math.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E2931BA53DCE0096A116 /* numbers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = numbers.swift; sourceTree = \"<group>\"; };\n\t\tD259E2951BA53DCE0096A116 /* conversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = conversion.swift; sourceTree = \"<group>\"; };\n\t\tD259E2961BA53DCE0096A116 /* machine_learning.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = machine_learning.mm; sourceTree = \"<group>\"; };\n\t\tD259E2971BA53DCE0096A116 /* math.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = math.m; sourceTree = \"<group>\"; };\n\t\tD259E2981BA53DCE0096A116 /* OpenCV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenCV.h; sourceTree = \"<group>\"; };\n\t\tD259E2991BA53DCE0096A116 /* opencv.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = opencv.mm; sourceTree = \"<group>\"; };\n\t\tD259E29A1BA53DCE0096A116 /* opencv2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = opencv2.framework; sourceTree = \"<group>\"; };\n\t\tD259E29B1BA53DCE0096A116 /* operations-and-indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"operations-and-indexing.m\"; sourceTree = \"<group>\"; };\n\t\tD259E29C1BA53DCE0096A116 /* swix-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"swix-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\tD259E29D1BA53DCE0096A116 /* ScalarArithmetic-bleed.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"ScalarArithmetic-bleed.swift\"; sourceTree = \"<group>\"; };\n\t\tD259E29F1BA53DCE0096A116 /* speed.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = speed.swift; sourceTree = \"<group>\"; };\n\t\tD259E2A01BA53DCE0096A116 /* tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = tests.swift; sourceTree = \"<group>\"; };\n\t\tD259E2EF1BA53EC70096A116 /* space_shuttle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = space_shuttle.png; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tD259E24B1BA53D5B0096A116 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2E01BA53DCE0096A116 /* opencv2.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD259E25F1BA53D5B0096A116 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2E11BA53DCE0096A116 /* opencv2.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD259E26A1BA53D5B0096A116 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2E21BA53DCE0096A116 /* opencv2.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\tD259E2451BA53D5B0096A116 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2501BA53D5B0096A116 /* swix_ios_app */,\n\t\t\t\tD259E2651BA53D5B0096A116 /* swix_ios_appTests */,\n\t\t\t\tD259E2701BA53D5B0096A116 /* swix_ios_appUITests */,\n\t\t\t\tD259E24F1BA53D5B0096A116 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E24F1BA53D5B0096A116 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E24E1BA53D5B0096A116 /* swix_ios_app.app */,\n\t\t\t\tD259E2621BA53D5B0096A116 /* swix_ios_appTests.xctest */,\n\t\t\t\tD259E26D1BA53D5B0096A116 /* swix_ios_appUITests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E2501BA53D5B0096A116 /* swix_ios_app */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2511BA53D5B0096A116 /* AppDelegate.swift */,\n\t\t\t\tD259E2531BA53D5B0096A116 /* ViewController.swift */,\n\t\t\t\tD259E2EF1BA53EC70096A116 /* space_shuttle.png */,\n\t\t\t\tD259E27F1BA53DCE0096A116 /* swix */,\n\t\t\t\tD259E2551BA53D5B0096A116 /* Main.storyboard */,\n\t\t\t\tD259E2581BA53D5B0096A116 /* Assets.xcassets */,\n\t\t\t\tD259E25A1BA53D5B0096A116 /* LaunchScreen.storyboard */,\n\t\t\t\tD259E25D1BA53D5B0096A116 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = swix_ios_app;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E2651BA53D5B0096A116 /* swix_ios_appTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2661BA53D5B0096A116 /* swix_ios_appTests.swift */,\n\t\t\t\tD259E2681BA53D5B0096A116 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = swix_ios_appTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E2701BA53D5B0096A116 /* swix_ios_appUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2711BA53D5B0096A116 /* swix_ios_appUITests.swift */,\n\t\t\t\tD259E2731BA53D5B0096A116 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = swix_ios_appUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E27F1BA53DCE0096A116 /* swix */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2801BA53DCE0096A116 /* imshow.py */,\n\t\t\t\tD259E2811BA53DCE0096A116 /* io.swift */,\n\t\t\t\tD259E2821BA53DCE0096A116 /* machine_learning */,\n\t\t\t\tD259E2841BA53DCE0096A116 /* matrix */,\n\t\t\t\tD259E28C1BA53DCE0096A116 /* ndarray */,\n\t\t\t\tD259E2931BA53DCE0096A116 /* numbers.swift */,\n\t\t\t\tD259E2941BA53DCE0096A116 /* objc */,\n\t\t\t\tD259E29D1BA53DCE0096A116 /* ScalarArithmetic-bleed.swift */,\n\t\t\t\tD259E29E1BA53DCE0096A116 /* tests */,\n\t\t\t);\n\t\t\tpath = swix;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E2821BA53DCE0096A116 /* machine_learning */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2831BA53DCE0096A116 /* machine_learning.swift */,\n\t\t\t);\n\t\t\tpath = machine_learning;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E2841BA53DCE0096A116 /* matrix */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2851BA53DCE0096A116 /* m-complex-math.swift */,\n\t\t\t\tD259E2861BA53DCE0096A116 /* m-helper-functions.swift */,\n\t\t\t\tD259E2871BA53DCE0096A116 /* m-image.swift */,\n\t\t\t\tD259E2881BA53DCE0096A116 /* m-initing.swift */,\n\t\t\t\tD259E2891BA53DCE0096A116 /* m-matrix.swift */,\n\t\t\t\tD259E28A1BA53DCE0096A116 /* m-operators.swift */,\n\t\t\t\tD259E28B1BA53DCE0096A116 /* m-simple-math.swift */,\n\t\t\t);\n\t\t\tpath = matrix;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E28C1BA53DCE0096A116 /* ndarray */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E28D1BA53DCE0096A116 /* complex-math.swift */,\n\t\t\t\tD259E28E1BA53DCE0096A116 /* helper-functions.swift */,\n\t\t\t\tD259E28F1BA53DCE0096A116 /* initing.swift */,\n\t\t\t\tD259E2901BA53DCE0096A116 /* ndarray.swift */,\n\t\t\t\tD259E2911BA53DCE0096A116 /* operators.swift */,\n\t\t\t\tD259E2921BA53DCE0096A116 /* simple-math.swift */,\n\t\t\t);\n\t\t\tpath = ndarray;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E2941BA53DCE0096A116 /* objc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2951BA53DCE0096A116 /* conversion.swift */,\n\t\t\t\tD259E2961BA53DCE0096A116 /* machine_learning.mm */,\n\t\t\t\tD259E2971BA53DCE0096A116 /* math.m */,\n\t\t\t\tD259E2981BA53DCE0096A116 /* OpenCV.h */,\n\t\t\t\tD259E2991BA53DCE0096A116 /* opencv.mm */,\n\t\t\t\tD259E29A1BA53DCE0096A116 /* opencv2.framework */,\n\t\t\t\tD259E29B1BA53DCE0096A116 /* operations-and-indexing.m */,\n\t\t\t\tD259E29C1BA53DCE0096A116 /* swix-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = objc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E29E1BA53DCE0096A116 /* tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E29F1BA53DCE0096A116 /* speed.swift */,\n\t\t\t\tD259E2A01BA53DCE0096A116 /* tests.swift */,\n\t\t\t);\n\t\t\tpath = tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tD259E24D1BA53D5B0096A116 /* swix_ios_app */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D259E2761BA53D5B0096A116 /* Build configuration list for PBXNativeTarget \"swix_ios_app\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD259E24A1BA53D5B0096A116 /* Sources */,\n\t\t\t\tD259E24B1BA53D5B0096A116 /* Frameworks */,\n\t\t\t\tD259E24C1BA53D5B0096A116 /* 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 = swix_ios_app;\n\t\t\tproductName = swix_ios_app;\n\t\t\tproductReference = D259E24E1BA53D5B0096A116 /* swix_ios_app.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tD259E2611BA53D5B0096A116 /* swix_ios_appTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D259E2791BA53D5B0096A116 /* Build configuration list for PBXNativeTarget \"swix_ios_appTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD259E25E1BA53D5B0096A116 /* Sources */,\n\t\t\t\tD259E25F1BA53D5B0096A116 /* Frameworks */,\n\t\t\t\tD259E2601BA53D5B0096A116 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD259E2641BA53D5B0096A116 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = swix_ios_appTests;\n\t\t\tproductName = swix_ios_appTests;\n\t\t\tproductReference = D259E2621BA53D5B0096A116 /* swix_ios_appTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tD259E26C1BA53D5B0096A116 /* swix_ios_appUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D259E27C1BA53D5B0096A116 /* Build configuration list for PBXNativeTarget \"swix_ios_appUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD259E2691BA53D5B0096A116 /* Sources */,\n\t\t\t\tD259E26A1BA53D5B0096A116 /* Frameworks */,\n\t\t\t\tD259E26B1BA53D5B0096A116 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD259E26F1BA53D5B0096A116 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = swix_ios_appUITests;\n\t\t\tproductName = swix_ios_appUITests;\n\t\t\tproductReference = D259E26D1BA53D5B0096A116 /* swix_ios_appUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tD259E2461BA53D5B0096A116 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = com.scott;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD259E24D1BA53D5B0096A116 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.0;\n\t\t\t\t\t};\n\t\t\t\t\tD259E2611BA53D5B0096A116 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.0;\n\t\t\t\t\t\tTestTargetID = D259E24D1BA53D5B0096A116;\n\t\t\t\t\t};\n\t\t\t\t\tD259E26C1BA53D5B0096A116 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.0;\n\t\t\t\t\t\tTestTargetID = D259E24D1BA53D5B0096A116;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = D259E2491BA53D5B0096A116 /* Build configuration list for PBXProject \"swix_ios_app\" */;\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 = D259E2451BA53D5B0096A116;\n\t\t\tproductRefGroup = D259E24F1BA53D5B0096A116 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tD259E24D1BA53D5B0096A116 /* swix_ios_app */,\n\t\t\t\tD259E2611BA53D5B0096A116 /* swix_ios_appTests */,\n\t\t\t\tD259E26C1BA53D5B0096A116 /* swix_ios_appUITests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tD259E24C1BA53D5B0096A116 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2F01BA53EC70096A116 /* space_shuttle.png in Resources */,\n\t\t\t\tD259E25C1BA53D5B0096A116 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tD259E2591BA53D5B0096A116 /* Assets.xcassets in Resources */,\n\t\t\t\tD259E2571BA53D5B0096A116 /* Main.storyboard in Resources */,\n\t\t\t\tD259E2A11BA53DCE0096A116 /* imshow.py in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD259E2601BA53D5B0096A116 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2F11BA53EC70096A116 /* space_shuttle.png in Resources */,\n\t\t\t\tD259E2A21BA53DCE0096A116 /* imshow.py in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD259E26B1BA53D5B0096A116 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2F21BA53EC70096A116 /* space_shuttle.png in Resources */,\n\t\t\t\tD259E2A31BA53DCE0096A116 /* imshow.py 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\tD259E24A1BA53D5B0096A116 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2CE1BA53DCE0096A116 /* simple-math.swift in Sources */,\n\t\t\t\tD259E2C51BA53DCE0096A116 /* initing.swift in Sources */,\n\t\t\t\tD259E2541BA53D5B0096A116 /* ViewController.swift in Sources */,\n\t\t\t\tD259E2BC1BA53DCE0096A116 /* m-simple-math.swift in Sources */,\n\t\t\t\tD259E2B61BA53DCE0096A116 /* m-matrix.swift in Sources */,\n\t\t\t\tD259E2AD1BA53DCE0096A116 /* m-helper-functions.swift in Sources */,\n\t\t\t\tD259E2E31BA53DCE0096A116 /* operations-and-indexing.m in Sources */,\n\t\t\t\tD259E2B01BA53DCE0096A116 /* m-image.swift in Sources */,\n\t\t\t\tD259E2E91BA53DCE0096A116 /* speed.swift in Sources */,\n\t\t\t\tD259E2E61BA53DCE0096A116 /* ScalarArithmetic-bleed.swift in Sources */,\n\t\t\t\tD259E2D71BA53DCE0096A116 /* machine_learning.mm in Sources */,\n\t\t\t\tD259E2C81BA53DCE0096A116 /* ndarray.swift in Sources */,\n\t\t\t\tD259E2A71BA53DCE0096A116 /* machine_learning.swift in Sources */,\n\t\t\t\tD259E2C21BA53DCE0096A116 /* helper-functions.swift in Sources */,\n\t\t\t\tD259E2CB1BA53DCE0096A116 /* operators.swift in Sources */,\n\t\t\t\tD259E2DA1BA53DCE0096A116 /* math.m in Sources */,\n\t\t\t\tD259E2B91BA53DCE0096A116 /* m-operators.swift in Sources */,\n\t\t\t\tD259E2D11BA53DCE0096A116 /* numbers.swift in Sources */,\n\t\t\t\tD259E2A41BA53DCE0096A116 /* io.swift in Sources */,\n\t\t\t\tD259E2DD1BA53DCE0096A116 /* opencv.mm in Sources */,\n\t\t\t\tD259E2BF1BA53DCE0096A116 /* complex-math.swift in Sources */,\n\t\t\t\tD259E2521BA53D5B0096A116 /* AppDelegate.swift in Sources */,\n\t\t\t\tD259E2B31BA53DCE0096A116 /* m-initing.swift in Sources */,\n\t\t\t\tD259E2D41BA53DCE0096A116 /* conversion.swift in Sources */,\n\t\t\t\tD259E2AA1BA53DCE0096A116 /* m-complex-math.swift in Sources */,\n\t\t\t\tD259E2EC1BA53DCE0096A116 /* tests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD259E25E1BA53D5B0096A116 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2BA1BA53DCE0096A116 /* m-operators.swift in Sources */,\n\t\t\t\tD259E2E41BA53DCE0096A116 /* operations-and-indexing.m in Sources */,\n\t\t\t\tD259E2C01BA53DCE0096A116 /* complex-math.swift in Sources */,\n\t\t\t\tD259E2B71BA53DCE0096A116 /* m-matrix.swift in Sources */,\n\t\t\t\tD259E2D21BA53DCE0096A116 /* numbers.swift in Sources */,\n\t\t\t\tD259E2E71BA53DCE0096A116 /* ScalarArithmetic-bleed.swift in Sources */,\n\t\t\t\tD259E2C31BA53DCE0096A116 /* helper-functions.swift in Sources */,\n\t\t\t\tD259E2EA1BA53DCE0096A116 /* speed.swift in Sources */,\n\t\t\t\tD259E2AB1BA53DCE0096A116 /* m-complex-math.swift in Sources */,\n\t\t\t\tD259E2B11BA53DCE0096A116 /* m-image.swift in Sources */,\n\t\t\t\tD259E2D51BA53DCE0096A116 /* conversion.swift in Sources */,\n\t\t\t\tD259E2AE1BA53DCE0096A116 /* m-helper-functions.swift in Sources */,\n\t\t\t\tD259E2671BA53D5B0096A116 /* swix_ios_appTests.swift in Sources */,\n\t\t\t\tD259E2DE1BA53DCE0096A116 /* opencv.mm in Sources */,\n\t\t\t\tD259E2B41BA53DCE0096A116 /* m-initing.swift in Sources */,\n\t\t\t\tD259E2D81BA53DCE0096A116 /* machine_learning.mm in Sources */,\n\t\t\t\tD259E2A51BA53DCE0096A116 /* io.swift in Sources */,\n\t\t\t\tD259E2C61BA53DCE0096A116 /* initing.swift in Sources */,\n\t\t\t\tD259E2A81BA53DCE0096A116 /* machine_learning.swift in Sources */,\n\t\t\t\tD259E2DB1BA53DCE0096A116 /* math.m in Sources */,\n\t\t\t\tD259E2BD1BA53DCE0096A116 /* m-simple-math.swift in Sources */,\n\t\t\t\tD259E2ED1BA53DCE0096A116 /* tests.swift in Sources */,\n\t\t\t\tD259E2CF1BA53DCE0096A116 /* simple-math.swift in Sources */,\n\t\t\t\tD259E2C91BA53DCE0096A116 /* ndarray.swift in Sources */,\n\t\t\t\tD259E2CC1BA53DCE0096A116 /* operators.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD259E2691BA53D5B0096A116 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD259E2BB1BA53DCE0096A116 /* m-operators.swift in Sources */,\n\t\t\t\tD259E2E51BA53DCE0096A116 /* operations-and-indexing.m in Sources */,\n\t\t\t\tD259E2C11BA53DCE0096A116 /* complex-math.swift in Sources */,\n\t\t\t\tD259E2B81BA53DCE0096A116 /* m-matrix.swift in Sources */,\n\t\t\t\tD259E2D31BA53DCE0096A116 /* numbers.swift in Sources */,\n\t\t\t\tD259E2E81BA53DCE0096A116 /* ScalarArithmetic-bleed.swift in Sources */,\n\t\t\t\tD259E2C41BA53DCE0096A116 /* helper-functions.swift in Sources */,\n\t\t\t\tD259E2EB1BA53DCE0096A116 /* speed.swift in Sources */,\n\t\t\t\tD259E2AC1BA53DCE0096A116 /* m-complex-math.swift in Sources */,\n\t\t\t\tD259E2B21BA53DCE0096A116 /* m-image.swift in Sources */,\n\t\t\t\tD259E2D61BA53DCE0096A116 /* conversion.swift in Sources */,\n\t\t\t\tD259E2AF1BA53DCE0096A116 /* m-helper-functions.swift in Sources */,\n\t\t\t\tD259E2721BA53D5B0096A116 /* swix_ios_appUITests.swift in Sources */,\n\t\t\t\tD259E2DF1BA53DCE0096A116 /* opencv.mm in Sources */,\n\t\t\t\tD259E2B51BA53DCE0096A116 /* m-initing.swift in Sources */,\n\t\t\t\tD259E2D91BA53DCE0096A116 /* machine_learning.mm in Sources */,\n\t\t\t\tD259E2A61BA53DCE0096A116 /* io.swift in Sources */,\n\t\t\t\tD259E2C71BA53DCE0096A116 /* initing.swift in Sources */,\n\t\t\t\tD259E2A91BA53DCE0096A116 /* machine_learning.swift in Sources */,\n\t\t\t\tD259E2DC1BA53DCE0096A116 /* math.m in Sources */,\n\t\t\t\tD259E2BE1BA53DCE0096A116 /* m-simple-math.swift in Sources */,\n\t\t\t\tD259E2EE1BA53DCE0096A116 /* tests.swift in Sources */,\n\t\t\t\tD259E2D01BA53DCE0096A116 /* simple-math.swift in Sources */,\n\t\t\t\tD259E2CA1BA53DCE0096A116 /* ndarray.swift in Sources */,\n\t\t\t\tD259E2CD1BA53DCE0096A116 /* operators.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\tD259E2641BA53D5B0096A116 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D259E24D1BA53D5B0096A116 /* swix_ios_app */;\n\t\t\ttargetProxy = D259E2631BA53D5B0096A116 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD259E26F1BA53D5B0096A116 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D259E24D1BA53D5B0096A116 /* swix_ios_app */;\n\t\t\ttargetProxy = D259E26E1BA53D5B0096A116 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tD259E2551BA53D5B0096A116 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E2561BA53D5B0096A116 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD259E25A1BA53D5B0096A116 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tD259E25B1BA53D5B0096A116 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tD259E2741BA53D5B0096A116 /* 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\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.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_OBJC_BRIDGING_HEADER = \"swix_ios_app/swix/objc/swix-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD259E2751BA53D5B0096A116 /* 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\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.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"swix_ios_app/swix/objc/swix-Bridging-Header.h\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD259E2771BA53D5B0096A116 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/swix_ios_app/swix/objc\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = swix_ios_app/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"stss.swix-ios-app\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD259E2781BA53D5B0096A116 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/swix_ios_app/swix/objc\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = swix_ios_app/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"stss.swix-ios-app\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD259E27A1BA53D5B0096A116 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/swix_ios_app/swix/objc\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = swix_ios_appTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"stss.swix-ios-appTests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/swix_ios_app.app/swix_ios_app\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD259E27B1BA53D5B0096A116 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/swix_ios_app/swix/objc\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = swix_ios_appTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"stss.swix-ios-appTests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/swix_ios_app.app/swix_ios_app\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD259E27D1BA53D5B0096A116 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/swix_ios_app/swix/objc\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = swix_ios_appUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"stss.swix-ios-appUITests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = swix_ios_app;\n\t\t\t\tUSES_XCTRUNNER = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD259E27E1BA53D5B0096A116 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/swix_ios_app/swix/objc\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = swix_ios_appUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"stss.swix-ios-appUITests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = swix_ios_app;\n\t\t\t\tUSES_XCTRUNNER = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tD259E2491BA53D5B0096A116 /* Build configuration list for PBXProject \"swix_ios_app\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD259E2741BA53D5B0096A116 /* Debug */,\n\t\t\t\tD259E2751BA53D5B0096A116 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD259E2761BA53D5B0096A116 /* Build configuration list for PBXNativeTarget \"swix_ios_app\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD259E2771BA53D5B0096A116 /* Debug */,\n\t\t\t\tD259E2781BA53D5B0096A116 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n\t\tD259E2791BA53D5B0096A116 /* Build configuration list for PBXNativeTarget \"swix_ios_appTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD259E27A1BA53D5B0096A116 /* Debug */,\n\t\t\t\tD259E27B1BA53D5B0096A116 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n\t\tD259E27C1BA53D5B0096A116 /* Build configuration list for PBXNativeTarget \"swix_ios_appUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD259E27D1BA53D5B0096A116 /* Debug */,\n\t\t\t\tD259E27E1BA53D5B0096A116 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = D259E2461BA53D5B0096A116 /* Project object */;\n}\n"
  },
  {
    "path": "swix_ios_app/swix_ios_app.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:swix_ios_app.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "swix_ios_app/swix_ios_appTests/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": "swix_ios_app/swix_ios_appTests/swix_ios_appTests.swift",
    "content": "//\n//  swix_ios_appTests.swift\n//  swix_ios_appTests\n//\n//  Created by Scott Sievert on 9/13/15.\n//  Copyright © 2015 com.scott. All rights reserved.\n//\n\nimport XCTest\n@testable import swix_ios_app\n\nclass swix_ios_appTests: 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": "swix_ios_app/swix_ios_appUITests/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": "swix_ios_app/swix_ios_appUITests/swix_ios_appUITests.swift",
    "content": "//\n//  swix_ios_appUITests.swift\n//  swix_ios_appUITests\n//\n//  Created by Scott Sievert on 9/13/15.\n//  Copyright © 2015 com.scott. All rights reserved.\n//\n\nimport XCTest\n\nclass swix_ios_appUITests: XCTestCase {\n        \n    override func setUp() {\n        super.setUp()\n        \n        // Put setup code here. This method is called before the invocation of each test method in the class.\n        \n        // In UI tests it is usually best to stop immediately when a failure occurs.\n        continueAfterFailure = false\n        // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.\n        XCUIApplication().launch()\n\n        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.\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        // Use recording to get started writing UI tests.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n}\n"
  }
]